circom

SKILL.md

Skill is based on circom 2.x, generated at 2026-02-24.

circom is a domain-specific language and compiler for defining arithmetic circuits used in zero-knowledge proving systems (e.g. with snarkjs). Circuits are built from parameterized templates and components; the compiler outputs R1CS (and optionally WASM/C++ witness generators). This skill focuses on language semantics, constraint generation, and practical usage for agents.

Core References

Topic Description Reference
Signals Input/output/intermediate, assignment operators, public/private, immutability core-signals
Templates and components Definition, instantiation, dot notation, arrays, parallel and custom templates core-templates-components
Constraint generation Quadratic constraints, ===, <== vs <-- + === core-constraints
Main component Entry point, public input list, single main core-main-component
Pragma and include Version, custom_templates, include, -l core-pragma-include

Features

Topic Description Reference
Operators Field, boolean, relational, bitwise; precedence; conditional ? : features-operators
Control flow if/for/while, known vs unknown conditions, instantiation order features-control-flow
Functions Pure computations, no signals/constraints, return on every path features-functions
Variables and data types var, arrays (known size), field and signal arrays features-variables-data-types
Anonymous components and tuples Inline instantiation, multiple outputs, _, array <== features-anonymous-tuples
Tags Signal tags (e.g. binary, maxbit), inheritance, valued tags features-tags
Buses Struct-like signal groups, tagging, nested/parameterized, input format features-buses
Compilation CLI flags (r1cs, wasm, c, sym, O0/O1/O2, prime, -l, inspect) features-compilation
Scoping Signals/components at top-level or known-condition if; var block scope features-scoping

Best Practices

Topic Description Reference
Signal safety Prefer <==/==>; use <-- only when needed and add ===; use --inspect best-practices-signal-safety
Assert and log Compile-time vs witness-time assert; log() for debugging best-practices-assert-log
Known vs unknown Signals unknown; constraints and indices under known control flow best-practices-unknowns
Simplification When to use O0/O1/O2; PLONK vs Groth16; large circuits best-practices-simplification
Weekly Installs
2
GitHub Stars
3
First Seen
14 days ago
Installed on
mcpjam2
claude-code2
replit2
junie2
windsurf2
zencoder2