Where does your system break?
Find it before your customers do. Spitfire raises the load step by step, shows where latency starts to bend, and marks the run as failed the moment a threshold breaks. Tests are built in the browser, no code needed.
curl -fsSL https://spitfire.tr/install.sh | bash -s -- dockerone command: Docker is all you needFill in a test like a form.
Scenario, stages, steps and thresholds on one screen. Behind it the same test is kept as JSON, so you can also write it as a file.
An illustration of the interface; real screenshots to follow.
After you press Run.
40 virtual users, two locations, four steps: the charts fill second by second, thresholds are evaluated live, and the per-location and per-step breakdown is ready at the end.
What can it do?
Beyond HTTP, in the same test
A user journey calls the API, drops a message on a queue and queries the database. Spitfire loads all of them as steps of one test.
One run, several cities.
Split the load across locations by percentage and see each location's latency separately. Remote runners connect outbound to the controller over TLS with key pinning, so the load servers need no inbound ports.
A runner installs as a Docker image or as a single binary with a systemd unit; the UI prepares the install command.
--ca-pin sha256:9f2c…e41a
Why Spitfire?
| Spitfire | k6 | JMeter | Locust | |
|---|---|---|---|---|
| To write a test | Web editor or JSON | JavaScript | Desktop GUI | Python |
| Single sign-on (OIDC, LDAP) | ✓ group → role mapping | — cloud edition | — | — |
| Self-hosted team UI | ✓ roles, groups | — cloud edition | — | ~ no users |
| SQL · Kafka · MQTT · Redis · MongoDB | ✓ built in | ~ extensions | ~ partly | ~ in code |
| Several locations in one run | ✓ by percent | — cloud edition | ~ manual | ~ manual |
| Tests from OpenAPI / Postman / HAR | ✓ in the UI, auto-correlation | ~ separate converters | ~ recording proxy, plugins | — |
| Production write guard | ✓ | — | — | — |
| Shareable report | ✓ PDF, HTML, link | ~ HTML only | ~ HTML only | ~ HTML only |
| Scheduled runs + Slack / Teams / e-mail | ✓ built in, PDF attached | — cloud edition | ~ via a CI server | — |
| Alert on a regression against the baseline | ✓ Slack, Teams, e-mail, webhook | — | — | — |
| Responses of failed requests | ✓ samples on the run page | ~ by logging in code | ~ with a listener | ~ error text only |
| Audit log | ✓ tamper-proof | — | — | — |
| Pass/fail exit code for CI | ✓ k6-compatible, on your runners | ✓ | ~ | ✓ |
Compared against each tool's open-source edition. Detailed comparison →
Your first test in three steps.
All you need is Docker (plus kubectl for Kubernetes). No Go or Node required.
Install
curl -fsSL https://spitfire.tr/install.sh | bash -s -- docker
Starts Postgres, the controller, the web UI and 2 runners.
Create the admin
Setup code: K7QM-2XRT-9WHPOpen the address printed at the end and create the first admin with the one-time setup code.
Add a test, press Run
Tests → New → Run
Have Swagger/OpenAPI or Postman? Tests → From API document. For another location, Runners → registration key; the command is ready there.
From load to verdict, in one place.
Tests, connections, runners and every run's result live in one interface. Your team looks at the same number.
Real user journeys
Log in, list, order. A value from one response becomes the next step's variable, and every response is checked.
Tests from your API docs or a browser recording
Point it at an OpenAPI 3, Swagger 2.0 or Postman collection, or a HAR file recorded in the browser; the requests you pick become steps. In a recording, tokens and ids a response returned and a later request sent back become variables automatically, and pauses become think time. Methods that change data need a separate approval.
Realistic data and sessions
Upload a CSV and every iteration takes a row: in order, at random, or unique across runners. Each virtual user keeps its own cookies, so logged-in web flows work without passing headers by hand.
Load from several cities
Split a run across locations by percentage. Remote runners dial out over TLS with key pinning, so no inbound ports are needed.
Scheduled runs, instant news
Run a test every night or every weekday morning. When a threshold breaks, a run fails or a scheduled run does not start, Slack, Teams or e-mail hears about it; the e-mail carries the PDF report. When a run is clearly worse than its baseline run (p95, p99, error rate, requests/s), you hear before any threshold breaks: while the system slows down, before users notice. Only on problems and only for the tests you pick, if you like.
Sign in with the company identity
Single sign-on with Entra ID, Okta, Google, Keycloak (OpenID Connect) or Active Directory / LDAP. Accounts open on first sign-in; the admin role and group memberships come from the identity provider's groups. If you like, password sign-in stays for admins only.
A guard against production writes
SQL and MongoDB writes and dangerous Redis commands are flagged, and nothing runs until each step is approved. Passwords stay in an encrypted vault.
Live results, compared with history
Per-second charts with per-step and per-location breakdowns. Mark a baseline and regressions show side by side.
Not just "500": what the server said
The run page keeps samples of failed requests: a few per step and outcome, with the target, the error, the failed check, a few response headers and the first 2 KB of the body. Tokens in the address are masked, cookies are never kept, and steps that do not fail cost nothing.
Every save is a version
The test page lists versions, who saved them and the diff with the current one; an old version comes back as a new one in one click. When two people edit the same test, the second save warns instead of overwriting. Every run knows which version it ran.
APIs that want a client certificate
When internal or partner APIs are protected with mTLS and a private CA, put the certificate and key in the connection vault once; HTTP, WebSocket and SSE steps pick it. The key is stored encrypted and never enters the test definition; the Test button checks the certificate has not expired.
A report ready for your manager or customer
Every run becomes an HTML or PDF report in one click: charts, thresholds, steps, locations and the change against the baseline run. Send it to someone without an account through a time-limited, revocable link; raw data downloads as CSV.
A release gate in CI
GitHub Actions, GitLab CI or Jenkins run the saved test on the controller with an API token and pass or fail on its thresholds; the UI prepares the steps. The CLI also runs the same test file without a controller. Exit codes match k6.
Talks to your monitoring
Run events go out as signed webhooks, live metrics over OTLP and Prometheus. In METI, the AI attributes symptoms inside the test window to the load test: no false alarm, no wrong root cause.
Built for teams
Admin and user roles; groups grant run rights per test. The audit log keeps who did what and when, tamper-proof and exportable to CSV. The interface speaks Turkish and English.
Start free
License keys are verified offline; Spitfire never phones home.
Free edition
- Concurrent virtual users100
- Requests / second500
- Run length30 min
- Runners · locations per run2 · 1
- Active users3
- Per-second results kept30 days
Licensed edition
- Concurrent virtual usersunlimited
- Requests / secondunlimited
- Run lengthunlimited
- Runners · locations per rununlimited
- Active usersunlimited
- Per-second results keptunlimited
Frequently asked
Is my test data sent anywhere?
Do I need to write code?
Can I test live screens that use WebSocket or Server-Sent Events?
What if a runner or the controller drops during a run?
Can I run a fixed number of operations instead of a duration?
I have a Swagger document, a Postman collection or a browser recording. Do I write the test from scratch?
Our monitoring alarms during load tests. What can we do?
Can people sign in with their company account (Entra ID, Okta, Active Directory)?
Can a test run every night and tell us when something is wrong?
How do I send results outside the team?
How do I run tests from my CI/CD pipeline?
SPITFIRE_TOKEN secret, and run spitfire cloud run "Test name" in a step. The CLI comes from the controller or the Docker image; the CI button on a test's page prepares GitHub Actions and GitLab CI steps. The step exits 0 (passed) or 99 (thresholds failed).Where can I install it?
I lost the setup code shown after installation. What now?
SPITFIRE_SETUP_CODE in ~/spitfire/deploy/docker/.env on Docker, the spitfire-secrets Secret on Kubernetes. The controller log also prints setup_code=, and re-running the installer shows the same code.