Code and permanence
A registry that outlives whoever runs it.
The specification, the code and the public data are open, and every day is anchored in Bitcoin. If the operator disappeared tomorrow, anyone could check what is there and keep serving it.
Public repository in preparation
The code will be published in a public repository under the licences below. Until then, the verifier and the reference code can already be downloaded here.
What is open
Every piece, with its licence.
| Piece | Licence | What it allows |
|---|---|---|
| Specification | CC BY 4.0 | Copy, adapt and implement, with attribution. |
| PID reference implementation (parcid.py, parcid.js) | CC0 1.0 | Public domain: use it without conditions. |
| Independent verifier (parcid-verify.js, cli.mjs) | CC0 1.0 | Check records, proofs and exports without asking the registry. |
| Resolver, API and operations tool | Apache-2.0 | Run a mirror or a compatible registry, with a patent licence. |
| Public data and daily export | CC0 1.0 | Reuse the public part of the registry without conditions. |
| Operator comparison models | Not open | The physical signature format is public; the engine that compares belongs to each operator. |
Transparency
A ledger that can only grow.
Append-only ledger
Every sealed record enters a ledger with a sequence number. Nothing is deleted or corrected: an amendment is another record.
Daily Merkle tree
Each UTC day closes into an RFC 6962 Merkle tree. Every record has its inclusion proof at /api/v1/parcels/{PID}/proof.
Chained statement
The day’s root goes into an Ed25519-signed statement that includes the fingerprint of the previous day’s.
Bitcoin anchor
The statement is anchored with OpenTimestamps. No tokens, no NFTs and no wallets: just a fingerprint inside a block.
Mirrors
How to run a mirror.
A mirror needs neither permission nor the list of PIDs: the export identifies each unit by its own salted fingerprint, so a mirror resolves a PID it is asked about by recomputing that fingerprint with each unit’s salt, without ever being able to extract the list.
Download the daily export
GET /api/v1/export returns the index; each .jsonl.gz file carries the units, the ledger records, the anchors and a signed manifest. CC0.
Verify it before serving it
node cli.mjs export parcid-export-YYYYMMDD.jsonl.gz recomputes roots, signatures and the chain of days. If anything is off, do not serve it.
Deploy the resolver
Once the repository is public: PHP 8.4 and MySQL 8, with the same read API. Publish your own /.well-known/parcid saying which registry you mirror.
Follow it every day
Import the new export, check that its first statement chains to the last one you had and watch that the daily anchor keeps coming.
Verify without us
Not even this site is needed.
The verifier is a single JavaScript file with no dependencies that works the same in the browser and on Node 20 or later. Download it with cli.mjs and run it wherever you like.
It exits with 0 if everything verifies and 1 if something is off: handy for scheduled jobs.
node cli.mjs proof PID-1-7QC3-Z79D-G6RZ-8EInclusion proof of every record of a unit, signature and the day’s anchor.
node cli.mjs record record.jsonA record kept by its owner: fingerprint and registry signature.
node cli.mjs export parcid-export-YYYYMMDD.jsonl.gzA full export: content, manifest, roots, chain and signatures.
node cli.mjs ots file.ots --bitcoinA standalone OpenTimestamps proof, checked against a Bitcoin explorer.
Permanence
Commitments so that it lasts. Commitments · not yet published
This is what the operator commits to do. As each piece is published, its link or identifier will appear here.
Export on Arweave
Every daily export will be copied to Arweave, storage paid once and designed not to be deleted.
Code in Software Heritage
The public repository will be archived in Software Heritage, the universal archive of source code.
Specification on Zenodo
Every version of the specification will be deposited on Zenodo with a DOI, so it can always be cited and found.
Custody at cost
Evidence an owner wants to keep will have perpetual custody at cost price.
90-day continuity switch
If the operator stops publishing the daily anchor for 90 days in a row, the handover commitment triggers by itself: any mirror holding the verified chain may carry on the registry, with the same specification and the same PIDs.