Practical overview
When it fits
Use Picus during zero-knowledge circuit security review when an R1CS representation is available and the team needs an automated uniqueness check or a concrete witness counterexample.
Who it is for
- Zero-knowledge circuit developers
- Security reviewers analyzing R1CS constraints
- Teams building Circom or circomlib-based circuit workflows
- Rust developers integrating circuit checks into tooling
Documented uses
- Detect under-constrained signals in a zero-knowledge circuit
- Verify witness uniqueness against public inputs
- Generate concrete counterexamples for ambiguous R1CS assignments
- Inspect R1CS metadata and expose results in machine-readable form
- Embed circuit checking in a Rust application
Requirements & limits
The repository is public and released under the MIT license. Installation and local builds are documented through Cargo, with Docker also provided as a build and run path. The default native solver does not require an external solver.
- Input format: the documented check operates on R1CS circuit files.
- Default dependency profile: the native finite-field solver is built without an external solver.
- Output integration: JSON output and a Rust API support automation.
- Backend trade-offs: cvc5 and z3 require explicit feature opt-in and additional build requirements; cvc5 also carries GPLv3 licensing.
- Result interpretation: the API distinguishes Safe, Unsafe with witness pairs, and Unknown.
Check current requirements in the official documentation. Source-based guidance does not mean OpenViST has run or independently tested this project.
Check an R1CS circuit with Picus
Verify whether circuit outputs are uniquely determined by public inputs and obtain a counterexample when they are not.
Before you start
- A Rust toolchain for the documented Cargo installation or build path, or Docker for the documented container path.
- An R1CS circuit file such as circuit.r1cs.
Steps
Install Picus with the command below, or build it with the command below.
cargo install --path crates/picus-clicargo build --releaseRun
picus check --r1cs circuit.r1csusing the default native finite-field solver.For container-based use, build the image with the command below and run the documented Docker command with the circuit mounted at
/data.docker build -t picus .Use
--format jsonwhen machine-readable output is required, or inspect metadata withpicus info --r1cs circuit.r1cs --constraints.
Expected outcome
Picus returns a uniqueness result; an unsafe result includes two distinct witness assignments, while the library API exposes Safe, Unsafe and Unknown result variants.
Guide limitations
- This procedure checks an R1CS constraint system; it does not document circuit compilation from source languages.
- The cvc5 and z3 backends are separate opt-in builds with additional requirements. The cvc5 option carries GPLv3 licensing.
- A result may be Unknown, as represented by the library API.
Compare options for Zero-knowledge verification
These projects document a common task and share a project role. This is a source-based comparison, not an execution benchmark or a guarantee of interchangeability.
| Project | Documented purpose | Platform | Access and requirements |
|---|---|---|---|
| Picus | Detect under-constrained signals in a zero-knowledge circuit | CLI | The repository is public and released under the MIT license. Installation and local builds are documented through Cargo, with Docker also provided as a build and run path. The default native solver does not require an external solver. |
| ProvenZK | Represent circuit gates and vectors in Lean | CLI, Linux, macOS, Windows | The repository is publicly accessible, open source and licensed under Apache-2.0. It is presented as a Lean 4 library for projects using the lake tool. |
Sources & review
Source record details
- Source availability
- Active
- Sources checked
- 3 October 2026
- Original website title
- chyanju/picus · Official homepage title · retained in its source language

