Frame Verifier

Recompute a Frame settlement proof yourself. Drop a verify-pack below and it is checked entirely in this browser tab. No login, no upload, no Frame service in the loop — the evidence never leaves your machine. This is the same verification the frame-verify CLI performs, compiled to WebAssembly.

1 · Load a verify-pack

Drop a verify-pack here or click to choose a file
A .cbor / verify-pack produced by Frame (§3.10). Read locally, never sent anywhere.
Leave blank to fall back to the root embedded in the pack (a warning is shown). Pinning is the trust-on-first-use step: get K_root from Frame once, out of band, then it is yours.
For packs carrying a SecLog witness proof: a passing check proves the appliance — a signer separate from Frame — signed a log head committing the settlement's exact event, offline. Blank falls back to the key embedded in the pack, which only proves producer consistency. The witness root's on-chain presence is confirmed by Frame's chain watcher, not by this page.
Enclave-attestation pins (required for a nitro / confidential-space pack)
Supply values you obtained out-of-band — the PCR0 you reproduced from source and the AWS Nitro root you got from AWS — not anything this appliance serves you: a measurement the producer self-reports would let a doctored enclave grade itself green (INV6). Software packs ignore these; a nitro pack fails closed until both are pasted.
Loading verifier…

Run it in your own infrastructure

A browser tab is the convenient surface. The artifact you audit for real is the frame-verify CLI and its source — a self-contained Go binary with no network, no Frame dependency, and no policy. Build it from source, pin K_root out of band, and run it offline against any pack, forever:

go install go.frame.xyz/frame/cmd/frame-verify@latest
frame-verify verify --trust-root <K_root-hex> your-pack.cbor
# exit 0 = every check passed · 1 = a check failed · 2 = usage/IO

Same verify-pack, same deterministic CBOR wire form, byte-for-byte the same verdict as this page. An independent re-implementation in another language reproduces every byte, so you are never asked to trust our verifier either.