30 Essential Tools for ZK Engineers
Zero-knowledge engineering requires specialized tools for developing circuits, generating proofs, and building ZK applications. Here are the essentials.
Circuit Development Languages
Languages for writing ZK circuits.
Circom
Domain-specific language for writing arithmetic circuits. Free and open-source.
Noir
Rust-like language for ZK applications from Aztec. Free and open-source.
Halo2
Rust framework for writing PLONK-based circuits. Free and open-source.
Leo
Programming language for Aleo's private applications. Free and open-source.
Cairo
Language for writing provable programs for StarkNet. Free and open-source.
o1js
TypeScript library for writing Mina zkApps. Free and open-source.
Proof Systems
Libraries implementing ZK proof systems.
SnarkJS
JavaScript implementation of zkSNARKs. Works with Circom. Free and open-source. Active open-source project on GitHub.
arkworks
Rust libraries for SNARKs including Groth16 and Marlin. Free and open-source.
Plonky2
Recursive SNARK system from Polygon. Very fast. Check the GitHub repo for documentation and examples.
Plonky3
modern proving system. Modular and flexible. Check the GitHub repo for documentation and examples.
Risc0
ZK-VM based on RISC-V. Prove arbitrary computation. Free and open-source.
SP1
High-performance zkVM from Succinct Labs. Check the GitHub repo for documentation and examples.
Development and Testing
Tools for developing and testing circuits.
circomlib
Library of common Circom components. Check the GitHub repo for documentation and examples.
Hardhat Circom
Hardhat plugin for Circom development. Check the GitHub repo for documentation and examples.
Nargo
Package manager and CLI for Noir. Worth evaluating for your workflow.
Scarb
Build toolchain and package manager for Cairo. Free and open-source.
Protostar
Development framework for StarkNet contracts. Free and open-source.
Cryptography Fundamentals
Low-level cryptographic libraries.
bn254
BN254 curve implementation. Most common for SNARKs. Free and open-source. Active open-source project on GitHub.
Poseidon Hash
ZK-friendly hash function implementations. Check the GitHub repo for documentation and examples.
blstrs
BLS12-381 implementation for BLS signatures and SNARKs. Free and open-source. Active open-source project on GitHub.
ff
Finite field arithmetic traits and implementations. Free and open-source. Active open-source project on GitHub.
ZK Applications
Frameworks for ZK application patterns.
Semaphore
Anonymous signaling protocol. Foundation for many ZK apps. Free and open-source.
ZK Email
Prove email ownership without revealing content. Free and open-source.
Worldcoin SDK
Integration with World ID for proof of personhood. Free and open-source.
Axiom
ZK coprocessor for accessing historical blockchain data. Used by production teams across the ecosystem.
Brevis
ZK coprocessor for cross-chain data and computation. Used by production teams across the ecosystem.
Learning Resources
Educational tools and resources.
ZK Hack
Community and learning platform for ZK developers. Free and open-source.
ZK Whiteboard Sessions
Video series explaining ZK concepts. Worth evaluating for your workflow.
Ingopedia
Curated ZK learning resources. Worth evaluating for your workflow.
Awesome ZKP
Curated list of ZK resources and projects. Check the GitHub repo for documentation and examples.
Key Recommendations
Start with Circom to understand circuit constraints before moving to lower-level libraries.
zkVMs like SP1 and Risc0 let you write normal Rust instead of circuits.
Understand the tradeoffs between different proof systems (proving time vs verification cost vs proof size).
Poseidon is faster than Keccak in circuits. Use ZK-friendly primitives.
Test constraint counts carefully. Small changes can dramatically affect proof times.
