Test against real APIs without the real accounts.
stunt spins up local simulators for the public APIs your code calls — stateful, deterministic, zero network. A stunt double for the rate-limited, account-gated, billable original. Open source. 91 adapters ship in the binary.
$ go install stuntapi.com/stunt/cmd/stunt@latestget started →or brew install --cask stuntapi/tap/stunt (macOS) · winget (Windows) · single static binary, all platforms
You just want to write a feature. The API has other plans.
Create a developer account. Verify your domain. Wait for sandbox approval. Add a credit card. Hit the rate limit at 2am. Discover the test mode doesn't fire webhooks. Your test now depends on a service you can't control, can't reset, and that bills you.
- ✗ account-gated sandboxes
- ✗ rate limits & quotas
- ✗ flaky CI hitting prod
- ✗ no clean state reset
- ✗ surprise bills
One manifest. One command. Local, stateful, real-shaped.
Describe your services
services:
stripe:
adapter: embedded:stripe-stylePoint a service at a bundled adapter — or write inline rules.Run it
$ stunt up stripe -> http://127.0.0.1:8000State persists across requests. Webhooks fire to a local sink.
Point your code at it
STRIPE_API_BASE_URL=\ http://127.0.0.1:8000Run your suite. It behaves against the real-shaped response — offline.
Built like a stunt department.
Stateful, not stubbed
Create a charge, list it, capture it, watch the webhook fire. SQLite-backed state survives across requests in one session.
Sandboxed adapters
Adapter logic runs in a Starlark VM — no filesystem, no network, noload(). Safe to install a stranger's mock.
All 4 transports
REST, gRPC (unary + streaming), WebSocket, and GraphQL — each adapter reproduces the real API's shape, not a toy.
Synthetic, enforced
stunt adapter lint rejects real-looking data (emails, tokens, card numbers). Everything is fake by construction.
Real TLS, locally
Optional subdomain mode serves https://api.localhost with a local CA + reverse proxy — no self-signed warning noise.
Operable by machines
--json on catalog/plan/doctor, plus anAGENTS.md + stunt llm reference, so coding agents drive it unaided.
The stand-in, not the stub.
| stunt | hand-rolled mocks | cloud sandboxes | |
|---|---|---|---|
| no remote account | ✓ | ✓ | ✗ |
| stateful + resettable | ✓ | sometimes | ✓ |
| offline / air-gapped CI | ✓ | ✓ | ✗ |
| sandboxed 3rd-party mocks | ✓ (Starlark) | ✗ | — |
| cost | $0 | time | $ + risk |
91 adapters, ready to run.
Run your suite against a stunt double.
No account. No network. No bill.
go install stuntapi.com/stunt/cmd/stunt@latest