A curated list of resources for learning and programming in Noir.
- noir-starter - project template containing examples using Noir with Vite + Hardhat and Foundry
- hardhat-noir-starter - project template with seamless Hardhat integration
- noir-library-starter - library template
- noir-react-native-starter - mobile development template using React Native
- nargo binary examples - barebones use of nargo binary (and a proving backend) from: simple prove/verify, codegen, to recursion
For package management (e.g. library registry, CLI manager), refer to the package management tooling section.
For library tooling (e.g. input generators, TypeScript implementations), refer to the library-related tooling section.
- Standard Library - standard library that ships with all Noir releases
- ZK Kit Noir - collection of algorithm and utility libraries from Privacy & Scaling Explorations
- BigNum - a library for arithmetic computations of large unsigned integers of any length
- Fraction - a library for accessing fractional number data type in Noir, allowing results that aren't whole numbers
- ZKFloat - a floating point library for Noir
- Complex Numbers - This library offers a comprehensive suite of operations for complex numbers
- Fixed Point Library - The FixedPoint library offers precise fixed-point arithmetic operations tailored for Noir
- Noir Dates - A Noir library to parse and abstract away Dates
- DateTimeNr - A Noir library to parse and abstract away DateTime objects
- nodash - utility library for working with various data types, inspired by Lodash
- Matrix Operations - a library for matrix operations provides functionality for performing various matrix operations
- Statistical Library - Noir Statistical Library is a comprehensive library for statistical computations in the Noir language
- Quantized arithmetic - a library for quantized value operations of zero-point quantization
- U(int)2B(ytes) - a library for converting
u8
->u120
s to[u8]
array
- Base64 - a library for base64 encoding
- Noir Base64 Library - extension of
noir_base64
with support for Vectors and Base64 URL encoding and decoding - JSON parser - JSON string parsing, adheres to IETF RFC 8259
- String Utils - wrapper for String in Noir adding methods for common string operations
- String Search - proof of substring existence within a larger string
- zkRegEx - proof of Regular Expression (RegEx) verification
- Sort - efficient sorting of fixed-sized arrays
- Sparse Array - efficient immutable and mutable sparse arrays
- BigCurve - operations over elliptic curves instantiated with an arbitrary prime field
- Pairing over BLS12-381 - Pairing over BLS12-381
- Griffin for BN254 - zk-friendly hash function
- Hash to curve - Noir lib for hashing to bigger curves
- SHA-1 - a library for generating hashes using SHA-1 hashing function
- SHA-2 - a library for generating hashes using SHA-2 hashing function
- AES - a (naive) implementation of AES encryption and decryption
- ChaCha20 Implementation - a Noir implementation of ChaCha20 as defined by RFC7539
- ElGamal Encryption - Exponential ElGamal Encryption on the Baby Jubjub curve
- Hydra for BN254 - symmetric encryption and decryption
- ECIES - simple implementation of ECIES on the Baby Jubjub curve
- ECDH - simple implementation of ECDH on the Baby Jubjub curve
- RSA - RSA signature verification
- BLS12_381 Elliptic Curve Pairing and Signature Verification Library
- PLUME - Noir implementation of the https://blog.aayushg.com/nullifier/ library for zk-signatures
- WebAuthn/Passkeys - Verification of WebAuthn/Passkeys signatures; verifies signatures produced by
credentials.get
- JWT - Verification of JSON Web Tokens (JWTs) and prove claims
- Noir JWT - Verification of JSON Web Tokens (JWTs) and prove claims
- Merkle Root - calculating Merkle root from given inputs of a Poseidon based Merkle tree
- Sparse Merkle Tree Implementation - TypesSript library to generate optimized sparse merkle trees
- Sparse Merkle Tree Verifier - verification of sparse Merkle trees
- Sparse Merkle Tree Verify/Add/Update/Delete - verification of (non-)membership proofs and add/update/delete leaves
- Noir HMAC - hash-based message authentication code
- Cryptographically Secure Pseudo-Random Number Generator - pseudo-random number generation
- ECrecover - ECDSA signature verification and return of source Ethereum address
- Ethereum Storage Proof - proving and verifying historical Ethereum / EVM accounts, storage, logs, receipts & transactions
- Noir Social Verify - zkEmail based proof of GitHub, Google, LinkedIn and X accounts and account details
- Convolution - Convolutional Neural Network (CNN) library, including Convolutional layers, Pooling layers, and Linear (fully connected) layers
- ML - neural networks
- SKProof - Scikit-learn compatible Python library for generating ZK proofs of execution
- zkML-Noir - Python ML model Noir transcoding, including various algorithms such as Decision tree, K-Means, XGBoost, FNN, CNN
- Noir Directory by Oleh
- npkg by Walnut
- npkg by Walnut
- VS Code Extension - Syntax highlight, error highlight, codelens, etc. (Source Code)
- Neovim Plugin - Syntax highlight, error highlight, etc.
- Emacs Plugin - Syntax highlight (Source Code)
- Zed Plugin - Syntax highlight, LSP support
- Tree-sitter-noir - Tree-sitter grammar for Noir language
- Emacs Tree-sitter Plugin - Syntax highlight (Source Code)
- noir_js - compiling and executing Noir programs in JavaScript / TypeScript
- Noir.rs - Proving and verifying Noir programs in Rust (compatible with mobile architectures such as iOS and Android)
- Python2Noir - Python to Noir transpiler
- Swoir - Proving and verifying Noir programs in Swift on iOS and MacOS
- Noirandroid - Proving and verifying Noir programs in Kotlin on Android
- hardhat-noir - Hardhat plugin (Source Code)
- foundry-noir-helper - helper library for working with Noir circuits within Foundry.
- coNoir - generate witness and prove Noir programs in a Multi-Party Computation network
- Kalypso - generate witness and prove Noir programs in Trusted Execution Environments
- Merkle Tree Generator - generate Noir-library-friendly Pedersen based Merkle trees
- Safecat - generate Noir-library-friendly EdDSA Baby Jubjub Elliptic Curve signatures
- Poseidon2 in TypeScript - a Poseidon2 library in pure TypeScript with support for the implementation used by Noir (over BN254)
- rocq-of-noir - formal verification of Noir programs with Rocq
- lampe - formal verification of Noir programs with Lean
- hunter - mutation-testing of Noir programs
- Barretenberg (UltraHonk / MegaHonk) by Aztec Labs
- Plonky2 by Blocksense
- Plonky2 by Eryx
- Sonobe (Nova, HyperNova) by 0xPARC and PSE
- Plonky3 by Josef (needs updating)
- Halo2 by Ethan (needs updating)
- Groth16 (needs updating)
- Marlin (needs updating)
- ZKEmail - privacy-preserving proof of emails
- ZK-Bench - Compare Noir to other ZK frameworks (Risc Zero, Leo, Miden, etc)
- Safe modules for privacy-preserving multi-sig
- zkLogin - Apple/Google account based authentication for EVM smart accounts
- GitClaim - privacy-preserving airdrop claims through proof of GitHub contributions
- z-imburse - automated and privacy-preserving expense reimbursements
- BattleZips (Source Code) - on-chain Battleship
- Dappicom - Nintendo Entertainment System (NES) emulator in Noir for proofs of gameplays / speedruns
- Nouns Anonymous Voting - privacy-preserving voting research project for NounsDAO
- Anon-Aadhaar - privacy-preserving verification of Aadhaar (Indian residence ID) through proofs revealing only selected identity information
- OpenPassport - identity wallet supporting privacy-preserving proofs of goverment-issued IDs
- zkPassport - privacy-preserving proofs of national passports
- anon.world - social media with optional anonymity
- Rate Limiting Nullifiers - spam regulation in anonymous environments
- StealthNote - message board for people in an organization to anonymously broadcast messages
- NoirGuardians
- 3 quests that use storytelling and lore to teach basic programming in Noir, along with some advanced features that Noir offers
- Get a first introduction to the Noir language, and learn how to integrate Noir programs into Solidity contracts
- Zeronaut
- ZKCamp's Open Source Noir course
- 6 lectures to give participants the knowledge and skills necessary to build decentralized applications based on ZKPs using Noir
- Lessons include ZKP Fundamentals; An Introduction to Aztec Ecosystem; Noir Basics; Building a Noir Application; and Advanced Noir
- [Video Series] BattleZips-Noir (Source Code)
- Walkthrough of building an on-chain Battleships game using zero-knowledge
- Follow along and build your own game using Noir
- Noir Examples - reference examples of zero-knowledge applications in Noir
- Circuit Examples - demonstration implementation of dot products & Merkle proofs in Noir, Circom and RISC0
- [10 mins] Writing Circuits with Noir (Source Code)
- Nargo setup
- Basic Noir syntax
- Noir interactions in TypeScript
- [20 mins] Painless Zero-Knowledge Circuitry with Noir at ETHDam
- Introduction to Noir
- Simple demo and test
- [20 mins] Private Value Transfer in 10 Lines (Source Code)
- Tornado-like private asset transfer using Merkle proofs
- [25 mins] Noir as a Smart Contract Language
- Noir as the smart contract language for the Aztec rollup
- Noir smart contracts
- [45 mins] Outlandish Noir Stuff; Workshop at ETHCC
- How to use Noir to build a bunch of outlandish stuff
- [1 hr] Circuit Safety and an Introduction to Noir
- Common circuit bugs
- Proving system vulnerabilities
- Unconstrained functions
- [1.5 hrs] ZK dApps - Why, What and How?
- [1.5 hrs] Sudoku in Noir (Source Code)
- [2 hrs] ZK HACK III - Introduction to Noir (Source Code)
- Code-together: Quadratic Voting
- [1.1 hrs] Noir on Scroll Workshop (Part of Source Code)
- Understanding the Technical Aspects of Aztec and Noir
- Noir 101 for Solidity devs in (English) and (Spanish)
- Privacy-preserving KYC with Noir
- An incomplete guide to zk-KYC apps
Propose link additions by visiting README.md and click the "pen" icon in the top right corner. Make changes to the file and follow the instructions to create a pull request.