Skip to main content
You have a pack and you want to check it yourself. You need Node and nothing else. You do not need a Sanning account, an API key, or any cooperation from the party who gave you the pack.

The two steps

A pack is a zip. The kernel reads the bundle inside it, so extract first.
A verified pack prints its per-record results and exits 0:

Exit codes

Two errors you might hit first

Both exit 2, before any check runs. You pointed it at the zip. The kernel reads JSON, not an archive:
Extract the zip and point at bundle.json inside it. You pointed it at the directory.
Name the file, not the folder that holds it.

Check the tamper-evidence yourself

Do not take the verdict on trust. Break the pack and watch it fail.
It exits 1 and names the record you touched. Replace SOME_EVENT_ID with any filename from logs/.
Confirm the file actually changed, with sha256sum before and after. An edit that writes the same byte back produces an identical file, which verifies clean and looks exactly like a passing tamper test.

Confirm the witness on the public record

The verdict above is offline. It names a witness without contacting it. To check that the witness holds those bytes, pass a gateway:
That turns a claim you read into one you checked. See What a verdict means for why the two are different.

Python

sanning-proof on PyPI is the same kernel and ships no command line. Use it as a library:
Two kernels, one corpus. They agree record by record, and disagreeing is a bug we treat as release-blocking.