A proving backend is the component that turns an ACIR circuit into a cryptographic proof. Noir itself is backend-agnostic: it compiles your program to ACIR and stops there. A backend takes that ACIR, generates the witness assignments, and produces (or verifies) a zero-knowledge proof.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/noir-lang/noir/llms.txt
Use this file to discover all available pages before exploring further.
Noir does not generate proofs on its own. You always need a proving backend to complete the workflow.
How the workflow fits together
Write your Noir program
Author your circuit logic in Noir. Inputs are private by default; mark public inputs with
pub.main.nr
Compile to ACIR
nargo execute compiles your Noir source to ACIR and generates a witness from your inputs. The compiled artifact is written to ./target/<name>.json and the witness to ./target/witness-name.gz.Feed ACIR to the backend
The proving backend reads the compiled ACIR artifact and the witness, then generates a cryptographic proof. The exact command depends on the backend you choose.
Barretenberg (bb)
Barretenberg is the primary proving backend for Noir. It is developed by Aztec and supports:- Generating and verifying proofs
- Recursive proof aggregation
- Generating Solidity verifier contracts for on-chain verification
- Inspecting circuit gate counts
Installation
Installbb using the bbup script:
bb is available on your PATH. See Barretenberg’s Getting Started guide for the current version and full setup instructions.
Key commands
Inspect circuit size
Inspect circuit size
Use You can also check ACIR opcode counts with
bb gates to understand how many gates your circuit uses before generating a proof.nargo info before involving the backend:Generate a proof
Generate a proof
After running
nargo execute to produce the witness:Verify a proof
Verify a proof
vk) is derived from the circuit. Generate it with bb write_vk.Generate a Solidity verifier
Generate a Solidity verifier
Other compatible backends
Noir’s ACIR output is backend-agnostic. Any backend that implements the ACVM interface can consume it. The Awesome Noir repository maintains a current list of compatible backends.Barretenberg
The default backend. PLONKish (UltraPlonk), developed by Aztec. Supports recursive aggregation and Solidity verifier generation.
Awesome Noir backends
Community-maintained list of other backends compatible with Noir’s ACIR output.
The role of ACIR
Noir compiles to ACIR (Abstract Circuit Intermediate Representation) rather than directly to a backend-specific format. This design means:- You can swap backends without changing your Noir code.
- Backend authors only need to implement the ACVM interface, not a full compiler.
- Noir’s optimizer can improve the ACIR it emits independently of any particular proving system.
Common operations reference
| Operation | Nargo command | bb command |
|---|---|---|
| Compile + execute | nargo execute | — |
| Check circuit size | nargo info | bb gates -b <artifact> |
| Generate proof | — | bb prove -b <artifact> -w <witness> |
| Write verification key | — | bb write_vk -b <artifact> |
| Verify proof | — | bb verify -k <vk> -p <proof> |
| Generate Solidity verifier | — | bb write_solidity_verifier -k <vk> |