Why trust Mene?
You shouldn't have to. Each answer below is enforced by the data store, not promised by us, and each comes with a way to check it yourself.
Who confirms a warning?
Independent witnesses. One witness publishes an advisory; it only starts failing builds when 2 of the 3 witnesses have confirmed it. Each confirmation is counted by the wallet that signed it, which nobody can fake.
Verify it yourself
Every read Mene makes is pinned to the witnesses' wallets with .createdBy(witness). An Arkiv entity's creator ($creator) is set by the chain and can never change, so a record with Mene's labels written by anyone else is simply never read. The quorum replays verdicts in block order: an advisory becomes active when k witnesses confirm at the same time, and only a withdrawal quorum undoes it. Each advisory page lists every verdict, with its block and explorer link, under "Verify this advisory".
What if a witness is hacked?
One stolen key can't fake a warning and can't hide one. Faking needs a second witness to agree; hiding needs a second witness to withdraw. If a witness deletes a confirmation, everyone who saw it keeps counting it and an alarm appears on the advisory.
| Attacker | Tries to | What happens |
|---|---|---|
| Anyone | Publish a fake advisory that looks like Mene's | It never appears: reads only accept records signed by the witnesses. |
| One stolen witness key | Force a false warning | It stays “awaiting confirmation 1/2”. It needs a second witness. |
| One stolen witness key | Withdraw a real warning | One withdrawal isn't a quorum. The warning stays confirmed. |
| A witness | Delete their own confirmation | Every client that saw it keeps counting it, and a deletion alarm is raised. |
| Mene's authors | Take the site down | There's no server. The CLI and any copy of this site read the data directly. |
Verify it yourself
The site and the CLI keep an anti-burial memory: every advisory and confirmation they have seen is saved locally. If one later disappears from Arkiv, it is still counted and shown as removed. The Advisories page streams deletions live over a WebSocket (watchEntityEvents) and raises an alarm on each one.
Can anyone delete a warning?
No. Advisories are written so that their content can never change, and in the same step their ownership is handed to a burn address that no one controls. From that moment, not even the witness who wrote it can delete it.
Verify it yourself
Each advisory is an Arkiv entity created with the readonly flag (content and attributes frozen for life) and transferred to 0x000000000000000000000000000000000000dEaD in the same atomic batch (executeBatch, with the key predicted by predictEntityKeys). Its "On Arkiv" panel shows Content frozen and Sealed, and the owner field links to the burn address on the explorer.
Entities also have an Entity Expiration. Advisories are created with permissionlessExtension, so any wallet can pay for a Lifetime Extension (mene keepalive, or "Keep alive" on an advisory) without being able to change anything else.
What do you see about me?
Nothing. The site downloads the full list of advisories and matches your lockfile in your browser; the CLI and the Action do the same on your machine or runner. Your package list never leaves it, and searches never put a package name in a network request. There are no accounts, cookies or analytics.
Verify it yourself
Open your browser's network panel and run a check: the only requests go to the Arkiv RPC (the same advisory query for everyone) and, if you pasted a GitHub URL, to raw.githubusercontent.com. Severity and date filters run as numeric range queries that contain no package names.
Where is the data?
On Arkiv, a public Web3 database (Tiramisu testnet). Anyone can read it without this website, so the warnings outlive Mene itself.
Read it from any RPC
# every advisory published by Witness A (swap in any witness address)
curl -s https://rpc.tiramisu.db-chain.testnet.arkiv.network -H 'content-type: application/json' -d '{
"jsonrpc":"2.0","id":1,"method":"arkiv_query",
"params":["project = str('"'"'mene-v1'"'"') AND type = str('"'"'advisory'"'"') AND $creator = addr(0x9bEBE1512c9f4E9F04B7DC45824b116985013238)",
{"select":{"key":true,"creator":true,"attributes":true,"payload":true},"limit":"0xc8"}]}'The full data contract (attributes, queries and why each Arkiv feature is used) is in arkiv/schema.md. Explorer: tiramisu.explorer.arkiv.network.
Limitations
- The three witnesses today are testnet wallets run by the Mene team. In production they would be independent security organisations, and you can choose your own in
mene.config.jsonor the Action inputs. - Arkiv's Tiramisu network is a testnet. Data there can be reset by its operators.
- Deleting or expiring an entity doesn't erase it from chain history, and advisories are public: they must never contain personal data. Mirrored OpenSSF records have their contact details removed.
- Mene only knows about versions its witnesses have confirmed. A clean result means “no known compromised versions”, not “safe”.
Why “Mene”?
In the book of Daniel, a hand writes four words on a palace wall: Mene, Mene, Tekel, Upharsin. Numbered, weighed, divided. Nobody at the feast can wipe them away. A supply-chain warning should work the same way.