35 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
FreeDomain-specific language for writing arithmetic circuits.
Noir
FreeRust-like language for ZK applications from Aztec.
Halo2
FreeRust framework for writing PLONK-based circuits.
Leo
FreeProgramming language for Aleo's private applications.
Cairo
FreeLanguage for writing provable programs for StarkNet.
o1js
FreeTypeScript library for writing Mina zkApps.
Proof Systems
Libraries implementing ZK proof systems.
SnarkJS
FreeJavaScript implementation of zkSNARKs. Works with Circom.
arkworks
FreeRust libraries for SNARKs including Groth16 and Marlin.
Plonky2
FreeRecursive SNARK system from Polygon. Very fast.
Plonky3
FreeNext-generation proving system. Modular and flexible.
Risc0
FreeZK-VM based on RISC-V. Prove arbitrary computation.
SP1
FreeHigh-performance zkVM from Succinct Labs.
Development and Testing
Tools for developing and testing circuits.
Cryptography Fundamentals
Low-level cryptographic libraries.
ZK Applications
Frameworks for ZK application patterns.
Semaphore
FreeAnonymous signaling protocol. Foundation for many ZK apps.
ZK Email
FreeProve email ownership without revealing content.
Worldcoin SDK
FreeIntegration with World ID for proof of personhood.
Axiom
Paid per queryZK coprocessor for accessing historical blockchain data.
Brevis
Paid per queryZK coprocessor for cross-chain data and computation.
Learning Resources
Educational tools and resources.
Tips from the field
- 1.
Start with Circom to understand circuit constraints before moving to lower-level libraries.
- 2.
zkVMs like SP1 and Risc0 let you write normal Rust instead of circuits.
- 3.
Understand the tradeoffs between different proof systems (proving time vs verification cost vs proof size).
- 4.
Poseidon is faster than Keccak in circuits. Use ZK-friendly primitives.
- 5.
Test constraint counts carefully. Small changes can dramatically affect proof times.