Bad live candidate refused
A candidate that builds but fails a real request cannot promote.
bun run examples/refuse-bad-self-update/run.ts promotion denied; known-good restoredFor software that updates itself
When your software ships a new version of itself, keel runs that version first and only switches to it if it actually works. If it does not, the old version keeps running. Every decision is signed and written to a log you can check later.
When to use it
It fits software that updates or redeploys itself, where a bad version reaching users is expensive to undo.
Quick start
The quick path exercises the real library and the deletion example. It does not call a network service or ask for a secret.
bun install install the library and site workspacebun test run deterministic library and content checksbun run examples/delete-the-handrolled-gate/run.ts replay the deletion receiptExamples
Each example states a falsifiable claim, runs a harness, and leaves a receipt with a two-sided review. Projection stays separate from observed results.
A candidate that builds but fails a real request cannot promote.
bun run examples/refuse-bad-self-update/run.ts promotion denied; known-good restoredA valid write token cannot promote a different artifact without a fresh proof.
bun run examples/stolen-token-useless/run.ts ref unchanged after replay and forgery attemptsA 2-of-3 threshold blocks a single compromised verifier key.
bun run examples/one-key-cant-ship/run.ts single signer refused; edited log detectedTrust state and signed decisions survive reload and detect tamper.
bun run examples/audit-survives-restart/run.ts 7 checks pass after reload and tamper injectionA toy worker deletes local deploy-gate logic by importing keel.
bun run examples/delete-the-handrolled-gate/run.ts 41 owner lines shrink to 25 while attacks flip to refusedHow it works
The load-bearing primitive is content addressing. A proof, a promotion, and a rollback all name the same bytes.
A candidate is named by content digest.
A verifier builds, smokes, and records evidence for that exact digest.
The proof is signed by an active trusted key, or by enough keys for a threshold.
Promotion uses a scoped token and compare-and-swap against the known baseline.
Every decision appends to a hash-chained receipt.
Status
Limits
keel does not deploy, run servers, or hold your keys. You wire it into the deploy you already have and supply the deploy, verify, rollback, and storage steps.