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