Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
proofman-setup
CLI for the PIL2 STARK proving-key setup pipeline. Compiles a .pilout into the
artifacts the prover needs at runtime: stark info, expressions, verifier code,
const trees, recursive aggregation circuits, and witness libraries.
proofman-setup <subcommand> [options]
Subcommands at a glance
| Subcommand | Purpose | Inputs | Outputs |
|---|---|---|---|
setup |
Run the main setup pipeline (per-AIR + optional recursive) | .pilout, fixed cols, optional starkstructs |
provingKey/ populated end-to-end |
stats |
Per-AIR statistics report | .pilout |
text stats file |
setup-snark |
Final SNARK setup on top of vadcop_final |
provingKey/ from a prior setup --recursive |
recursivef, final SNARK artifacts |
setup-recursive-test |
Setup a single user-provided recursive circuit | a .circom file |
per-circuit setup artifacts |
rebuild-witness-libs |
Rebuild every witness .so/.dylib from a provingKey/ directory |
existing provingKey/ |
refreshed witness libraries in-place |
setup
Run the full per-AIR setup, and (with --recursive) the compressor / recursive1
/ recursive2 / vadcop_final / vadcop_final_compressed pipeline.
| Flag | Purpose |
|---|---|
-a, --airout |
Compiled .pilout file |
-b, --build-dir |
Output directory; will contain provingKey/, circom/, build/, pil/ |
-u, --fixed-dir |
Directory with .fixed columns (optional; falls back to inline pilout values) |
-s, --stark-structs |
starkstructs.json overriding default stark settings per AIR |
-r, --recursive |
Also run compressor → recursive1 → recursive2 → vadcop_final → vadcop_final_compressed |
--recursive-jobs |
Parallel recursive1 air pipelines (env: RECURSIVE_JOBS, default 1). Sized by RAM |
--setup-jobs |
Parallel AIRs for the non-recursive setup (env: SETUP_JOBS, default 1) |
-o, --output |
Optional path to write per-AIR stats |
Without --recursive, only the per-AIR artifacts are produced
(<airgroup>/airs/<air>/air/<air>.{starkinfo,verifierinfo,expressionsinfo,verkey}.json,
plus .const, .consttree, .bin, .verifier.bin, .verifier.rs).
With --recursive, the recursive layers are added under
<airgroup>/airs/<air>/{compressor,recursive1}/,
<airgroup>/recursive2/, vadcop_final/, and vadcop_final_compressed/ —
each with its own const tree, witness .so/.dylib, and verifier artifacts.
stats
Print per-AIR statistics: constraints, intermediate polynomials per stage, column counts, etc. Useful for sizing the build before running it.
| Flag | Purpose |
|---|---|
-a, --airout |
Compiled .pilout file |
-o, --output |
Output file (default: tmp/stats.txt) |
-s, --starkstructs |
Same starkstructs.json used by setup, for accurate sizing |
-g, --airgroups |
Filter to specific airgroup names |
-i, --airs |
Filter to specific air names |
-m, --impols |
Include intermediate polynomial details per stage |
Read-only — does not write to provingKey/.
setup-snark
Continues from a provingKey/ produced by setup --recursive, generating the
final SNARK layer (recursivef + fflonk or plonk final).
| Flag | Purpose |
|---|---|
-b, --build-dir |
Build directory containing provingKey/ from a prior setup --recursive |
--powers-of-tau |
.ptau file consumed by the snarkjs setup |
--final-snark |
fflonk (default) or plonk |
--publics-info |
Optional JSON describing the publics-hash layout |
--only-recursive-final |
Stop after recursivef; skip the final SNARK step |
Requires vadcop_final/vadcop_final.{starkinfo,verifierinfo,verkey}.json to
already exist.
setup-recursive-test
Run a single recursive setup over a user-provided .circom file. Used by CI to
exercise compressor / aggregation / final-vadcop / light templates without
booting the full pipeline.
| Flag | Purpose |
|---|---|
-b, --build-dir |
Build directory |
-c, --circom |
Path to the .circom source file |
-n, --name |
Circuit name (used as the artifact basename) |
-t, --type |
One of compressor, aggregation (default) |
rebuild-witness-libs
Rebuild only the witness libraries (.so / .dylib) inside a
provingKey/ directory, without re-running the expensive setup steps
(pil_info, plonk2pil, const-tree, etc.).
The command takes the provingKey/ path directly — no other folders need to
exist alongside it. Useful when you've downloaded or copied just the proving
key and want fresh witness libraries (e.g. macOS .dylibs on top of a
Linux-built proving key).
| Flag | Purpose |
|---|---|
-p, --proving-key |
Path to the provingKey/ directory |
-b, --build-dir |
Optional directory for intermediate .circom/.cpp files. Defaults to a tempdir that is removed when the command finishes |
-j, --jobs |
Number of circom compiles to run in parallel (env: REBUILD_JOBS, default 1 = serial). Each circom invocation is single-threaded but RAM-hungry — size by available memory rather than CPU count. ~10–20 GB peak per large circuit |
What it does
For every circuit in provingKey/<global_name>/... that already has a witness
library (compressor, recursive1, recursive2, vadcop_final,
vadcop_final_compressed):
- Loads the persisted
*.starkinfo.json/*.verifierinfo.json/*.verkey.jsonfrom the proving key. - Regenerates the verifier circom via
pil2circomand the wrapper circom viagen_circom. - Runs
circom <name>.circom --c -O2 --prime goldilocksto emit C++. - Compiles the C++ into a shared library via the same
make witnessrecipe the original setup uses.
No .dat, .const, .consttree, .exec, .bin, .verifier.rs files are
touched.
Progress logging
The command prints a discovery summary, then [i/N] progress lines for each
circuit. Sample output for fibonacci-square (with --jobs 1):
Discovered 6 witness library(ies) to rebuild:
[1/6] compressor / FiboCPU.FibonacciSquare
[2/6] recursive1 / FiboCPU.FibonacciSquare (with compressor)
[3/6] recursive1 / FiboCPU.Module
[4/6] recursive1 / FiboCPU.SpecifiedRanges
[5/6] recursive2 / FiboCPU
[6/6] vadcop_final
Running circom compiles with 1 job(s) in parallel
[1/6] compressor / FiboCPU.FibonacciSquare: loading starkinfo / verifierinfo / verkey
[1/6] compressor / FiboCPU.FibonacciSquare: generating circom sources (pil2circom + gen_circom)
[1/6] compressor / FiboCPU.FibonacciSquare: invoking circom (this is the slow step)
[1/6] compressor / FiboCPU.FibonacciSquare: circom done in 28.4s
[1/6] compressor / FiboCPU.FibonacciSquare: spawning witness library build (.so/.dylib)
...
All circom compiles complete; 6 witness library build(s) running in background
With --jobs > 1, lines from different circuits will be interleaved — the
[i/N] prefix lets you trace which one each log belongs to.
Output extension is host-OS controlled
| Host | Extension produced |
|---|---|
| Linux | <circuit>.so |
| macOS | <circuit>.dylib |
Output goes into the same per-circuit provingKey/build/... directories as
the existing libraries. Running this on a Mac against a Linux-built proving
key deposits a .dylib next to the existing .so (the prior .so is left
alone). Running it on Linux when a .so is already present overwrites that
.so.
When to use it
- You want macOS-compatible witness libs from a proving key originally built on
Linux — run this on a Mac (or in a
macos-latestCI runner) against the proving key, and you get.dylibs in place. - You're iterating on circom templates and want to rebuild
.sos without rerunning the full setup.
Environment variables
These override the auto-detected tooling paths used by setup, setup-snark,
setup-recursive-test, and rebuild-witness-libs. All have sensible defaults
that resolve relative to the repo or the executable's parent directories.
| Variable | Default | What it points to |
|---|---|---|
CIRCUITS_GL_PATH |
setup/stark-recurser/stark2circom/circom_verifier/circuits.gl |
Goldilocks circom helpers |
RECURSER_CIRCUITS_PATH |
setup/stark-recurser/stark2circom/circom_verifier/helper_circuits |
vadcop circom templates |
RECURSER_CIRCUITS_COMPRESSED_FINAL_PATH |
setup/stark-recurser/stark2circom/circom_verifier/helper_circuits |
vadcop_final_compressed circom helpers (goldilocks-side) |
CIRCUITS_BN128_PATH |
setup/stark-recurser/stark2circom/circom_verifier/circuits.bn128 |
BN128 circom helpers (snark setup) |
STD_PIL_PATH |
pil2-components/lib/std/pil |
PIL standard library |
RECURSER_PIL_PATH |
setup/stark-recurser/plonk2pil/pil |
plonk2pil PIL templates |
CIRCOM_HELPERS_DIR |
setup/circom |
C++ witness helpers + Makefile |
FINAL_SNARK_CIRCOM_HELPERS_DIR |
setup/final_snark_circom |
C++ witness helpers for the final SNARK |
GOLDILOCKS_SRC_DIR |
pil2-stark/src/goldilocks/src |
Goldilocks C++ sources copied into the witness build |
RECURSIVE_JOBS |
1 |
Parallelism for recursive1 air pipelines |
SETUP_JOBS |
1 |
Parallelism for non-recursive AIR setup |
REBUILD_JOBS |
1 |
Parallelism for rebuild-witness-libs circom compiles |
Path resolution checks (in order): the env var, the path relative to CWD, then walks up from the executable's directory looking for the same suffix. Set the env var explicitly when running outside the repo.
Typical end-to-end flow
# 1. Per-AIR + recursive setup
# 2. Final SNARK on top
# 3. (Cross-platform) regenerate witness libs for the other OS
# Run this on a Mac to get .dylibs into the same provingKey: