Awesome
Awesome Noir
A curated list of resources for learning and programming in Noir.
⚠️ This repository or the contained links are not endorsed as safe and secure by Aztec Labs or the Noir team. Users are advised to exercise caution before utilizing any content or code provided herein.
Official Resources
Boilerplates
- 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
Libraries
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.
General
- Standard Library - standard library that ships with all Noir releases
- ZK Kit Noir - collection of algorithm and utility libraries from Privacy & Scaling Explorations
Data Types
Numerics
- 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
Dates & Times
- Noir Dates - A Noir library to parse and abstract away Dates
- DateTimeNr - A Noir library to parse and abstract away DateTime objects
Data Type Manipulation
General
- nodash - utility library for working with various data types, inspired by Lodash
Numerics
- 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
Bytes
- U(int)2B(ytes) - a library for converting
u8
->u120
s to[u8]
array
Texts
- 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
Arrays
- Sort - efficient sorting of fixed-sized arrays
- Sparse Array - efficient immutable and mutable sparse arrays
Cryptography
Elliptic Curves
- BigCurve - operations over elliptic curves instantiated with an arbitrary prime field
- Pairing over BLS12-381 - Pairing over BLS12-381
Hashes
- 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
Encryption
- 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
Signatures
- 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 Trees
- 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
Message Authentication Code
- Noir HMAC - hash-based message authentication code
Randomness
- Cryptographically Secure Pseudo-Random Number Generator - pseudo-random number generation
Ethereum
- ECrecover - ECDSA signature verification and return of source Ethereum address
- Ethereum Storage Proof - proving and verifying historical Ethereum / EVM accounts, storage, logs, receipts & transactions
Social
- Noir Social Verify - zkEmail based proof of GitHub, Google, LinkedIn and X accounts and account details
Machine Learning
- 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
Dev Tools
Package Management
Library Registry
- Noir Directory by Oleh
- npkg by Walnut
CLI Manager
- npkg by Walnut
IDE
- 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)
Cross-language
- 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
EVM
- hardhat-noir - Hardhat plugin (Source Code)
- foundry-noir-helper - helper library for working with Noir circuits within Foundry.
Private shared states
- coNoir - generate witness and prove Noir programs in a Multi-Party Computation network
- Kalypso - generate witness and prove Noir programs in Trusted Execution Environments
Library-related
- 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)
Security
- coq-of-noir - formal verification of Noir programs with Coq
- lampe - formal verification of Noir programs with Lean
- hunter - mutation-testing of Noir programs
Proving Backends
- 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)
Projects
General
- ZKEmail - privacy-preserving proof of emails
Benchmarks
- ZK-Bench - Compare Noir to other ZK frameworks (Risc Zero, Leo, Miden, etc)
Authentication
- Safe modules for privacy-preserving multi-sig
- zkLogin - Apple/Google account based authentication for EVM smart accounts
Commercial
- GitClaim - privacy-preserving airdrop claims through proof of GitHub contributions
- z-imburse - automated and privacy-preserving expense reimbursements
Gaming
- BattleZips (Source Code) - on-chain Battleship
- Dappicom - Nintendo Entertainment System (NES) emulator in Noir for proofs of gameplays / speedruns
Governance
- Nouns Anonymous Voting - privacy-preserving voting research project for NounsDAO
Identity
- 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
Social
- anoncast - anonymous Tweets and Casts
- Rate Limiting Nullifiers - spam regulation in anonymous environments
- StealthNote - message board for people in an organization to anonymously broadcast messages
Miscellaneous
Learning
Interactive Tutorials
- 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
Educational Curriculums
- 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
Examples
- Noir Examples - reference examples of zero-knowledge applications in Noir
- Circuit Examples - demonstration implementation of dot products & Merkle proofs in Noir, Circom and RISC0
Talks & Workshops
- [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)
Blog Posts & Articles
- 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
International Resources
Contribute
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.