// the find
semaphore-protocol/semaphore
A zero-knowledge protocol for anonymous interactions.
Semaphore is a ZK protocol that lets users prove group membership and send anonymous signals (votes, endorsements) without revealing their identity. It's backed by Ethereum's Privacy and Scaling Explorations (PSE) team, which gives it more engineering rigor than most ZK experiments. Target audience is Ethereum dapp developers who need anonymous credentials or voting without a full identity system.
The circuit design is clean — one Circom circuit handles the core membership proof, and the JS packages wrap it into something you can actually integrate without understanding all the math. The monorepo is well-structured with separate packages for identity, group, proof, and contracts, so you can take only what you need. Four audit reports are in the repo going back to v2, which is more than most ZK projects bother with. The CLI scaffolding and Hardhat plugin meaningfully lower the integration friction compared to rolling your own ceremony tooling.
Proof generation is slow in-browser — the benchmark images in the docs show v4 is better than v3, but you're still looking at multi-second waits on mobile, and that's a real UX problem for anything consumer-facing. The protocol only handles group membership signals; if you need richer anonymous credentials (attribute proofs, range proofs), you'll hit a wall fast and need to look at something like Anon Aadhaar or build on top of Noir. The TheGraph subgraph dependency for fetching group state means you're adding another infra piece and trusting an indexer, which isn't great for security-sensitive applications. Last push was January 2026, and activity has slowed noticeably from its peak — still maintained, but don't expect fast issue resolution.