v0.0.1
Ship only the build of your app that passed.
airlock starts local: run the gate with Bun in your own process, inspect the receipt, and keep a failed candidate from replacing the current build. When local is no longer enough, its Cloudflare backend is designed to be self-hosted in your account so bounded checks can run at the edge against a preview URL.
Written for a world where the push is as likely to come from an agent as from you: a green check is a claim, not a fact, so airlock never trusts it. It only trusts a signed proof, bound to the exact bytes it tested, checked on a URL nothing user-facing can reach.
This page is evidence for the Cloudflare path, not a claim that every local run gets edge
isolation: it was deployed to a no-traffic preview URL, tested by two real terrarium checks in separate processes, admitted by an ed25519-signed proof, and
promoted by hand. The default local backend remains in-process and unisolated.
a small adjustment for agent-written code
One candidate build, from source to live traffic.
Start with the local gate and its explicit limits. When a project needs edge-hosted, bounded checks, self-host the Cloudflare backend in the same account as the preview. In either mode, a green check is only a claim: verify a signed proof bound to exact bytes before anything reaches user traffic.
This exact page shipped through steps 1, 2, 4, and 5 for real: a Worker deploy, a real isolated terrarium fanout, a real signed proof, a human promotion — view the signed receipt. Step 3's Durable Object path is now real too — deployed, and its isolation empirically proven, not just described — but narrower than shown: Workers block eval, so a check is one of a small fixed set of kinds today, not arbitrary code. See Fanout backends and the isolation-proof experiment.
Each push, one candidate.
airlock admits a candidate only after its proof verifies. Scheduling a swarm of pushes is outside this demo.
-
Artifacts
Source lands in an Artifacts repo. airlock names that tree by digest.
-
Workers or Pages
The candidate deploys to a preview URL. Tests fetch it; live traffic does not.
-
Workflows / DO / Queues proven, narrower
Checks fan out against the preview URL and join into one result. A real Durable-Object-per-check backend ships and is isolation-proven; on this page, terrarium did the fanout instead — both for real.
-
Signed proof
The result is signed with the digest inside it, then checked against trusted keys.
-
Promotion gate
If the proof verifies, the caller flips the flag for this candidate. If not, users stay on the current build.
How to use it
Run it locally
Requires Bun. Three commands, no Cloudflare account and no keys. The last one runs the "napkin" — a rough sketch, not the finished build — which pushes two candidate builds: one whose tests pass and goes live, one with a failing test that gets blocked while the current build stays live. The docs cover the ports, proof verification, and the limits.