// the find
noir-lang/noir
Noir is a domain specific language for zero knowledge proofs
Noir is a Rust-written compiler and language for writing zero-knowledge proof circuits. It compiles to ACIR (Abstract Circuit Intermediate Representation), a backend-agnostic format that any SNARK proving system can consume. The target audience is developers building privacy-preserving applications on blockchains — primarily in the Aztec ecosystem, but the ACIR abstraction means it isn't locked to one prover.
The ACIR abstraction is genuinely good engineering: you write Noir once and can swap proving backends without rewriting circuits. The Brillig VM adds unconstrained execution, which sidesteps the constraint explosion that makes naive ZK code impractical for real programs. The CI setup is serious — nightly fuzz tests, cross-compilation, ARM64 testing, and a tracked list of critical third-party libraries with their failure states. The standard library already covers the primitives you actually need: Poseidon, SHA256, ECDSA, AES128, EdDSA, big-integer arithmetic.
The README itself says 'not suitable for production' and 'expect bugs' — that's not boilerplate humility, it's accurate. The critical_libraries_status directory has multiple .does_not_compile failures right in the repo, including noir_rsa, zkemail, and webauthn — things you'd reach for immediately in a real app. The language is tightly coupled to the Aztec ecosystem; most examples, forum activity, and real usage live there, so if you're not building for Aztec you're somewhat off the beaten path. The JavaScript packaging adds real complexity (wasm, separate acvm_js, yarn workspaces) that makes contribution and local builds heavier than they need to be for a compiler project.