Get started
From zero to a running local API simulator in under a minute.
Install stunt
$ go install stuntapi.com/stunt/cmd/stunt@latest$ brew install --cask stuntapi/tap/stunt$ irm https://raw.githubusercontent.com/stuntapi/winget/main/install.ps1 | iexthen verify: stunt --version
Try the demo (no config)
$ stunt demoBoots the bundled stripe-style simulator, prints copy-pasteable curl commands, and shows stateful behavior + webhooks firing.
Describe your own services
$ stunt init # writes a sample stunt.yaml$ stunt plan # validate + preview$ stunt up # serve on 127.0.0.1:8000Add an adapter — every one of the 99 reference adapters ships in the binary:
services:
stripe:
adapter: embedded:stripe-style # bundled, no clone
myapi:
adapter: ./adapters/myapi-style # or a local dirPoint your code at it
$ STRIPE_API_BASE_URL=http://127.0.0.1:8000 ./run-your-testsState persists across requests; stunt clean resets it.
Flip the weather — profiles
$ stunt profile activate launch-day # or: throttled, degraded…$ stunt profile list # everything activatable$ stunt profile deactivate # back to healthyNamed behavior modes, declared in YAML, switched at runtime — deterministic degraded states for retry/backoff testing. Activation is runtime-only; a restart resets it (stunt up --profile x boots with one).
services:
stripe:
adapter: embedded:stripe-style
profiles:
degraded:
rules:
- match: { path: /v1/** }
when: { chance: 30 }
respond: { status: 429 }
profiles: # one activation assigns across services
launch-day:
set: { stripe: degraded, sqs: throttled }Full reference
The complete manifest schema, CLI command reference, and the Starlark handler API live in AGENTS.md in the repo — and in-binary via stunt llm (feed it to a coding agent as cold-start context).
Every running server also serves a localhost dashboard —stunt ui opens it. Live request inspector, state browser, snapshot/restore, and an instance manager; every command has --json for agents.