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