{
  "slug": "picus",
  "name": "Picus",
  "tagline": "Automatic SMT-based underconstraint detection for Circom, R1CS, gnark and LLZK",
  "maintainer": "Veridise",
  "url": "https://github.com/Veridise/Picus",
  "repo": "https://github.com/Veridise/Picus",
  "category": "zk-circuits",
  "targets": [
    "Circom",
    "R1CS",
    "gnark",
    "Halo2 (via LLZK)",
    "Plonky3 (via LLZK)"
  ],
  "approach": "SMT (cvc5, Z3 with finite-field theory) uniqueness checking; fully automatic, no proofs to write",
  "license": "Open source (MIT); newer versions ship in Veridise AuditHub",
  "status": "Maintained; the Circom version is documented as legacy, LLZK-based Picus is current",
  "since": "2022",
  "summary": "Picus checks whether every output signal of a circuit is uniquely determined by its inputs, which is the automatic, specification-free way to detect underconstrained circuits. It runs on Circom, R1CS and gnark directly and on Halo2 and Plonky3 through LLZK, and Veridise has used it with LLZK to verify SP1 core operations and RISC Zero circuits.",
  "details": [
    "The uniqueness property (sometimes called determinism or weak safety) is weaker than soundness: a circuit can be deterministic and still compute the wrong function. But it needs no specification, catches the dominant bug class, and finishes in minutes on many real circuits, which makes it the standard first pass in ZK audits.",
    "Picus can return 'unknown' when the solver times out, and proving uniqueness of non-deterministic-by-design gadgets requires annotation. Veridise's LLZK IR extended it beyond Circom in 2026."
  ],
  "strengths": [
    "No specification, no proof engineering, fast on small and medium circuits.",
    "Broad frontend coverage through LLZK.",
    "Widely used and cited; the reference tool for its property."
  ],
  "limits": [
    "Proves uniqueness, not functional correctness.",
    "Timeouts and 'unknown' results on large circuits.",
    "Cutting-edge features are in the commercial AuditHub version."
  ],
  "fit": [
    "Run Picus on every Circom, gnark, Halo2 or Plonky3 circuit before an audit, and treat a clean result as necessary, not sufficient."
  ],
  "references": [
    [
      "Picus repository",
      "https://github.com/Veridise/Picus"
    ],
    [
      "LLZK v1.0 announcement (2026-04-08)",
      "https://veridise.com/blog/veridise-announcements/llzk-v1-0-a-new-phase-for-zk-shared-infrastructure/"
    ]
  ],
  "category_name": "ZK circuit verification",
  "page": "https://sorryfree.com/frameworks/picus/",
  "updated": "2026-09-13"
}