A real inbox for every run
Each run gets an address under inbox.rig.ironfang.com that accepts mail from anywhere. The message is parsed, its subject, links and one-time codes lifted for matching, and the raw bytes kept as evidence.
Ironfang Rig
Integration test environments
Give the application under test a disposable outside world: a fresh inbox, a public callback URL, a mock endpoint and a route to your machine, allocated for one run, with a record of everything that reached them.
No card required. One suite file beside your code, one run per test, and addresses that stop the moment the run ends.
Allocated for this run
run-k7c3...@inbox.rig.ironfang.com
hooks.rig.ironfang.com/h/...
21 events
in sequence, nothing missing
Forwarded to your machine through an outbound connector. No inbound port.
Everything a run receives
A suite names the identities an application needs from the outside world. Each run gets fresh ones, unguessable and unique to it, and they stop the moment the run ends.
Each run gets an address under inbox.rig.ironfang.com that accepts mail from anywhere. The message is parsed, its subject, links and one-time codes lifted for matching, and the raw bytes kept as evidence.
Register an unguessable URL with the payment provider, the carrier or your own queue. Every request is recorded with its method, path, body and a hash, and the sender gets a 200 at once.
Bind a callback to a route label and run ironfang rig connect beside the application. Requests reach a local port over an outbound socket, and the local response is recorded. No inbound port, no tunnel to configure.
Ordered rules match method, path, headers and JSON fields, and answer with a status, body and delay you chose. The same request gets the same answer every time.
Delay, duplicate or drop a forwarded callback, or make a mock answer a chosen status. Replay a recorded callback to prove idempotence. Every firing is an event beside the one it acted on.
Every observation is an event with a contiguous sequence number. Wait on the next one, judge expectations at the end, and export the whole run as a ZIP with a manifest of hashes.
Suites persist. Runs are disposable. Resources have explicit lifetimes.
Every resource, event and bound is in the documentation.
Suite as code
The suite file names the identities the application needs and what a run must observe. The CLI syncs it, starts a run, hands the addresses to your test process as environment variables, and finishes the run with a verdict when the process exits.
ironfang.rig.yaml and run ironfang rig run -- npm test.version: 1
project: acme-shop
suite: checkout
resources:
customer_email:
type: email
stripe_callback:
type: callback
connector:
route: stripe
expectations:
- id: order_email
resource: customer_email
event: email.received
match: { subject_contains: "Your order" }
- id: stripe_forwarded
resource: stripe_callback
event: connector.request.completed
match: { outcome: delivered, status: 200 }Three ways in
The same runs, timeline and verdicts whichever way the run is started.
ironfang rig syncs, runs, waits, replays and exports evidence. A single static binary for Linux, macOS and Windows, with a checksums file per release.
ironfang-ltd/rig-action/start@v1 exports every address to the job; finish@v1 prints the verdicts and fails the step when the run fails.
19 tools on the Ironfang MCP server, so a coding agent can start a run, prepare the local connector, wait on the timeline and arm a fault without leaving the editor.
Pricing
Every account has these free allowances each month. With Pay as you go switched on, usage past them is charged at the rates below, within the monthly limit you set. Prices exclude VAT.
Each inbound email, callback or mock exchange recorded as an event.
5,000 interactions free each month
| Paid units after the free allowance | Rate per 1,000 |
|---|---|
| First 100,000 | £0.50 |
| Next 900,000 | £0.35 |
| Above 1,000,000 | £0.25 |
One interaction is one accepted inbound email, inbound callback or mock exchange, request and response together. Creating projects, suites, runs and resources, faults, replays, waits and reads are never counted, and a sender's retry that carries the same Message-ID or Idempotency-Key counts once.
When the free allowance is used up without Pay as you go, or a usage limit is reached, an interaction is refused rather than charged: the sender gets the billing code, and the run's timeline records what arrived and why.
Runs live up to 24 hours; 32 resources and 64 expectations per suite; 500 messages, 1,000 callbacks and 5,000 mock calls per run.
The same on every account. Paying more never lifts them.
Questions
Less to operate. More to ship.
Commit a suite file, start a run, and watch real email and real callbacks arrive on a timeline you can keep.
No card required. Ironfang Rig records what reached the addresses it allocated; it does not run your tests or inspect your application.