snarkjs (powersoftau + zkey)
Phase 1 and phase 2 tooling
snarkjs (powersoftau + zkey): Phase 1 and phase 2 tooling. The de facto toolchain for Circom-based Groth16 and PLONK projects, covering both the universal phase and the circuit-specific phase, on BN254 and BLS12-381. Maturity: Production-used, actively maintained. Maintained by: iden3 (Polygon ID lineage), open source. Choose it when: Circom-based Groth16 and PLONK teams, and anyone consuming .ptau artefacts from Perpetual Powers of Tau.
What it is
The de facto toolchain for Circom-based Groth16 and PLONK projects, covering both the universal phase and the circuit-specific phase, on BN254 and BLS12-381. powersoftau verify validates the full chain of embedded public keys, not merely hash continuity.
Strengths and tradeoffs
- Widest ecosystem support and the largest body of published ceremony instructions written against it
- Verification checks the cryptographic contribution chain, not just file hashes
- Runs in Node and in browsers, lowering the barrier for independent contributors
- Consumes widely mirrored .ptau artefacts directly, so phase-1 reuse is a download
- JavaScript/WASM performance and memory limits make very large powers awkward
- The non-interactive entropy flag is a footgun: a literal string in a CI script produces a contribution with effectively no secret
- Correct usage is a process, not a command — nothing prevents shipping a key with zero phase-2 contributions
Choose it whenCircom-based Groth16 and PLONK teams, and anyone consuming .ptau artefacts from Perpetual Powers of Tau.
Related pages
Sources cited on this page · 2
All 42 sources for §04 are listed on the section page →
Cite this page
MarketComp (2026). snarkjs (powersoftau + zkey). The ZK Field Manual (Version 1.3). MarketComp. https://zkpick.com/ceremony/snarkjs/
@misc{zkfieldmanual-snarkjs-powersoftau-zkey,
title = {snarkjs (powersoftau + zkey) — The ZK Field Manual},
author = {MarketComp},
year = {2026},
version = {1.3},
howpublished = {\url{https://zkpick.com/ceremony/snarkjs/}},
note = {Accessed: YYYY-MM-DD}
}