Prove what a vehicle is. Reveal only what the asker is entitled to see.
From 29 November 2026, Euro 7 obliges manufacturers to issue a tamper resistant digital passport with every new M1 and N1 type, readable by QR code. VINPassport is that record, built on Midnight's zero-knowledge blockchain: anchored once, then shown to each party, whether buyer, recycler or border authority, exactly as far as they are entitled and provably no further.
No wallet. No account. No login. A buyer scans a QR code and sees a verdict; VINPassport pays every transaction fee.
Each is answered yes, or the transaction fails. The value that satisfied the bound is never published, and “not proven” is rendered as exactly that: no claim, never a quiet no.
Pre-alpha, under active development. The contract is written, compiles and is covered by tests; the application layer around it is being built.
A commitment per field
The ledger stores persistentCommit(value, salt), never the value and never the salt. Each field also carries an integrity rule, written once at creation, so a caller cannot pick the flattering rule at the moment they need it.
Rules that only point one way
Mileage, accidents, keepers, services and write-off category may never fall. To write a new value the caller must prove, inside the circuit, that they know the current one and that the change respects the rule. A rollback by one kilometre is refused.
Claims that expire honestly
A recorded claim names the commitment its proof opened. Record a new reading and the old claim no longer matches the field, so a verifier can see it is superseded without being told.
Intake
For a registrarFill in the fields, submit, and watch the compiled circuits accept and refuse. A rollback update aborts in-circuit, is shown as refused, and writes nothing.
Open the console →Proof explorer
For an auditorEvery claim on the ledger, grouped by vehicle and marked current or superseded. Nothing here requires trusting VINPassport. Every row is a claim anyone can check.
Open the explorer →Verification
For a buyerScan the QR code on a vehicle or its listing and this page opens on its passport. The page never sees a VIN, only its hash.
See a verdict →New to this? The guide walks both journeys step by step: creating a record, and checking one, with the real screens and the reason behind each step.
A mandate with a conflict inside it
A vehicle passport has to be verifiable by strangers and confidential at the same time. A full history is commercially sensitive to a dealer and personally identifying to an owner. Publishing the record solves the first and destroys the second. Keeping it private leaves the first where it is today: trust the seller.
A producer who commits a false value produces a cryptographically valid proof of a false fact.
It is the first question a serious buyer asks, so the answer belongs beside the admission. VINPassport proves a reading is the one that was committed and that it satisfies a bound. It does not prove the reading matched the world. Three things in the deployed contract narrow that to the first write, and none of them are roadmap.
What stays open is the first write for a vehicle that joins mid-life, and that is why the first customer is the manufacturer: Euro 7 obliges them from 29 November 2026, and a passport opened on the production line has no earlier history to misstate. A reading signed at the sensor is Phase 2, scoped in docs/ARCHITECTURE.md rather than pretended away.
The zero-knowledge chain the passport lives on, at ledger 8. The contract, its eleven circuits and three integrity rules are ours, written in Compact and covered by our own tests.
Nothing about the passport logic is delegated. Every transaction is assembled, proven and signed locally before it leaves the machine, so the submission service pays a fee it cannot read and never sees a witness.
Run the whole thing locally in one command
Node 22+. No Docker, no wallet, no network access, no API keys. Three surfaces and the real compiled circuits, in-process.