{
  "type": "option",
  "name": "snarkjs (powersoftau + zkey)",
  "slug": "snarkjs",
  "section": {
    "id": "ceremony",
    "number": "04",
    "title": "Running or reusing a trusted setup",
    "url": "https://zkpick.com/ceremony/"
  },
  "url": "https://zkpick.com/ceremony/snarkjs/",
  "markdown": "https://zkpick.com/md/ceremony/snarkjs.md",
  "category": "Phase 1 and phase 2 tooling",
  "summary": "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.",
  "description": "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.",
  "notes": [],
  "sections": [],
  "strengths": [
    "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"
  ],
  "tradeoffs": [
    "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"
  ],
  "bestFit": "Circom-based Groth16 and PLONK teams, and anyone consuming .ptau artefacts from Perpetual Powers of Tau.",
  "maintainers": "iden3 (Polygon ID lineage), open source",
  "maturity": "Production-used, actively maintained",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "source": "https://github.com/iden3/snarkjs",
  "facts": [],
  "relatedFailureModes": [],
  "sources": [
    {
      "title": "snarkjs — powersoftau and zkey commands, supported curves",
      "url": "https://github.com/iden3/snarkjs",
      "kind": "tool"
    },
    {
      "title": "ptau-deserializer — converts snarkjs phase-1 output for use with gnark",
      "url": "https://github.com/worldcoin/ptau-deserializer",
      "kind": "tool"
    }
  ],
  "updated": "2026-09-12",
  "version": "1.3",
  "canonical": "https://zkpick.com/ceremony/snarkjs/",
  "authors": [
    "MarketComp"
  ]
}