The log is an append-only tree. Each committed record is a leaf, and the signed head of the tree is anchored to Bitcoin.
A checkpoint names the log, its size, and the root of the tree at that size, and is signed by the log's key. This is the exact object a witness cosigns and the exact bytes anchored to Bitcoin.
Unrelated operators. The signed trust root names seven of them and the quorum is four of those seven; the eighth cosigns and is not counted until a v3 manifest names it. Cosignatures attest single history, not content truth. Machine-readable policy: /policy (c2sp.org/tlog-policy).
The checkpoint bytes above are timestamped into Bitcoin every hour. A fresh stamp stays pending until a block confirms it.
# every row, keyed on (issuer, subject), derived by a published function python3 reduce.py --export ./log-terminal-export # one row, with everything needed to check it elsewhere python3 reduce.py --export ./log-terminal-export --receipt ISSUER SUBJECT python3 verify_receipt.py receipt.json --trust-root trust-root.json
A log is a sequence, not a database. The function that turns one into the other is written down and its hash is a leaf in this log, so the interpretation is as checkable as the data. A receipt carries the row, its leaf, an inclusion proof and the cosigned checkpoint — four links a stranger checks without us. Tools: tlog-search.
# the same commit, twice, as github.com reported it leaf 7942 git:github.com/MarkovianProtocol/tlog-search@2af8946c unknown_key leaf 7944 git:github.com/MarkovianProtocol/tlog-search@2af8946c valid
The commit did not change — same tree, same parents, same dates. A signing key was registered in between, and GitHub's verdict about an immutable object moved with it. Ask today and you get the second answer, with nothing showing there was a first. Both readings are in this log, cosigned and anchored, because they were written down at the time.
h=$(sha256sum yourfile | cut -c1-64) curl -X POST -d "sha256:$h" https://log.markovianprotocol.com/submit
Hash-only — the log stores 32 bytes, you keep the file. Returns a JSON receipt with proof URLs. Witnessed within the hour, Bitcoin-anchored after. 10/hour per address.
# offline proof bundle (c2sp.org/tlog-proof) for any leaf curl -O https://log.markovianprotocol.com/proof/7271 # run the same monitor that watches this log hourly git clone https://github.com/MarkovianProtocol/log-monitor cd log-monitor && cp config.example.json config.json python3 monitor.py --once # search the export, or reduce it to a table (stdlib only, offline) git clone https://github.com/MarkovianProtocol/tlog-search python3 tlogsearch.py --export ./log-terminal-export --field kind=anchor python3 reduce.py --export ./log-terminal-export
Full surface: /checkpoint · /proof/<i> · /policy · /inclusion · /consistency · /leaves · /tile/… · /receipt/scitt/<i> · /badge.svg · POST /submit · /anchor — index at log.markovianprotocol.com. Run this exact stack yourself: log-server. Offline export: log-terminal-export. Query with completeness proofs: Ask the log. Search and reduce it offline: tlog-search — a miss is a claim, not an empty result.