├── CONTRIBUTING.md ├── LICENSE └── README.md /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | ## Adding Links 4 | 5 | Propose link additions by visiting [README.md](./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. 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Awesome Noir 2 | 3 | A curated list of resources for learning and programming in Noir. 4 | 5 | ⚠️ 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. 6 | 7 | [![Awesome](https://img.shields.io/badge/Awesome-Repo-blue?logo=awesome-lists&style=flat)](https://awesome.re) 8 | [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/NoirLang)](https://x.com/NoirLang) 9 | [![Discord](https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white&labelColor=5865F2&style=flat&labelWidth=100)](https://discord.com/invite/RJdCBN373S) 10 | 11 | ## Contents 12 | 13 | 14 | 15 | - [Useful Resources](#useful-resources) 16 | - [Projects](#projects) 17 | * [General](#general) 18 | * [Authentication](#authentication) 19 | * [Commercial](#commercial) 20 | * [DeFi](#defi) 21 | * [Gaming](#gaming) 22 | * [Governance](#governance) 23 | * [Identity](#identity) 24 | * [Social](#social) 25 | - [Benchmarks](#benchmarks) 26 | - [Learning](#learning) 27 | * [Interactive Tutorials](#interactive-tutorials) 28 | * [Educational Curriculums](#educational-curriculums) 29 | * [Examples](#examples) 30 | * [Talks & Workshops](#talks-workshops) 31 | + [Coding in Noir](#coding-in-noir) 32 | + [Coding with Noir Projects](#coding-with-noir-projects) 33 | + [Project walkthroughs](#project-walkthroughs) 34 | + [Security](#security) 35 | * [Blog Posts & Articles](#blog-posts-articles) 36 | * [International Resources](#international-resources) 37 | - [Boilerplates](#boilerplates) 38 | - [Libraries](#libraries) 39 | * [General](#general-1) 40 | * [Data Types](#data-types) 41 | + [Numerics](#numerics) 42 | + [Dates & Times](#dates-times) 43 | * [Data Type Manipulation](#data-type-manipulation) 44 | + [General](#general-2) 45 | + [Numerics](#numerics-1) 46 | + [Bytes](#bytes) 47 | + [Texts](#texts) 48 | + [Collections](#collections) 49 | * [Cryptography](#cryptography) 50 | + [Elliptic Curves](#elliptic-curves) 51 | + [Hashes](#hashes) 52 | + [Encryption](#encryption) 53 | + [Signatures](#signatures) 54 | + [Merkle Trees](#merkle-trees) 55 | + [Message Authentication Code](#message-authentication-code) 56 | + [Randomness](#randomness) 57 | * [Blockchain Specifics](#blockchain-specifics) 58 | + [Aztec](#aztec) 59 | + [Ethereum](#ethereum) 60 | + [Bitcoin](#bitcoin) 61 | * [Social](#social-1) 62 | * [Machine Learning](#machine-learning) 63 | - [Developer Tools](#developer-tools) 64 | * [Package Management](#package-management) 65 | + [Library Registry](#library-registry) 66 | + [CLI Manager](#cli-manager) 67 | * [IDE](#ide) 68 | * [Linting](#linting) 69 | * [Debugging](#debugging) 70 | * [Performance](#performance) 71 | * [Cross-platform](#cross-platform) 72 | + [Browser development](#browser-development) 73 | + [Mobile development](#mobile-development) 74 | * [EVM](#evm) 75 | * [Private shared states](#private-shared-states) 76 | * [Library-related](#library-related) 77 | * [Security](#security-1) 78 | * [Proving Backends](#proving-backends) 79 | - [Contribute](#contribute) 80 | - [License](#license) 81 | 82 | 83 | 84 | --- 85 | 86 | ## Useful Resources 87 | 88 | - [Docs](https://noir-lang.org/docs) 89 | - [GitHub](https://github.com/noir-lang) 90 | - [Discord](https://discord.gg/RJdCBN373S) 91 | - [Community Job Board](https://www.notion.so/aztecnetwork/Noir-Community-Job-Board-1a1a1f6b0e3580a58515ecae879c8cf2) 92 | 93 | ## Projects 94 | 95 | ### General 96 | 97 | - [AnonRadar](https://www.anonradar.xyz/) - registry of Noir projects 98 | - [ZK Email](https://github.com/zkemail/zkemail.nr) - privacy-preserving proof of emails 99 | 100 | ### Authentication 101 | 102 | - Safe modules for privacy-preserving multi-sig 103 | - [Dark Safe](https://github.com/colinnielsen/dark-safe) 104 | - [zkSafe](https://github.com/1kx-network/zksafe/) 105 | - [SAMM](https://github.com/oxor-io/samm-circuits) - zkEmail based 106 | - [zkLogin](https://github.com/olehmisar/zklogin) - Apple/Google account based authentication for EVM smart accounts 107 | 108 | ### Commercial 109 | 110 | - [GitClaim](https://github.com/saleel/gitclaim) - privacy-preserving airdrop claims through proof of GitHub contributions 111 | - [z-imburse](https://github.com/Mach-34/z-imburse) - automated and privacy-preserving expense reimbursements 112 | - [ZK-Flexor](https://github.com/RadNi/zk-flexor) - privacy-preserving proofs of EVM asset balances 113 | 114 | ### DeFi 115 | 116 | - [Mezcal](https://github.com/olehmisar/mezcal) - a cutting edge on-chain limit order book dark pool. 117 | 118 | ### Gaming 119 | 120 | - [ZK-AntiCheat](https://github.com/pop-eax/ZK-AntiCheat) - Privacy-Preserving anticheat engine 121 | - [Terry Escape](https://github.com/fatlabsxyz/terry-escape) - Multiplayer faction warfare in fog of war 122 | - [zk-hangman-noir](https://github.com/Turupawn/zk-hangman-noir) - end-to-end zkDApp demo showcasing the Hangman circuit, EVM contract, and WASM frontend 123 | 124 | ### Governance 125 | 126 | - [Nouns Anonymous Voting](https://github.com/aragonzkresearch/nouns-anonymous-voting) - privacy-preserving voting research project for NounsDAO 127 | 128 | ### Identity 129 | 130 | - [Anon-Aadhaar](https://github.com/anon-aadhaar/anon-aadhaar-noir) - privacy-preserving verification of Aadhaar (Indian residence ID) through proofs revealing only selected identity information 131 | - [Self](https://github.com/selfxyz/self) - identity wallet supporting privacy-preserving proofs of government-issued IDs 132 | - [ZKPassport](https://github.com/zkpassport/) - privacy-preserving proofs of national passports 133 | - [Rarimo](https://github.com/rarimo/passport-zk-circuits-noir) - passport signature verification circuits 134 | 135 | 136 | ### Social 137 | 138 | - [anon.world](https://github.com/Slokh/anonworld) - social media with optional anonymity 139 | - [Rate Limiting Nullifiers](https://github.com/curryrasul/rln.nr) - spam regulation/rate-limiting in anonymous environments 140 | - [StealthNote](https://github.com/saleel/stealthnote) - message board for people in an organization to anonymously broadcast messages 141 | 142 | ## Benchmarks 143 | 144 | - [Ethproofs' SHA256 and ECDSA Benchmarks](https://ethproofs.org/csp-benchmarks) - benchmarks of SHA256 hashes and ECDSA signature verifications in Noir with Barretenberg and other ZK stacks 145 | - [MoPro's Benchmarks](https://zkmopro.org/docs/performance/#noir) - benchmarks of Noir programs on mobile and browser 146 | - [Semaphore Benchmarks](https://hashcloak.github.io/semaphore-noir-final-report/benchmarks.html) - benchmarks of Semaphore implementations in Noir and Circom 147 | - [RSA Benchmarks](https://github.com/zkpassport/noir_rsa?tab=readme-ov-file#benchmarks) - benchmarks of the Noir RSA signature verification library 148 | - ECDSA secp256r1 Benchmarks - benchmarks of ECDSA signature verifications across different ZK tech stacks 149 | - [From the Base team](https://github.com/lukasrosario/zk-snark-ecdsa-benchmarks) 150 | - [From the Hyli team](https://github.com/vladfdp/p256-proving-benchmark) 151 | - [Noir Development Bench](https://noir-lang.github.io/noir/dev/bench/) - development benchmarks of compilation and execution on latest Noir GitHub commits 152 | - [Noir Benchmark CLI](https://github.com/francoperez03/noir-benchmark-cli) - CLI tool for benchmarking NoirJS + Barretenberg proof generation with visual pipeline profiling and performance insights 153 | 154 | ## Learning 155 | 156 | ### Interactive Tutorials 157 | 158 | - [Noirlings](https://github.com/satyambnsal/noirlings) - A hands-on, interactive way to learn Noir programming language through practical exercises. 159 | - [Noirlings.app](https://www.noirlings.app/) - Learn Noirlings on your browser, no setup needed. 160 | - [Glass Bridge With Noir](https://zkdev.net/docs/tutorial/glass-bridge) – A browser-based game that demonstrates Zero-Knowledge Proofs using Noir. Learn by proving a secret path without revealing it. 161 | 162 | ### Educational Curriculums 163 | 164 | - [Noir Programming And ZK Circuits by Cyfrin](https://updraft.cyfrin.io/courses/noir-programming-and-zk-circuits) 165 | - Step into the world of Noir, a domain-specific programming language for writing circuits, and learn to build zero-knowledge (ZK) apps. The Noir Programming and ZK Circuits course will teach you how to write circuits, how to build a full ZK protocol from scratch (using Noir, Barretenberg, and Solidity), and how to build the backend of a full-stack, privacy-preserving ZK application. 166 | - [ZKCamp's Open Source Noir course](https://github.com/ZKCamp/aztec-noir-course) 167 | - 6 lectures to give participants the knowledge and skills necessary to build decentralized applications based on ZKPs using Noir 168 | - Lessons include ZKP Fundamentals; An Introduction to Aztec Ecosystem; Noir Basics; Building a Noir Application; and Advanced Noir 169 | - [Video Series] [BattleZips-Noir](https://www.youtube.com/playlist?list=PLWACGbvIsEgnR2aUCr9i-PpmTVhF5Zuik) ([Source Code](https://github.com/BattleZips/BattleZips-Noir)) 170 | - Walkthrough of building an on-chain Battleships game using zero-knowledge 171 | - Follow along and build your own game using Noir 172 | 173 | ### Examples 174 | 175 | - [Noir Examples](https://github.com/noir-lang/noir-examples) - reference examples of zero-knowledge applications in Noir 176 | - [Circuit Examples](https://github.com/thor314/circuit-examples) - demonstration implementation of dot products & Merkle proofs in Noir, Circom and RISC0 177 | 178 | ### Talks & Workshops 179 | 180 | #### Coding in Noir 181 | 182 | - [Workshop] [Build Your First ZK App with Noir](https://www.youtube.com/watch?v=06INZUM5Ca8) 183 | - [Workshop] [ProtocolBerg v2: Learn Noir in an Afternoon](https://watch.protocol.berlin/65a90bf47932ebe436ba9351/watch?session=684ff138caecf08629c002f2) 184 | - [Workshop] [Noir Xmas Camp: Building Applications with Noir](https://youtu.be/KxWNFIMyFiQ?si=cJmZSgpAbfeTOWxj) - E2E app building with NoirJS and the Noir Debugger 185 | - [Workshop] [NoirHack: Advanced Noir](https://www.youtube.com/watch?v=OLhm6pKogbY) - using unconstrained functions for performance 186 | - [Workshop] [NoirCon 2: Vibe Coding Noir](https://www.youtube.com/watch?v=KOFUwzqd4oo) - AI-assisted Noir coding with Cursor and Claude 187 | 188 | #### Coding with Noir Projects 189 | 190 | - [Talk] [d/Infra Summit: coNoir](https://www.youtube.com/watch?v=VvuKWx6afOA) 191 | - [Talk] [NoirCon 2: Semaphore](https://www.youtube.com/watch?v=vfL7z74jGyU) 192 | - [Workshop] [NoirHack: MoPro](https://www.youtube.com/watch?v=UrT2x3JSKFg) 193 | - [Workshop] [NoirHack: ZK Email](https://www.youtube.com/watch?v=jpJdxlIZd5w) 194 | - [Workshop] [NoirHack: ZK Kit](https://www.youtube.com/watch?v=jKI60vZkCPY) 195 | - [Workshop] [NoirHack: ZKPassport](https://www.youtube.com/watch?v=Na60y_WOWUY) 196 | 197 | #### Project walkthroughs 198 | 199 | - [Workshop] [NoirHack: Stealthnote and GitClaim](https://www.youtube.com/watch?v=aX5ExM4sL6A) 200 | 201 | #### Security 202 | 203 | - [Workshop] [Circuit Safety and an Introduction to Noir](https://www.youtube.com/watch?v=rLvu61DA-hk) - common ZK vulnerabilities and an introduction to Noir 204 | - [Workshop] [Noir Xmas Camp: Circuit Security & Production Readiness with Noir](https://youtu.be/pNI_56b7Bdo?si=LU1wQ-2Igd4Z7oNA) 205 | - [Workshop] [NoirCon 2: Lampe](https://www.youtube.com/watch?v=CPel4WyBNuk) - formal verification of Noir programs in Lean 206 | 207 | ### Blog Posts & Articles 208 | 209 | - [Understanding the Technical Aspects of Aztec and Noir](https://hackmd.io/XZX9_pZ8Q1aa_ySDPeQopg) 210 | - Noir 101 for Solidity devs in ([English](https://mirror.xyz/crisgarner.eth/IRRxnP-HVP-7qLZ-bTI2HRpKTmSRPCDl-Q6gm2NTj4g)) and ([Spanish](https://mirror.xyz/crisgarner.eth/Iek7PhbhU4WpIJ6eixFq80_7R6czH7fbdCoN0Bd7NfI)) 211 | - [Privacy-preserving KYC with Noir](https://medium.com/@tisura/privacy-preserving-kyc-57002ab8d3f2) 212 | - [An incomplete guide to zk-KYC apps](https://medium.com/@tisura/an-incomplete-guide-to-zk-kyc-apps-d7b4c684795c) 213 | - [Build a Decentralized Voting Application w/ Noir](https://threesigma.xyz/blog/build-noir-decentralized-voting-application) 214 | - [Write an app-specific plasma that preserves privacy](https://ethereum.org/developers/tutorials/app-plasma/) - complete tutorial for an application that relies on Ethereum and Noir for integrity while preserving privacy (except for one centralized component). 215 | 216 | ### International Resources 217 | 218 | - [Introduction to Noir in Spanish](https://www.youtube.com/watch?v=m4P-sAqa8_o) 219 | - ([Written Tutorial and Code](https://dev.to/turupawn/circuitos-de-aztec-noir-en-tu-navegador-zk-es-semana-3-78a)) 220 | - [Building a ZK dApp in Cantonese](https://www.youtube.com/watch?v=IAQrO1j20pg) 221 | - [Slides](https://docs.google.com/presentation/d/1Zh8McXfdjREg0Y6iG9Q1_d-8Sgi7QT_7gJdOSmLqEEI/) 222 | 223 | ## Boilerplates 224 | 225 | - [hardhat-noir-starter](https://github.com/olehmisar/hardhat-noir-starter) - project template with seamless Hardhat integration 226 | - [noir-library-starter](https://github.com/noir-lang/noir-library-starter) - library template 227 | - [noir-react-native-starter](https://github.com/madztheo/noir-react-native-starter) - mobile development template using React Native 228 | - [nargo binary examples](https://github.com/noir-lang/noir/tree/master/examples) - barebones use of nargo binary (and a proving backend) from: simple prove/verify, codegen, to recursion 229 | - [noir-recursive](https://github.com/teddav/noir-recursive) - recursion circuit template with UltraHonk in javascript 230 | 231 | ## Libraries 232 | 233 | For package management (e.g. library registry, CLI manager), refer to the [package management tooling](#package-management) section. 234 | 235 | For library tooling (e.g. input generators, TypeScript implementations), refer to the [library-related tooling](#library-related) section. 236 | 237 | ### General 238 | 239 | - [Standard Library](https://github.com/noir-lang/noir/tree/master/noir_stdlib) - standard library that ships with all Noir releases 240 | - [ZK Kit Noir](https://github.com/privacy-scaling-explorations/zk-kit.noir) - collection of algorithm and utility libraries from Privacy & Scaling Explorations 241 | 242 | ### Data Types 243 | 244 | #### Numerics 245 | 246 | - [BigNum](https://github.com/noir-lang/noir-bignum) - a library for arithmetic computations of large unsigned integers of any length 247 | - [Fraction](https://github.com/resurgencelabs/fraction) - a library for accessing fractional number data types in Noir, allowing results that aren't whole numbers 248 | - [ZKFloat](https://github.com/0x3327/ZKFloat) - a floating point library for Noir 249 | - [IEEE754](https://github.com/jeswr/noir_IEEE754) - an IEEE 754-compliant floating-point arithmetic library supporting single and double precision 250 | - [Complex Numbers](https://github.com/doctoruber/complexnr) - This library offers a comprehensive suite of operations for complex numbers 251 | - [Fixed Point Library](https://github.com/doctoruber/noir-fixed-point) - The FixedPoint library offers precise fixed-point arithmetic operations tailored for Noir 252 | - [Fixed Point Library for scale 2^-16](https://github.com/hashcloak/noir-fixed-point) - an optimized fixed point arithmetic library designed for scale 2^-16. 253 | 254 | #### Dates & Times 255 | 256 | - [Noir Dates](https://github.com/madztheo/noir-date) - A Noir library to parse and abstract away Dates 257 | - [DateTimeNr](https://github.com/doctoruber/DateTimeNr) - A Noir library to parse and abstract away DateTime objects 258 | 259 | ### Data Type Manipulation 260 | 261 | #### General 262 | 263 | - [nodash](https://github.com/olehmisar/nodash) - utility library for working with various data types, inspired by Lodash 264 | 265 | #### Numerics 266 | 267 | - [Matrix Operations](https://github.com/storswiftlabs/matrix_operations) - a library for matrix operations provides functionality for performing various matrix operations 268 | - [Statistical Library](https://github.com/doctoruber/statnr) - Noir Statistical Library is a comprehensive library for statistical computations in the Noir language 269 | - [Quantized arithmetic](https://github.com/storswiftlabs/quantized_arithmetic) - a library for quantized value operations of zero-point quantization 270 | 271 | #### Bytes 272 | 273 | - [U(int)2B(ytes)](https://github.com/colinnielsen/noir-u2b) - a library for converting `u8`->`u120`s to `[u8]` array 274 | 275 | #### Texts 276 | 277 | - [Base64](https://github.com/vlayer-xyz/noir-base64) - a library for base64 encoding 278 | - [Noir Base64 Library](https://github.com/Envoy-VC/noir_base64_lib) - extension of `noir_base64` with support for Vectors and Base64 URL encoding and decoding 279 | - [JSON parser](https://github.com/noir-lang/noir_json_parser) - JSON string parsing, adheres to [IETF RFC 8259](https://datatracker.ietf.org/doc/html/rfc8259) 280 | - [String Utils](https://github.com/madztheo/noir-string-utils) - wrapper for String in Noir adding methods for common string operations 281 | - [String Search](https://github.com/noir-lang/noir_string_search) - proof of substring existence within a larger string 282 | - [zkRegEx](https://github.com/zkemail/zk-regex) - proof of Regular Expression (RegEx) verification 283 | 284 | #### Collections 285 | 286 | - [Sort](https://github.com/noir-lang/noir_sort) - efficient sorting of fixed-sized arrays 287 | - [Sparse Array](https://github.com/noir-lang/sparse_array) - efficient immutable and mutable sparse arrays 288 | - [Lib_LinkList](https://github.com/0xKarl98/Lib_LinkList) - A memory-efficient doubly-linked list implementation for Noir that supports constant time operations at both ends 289 | 290 | ### Cryptography 291 | 292 | #### Elliptic Curves 293 | 294 | - [BigCurve](https://github.com/noir-lang/noir_bigcurve) - operations over elliptic curves instantiated with an arbitrary prime field 295 | - [Pairing over BLS12-381](https://github.com/ewynx/noir_bls12_381_pairing) - Pairing over BLS12-381 296 | 297 | #### Hashes 298 | 299 | - [Keccak256](https://github.com/noir-lang/keccak256) - Keccak256 hashes 300 | - [MiMC](https://github.com/noir-lang/mimc) - MiMC hashes 301 | - [Poseidon](https://github.com/noir-lang/poseidon) - Poseidon and Poseidon2 hashes 302 | - [RIPEMD160](https://github.com/distributed-lab/noir-ripemd160) - RIPEMD160 hashes 303 | - [SHA256](https://github.com/noir-lang/sha256) - SHA256 hashes 304 | - [SHA512](https://github.com/noir-lang/sha512) - SHA512 and SHA384 hashes 305 | 306 | #### Encryption 307 | 308 | - [AES](https://github.com/TaceoLabs/noir-aes) - a (naive) implementation of AES encryption and decryption 309 | - [ChaCha20 Implementation](https://github.com/SleepingShell/noir-chacha20) - a Noir implementation of ChaCha20 as defined by [RFC7539](https://www.rfc-editor.org/rfc/rfc7539) 310 | - [ElGamal Encryption](https://github.com/jat9292/noir-elgamal/) - Exponential ElGamal Encryption on the Baby Jubjub curve 311 | - [Hydra for BN254](https://github.com/TaceoLabs/noir-hydra) - symmetric encryption and decryption 312 | - [ECIES](https://github.com/informalsystems/noir-ecies) - simple implementation of ECIES on the Baby Jubjub curve 313 | - [ECDH](https://github.com/privacy-scaling-explorations/zk-kit.noir/tree/main/packages/ecdh) - simple implementation of ECDH on the Baby Jubjub curve 314 | 315 | #### Signatures 316 | 317 | - [BLS12_381 Elliptic Curve Pairing and Signature Verification Library](https://github.com/onurinanc/noir-bls-signature) 318 | - [EdDSA](https://github.com/noir-lang/eddsa) - EdDSA signature verification 319 | - [ECDSA](https://github.com/zkpassport/noir-ecdsa) - ECDSA (NIST and Brainpool curves) signature verification 320 | - [JWT](https://github.com/saleel/noir-jwt) - Verification of JSON Web Tokens (JWTs) and prove claims 321 | - [PLUME](https://github.com/signorecello/zk-nullifier-sig/) - ECDSA-based nullifiers 322 | - [RSA](https://github.com/zkpassport/noir_rsa) - RSA signature verification 323 | - [Schnorr](https://github.com/noir-lang/schnorr) - Schnorr signature verification 324 | - [WebAuthn/Passkeys](https://github.com/olehmisar/noir_webauthn) - Verification of WebAuthn/Passkeys signatures; verifies signatures produced by `credentials.get` 325 | 326 | #### Merkle Trees 327 | 328 | - [ZK-Kit: Merkle Trees](https://github.com/privacy-scaling-explorations/zk-kit.noir/tree/main/packages/merkle-trees) - verification of (non-)membership proofs and add/update/delete leaves 329 | - [Indexed Merkle Tree](https://github.com/numtel/indexed-merkle-noir) - Generate and verify proofs of inclusion, exclusion, or insert transition, includes complementary NPM package 330 | 331 | #### Message Authentication Code 332 | 333 | - [Noir HMAC](https://github.com/zkpersona/noir-hmac) - hash-based message authentication code 334 | 335 | #### Randomness 336 | 337 | - [Cryptographically Secure Pseudo-Random Number Generator](https://github.com/doctoruber/CSPRNG) - pseudo-random number generation 338 | 339 | ### Blockchain Specifics 340 | 341 | #### Aztec 342 | 343 | - [Aztec Storage proofs](https://github.com/nemi-fi/aztec_storage_proofs) - proving Aztec note inclusion in plain Noir, with verification in JavaScript or Solidity 344 | 345 | #### Ethereum 346 | 347 | - [ECrecover](https://github.com/colinnielsen/ecrecover-noir) - ECDSA signature verification and return of source Ethereum address 348 | - [Ethereum Storage Proof](https://github.com/olehmisar/vlayer-monorepo) - proving and verifying historical Ethereum / EVM accounts, storage, logs, receipts & transactions 349 | - [Ethereum MPT Proof](https://github.com/RadNi/mpt-noir) - proving Ethereum Merkle Patricia Trie with recursive proof aggregations 350 | 351 | #### Bitcoin 352 | 353 | - [op_rand](https://github.com/distributed-lab/op_rand) - VRF on Bitcoin. Proves the correctness of all the actions using Noir circuits with Barretenberg backend 354 | - [bitcoin-prover](https://github.com/distributed-lab/bitcoin-prover) - proving the validity of the Bitcoin block header chain and the possibility of using the corresponding output as the input of a transaction. 355 | 356 | ### Social 357 | 358 | - [Noir Social Verify](https://github.com/Envoy-VC/noir_social_verify) - zkEmail based proof of GitHub, Google, LinkedIn and X accounts and account details 359 | - [Noir Semaphore](https://github.com/distributed-lab/noir-semaphore) - Semaphore Protocol adapted to use Noir. 360 | 361 | ### Machine Learning 362 | 363 | - [Convolution](https://github.com/storswiftlabs/convolution) - Convolutional Neural Network (CNN) library, including Convolutional layers, Pooling layers, and Linear (fully connected) layers 364 | - [ML](https://github.com/metavind/noir-ml) - neural networks 365 | - [SKProof](https://github.com/0x3327/skproof) - Scikit-learn compatible Python library for generating ZK proofs of execution 366 | - [zkML-Noir](https://github.com/storswiftlabs/zkml-noir) - Python ML model Noir transcoding, including various algorithms such as Decision tree, K-Means, XGBoost, FNN, CNN 367 | 368 | ## Developer Tools 369 | 370 | ### Package Management 371 | 372 | #### Library Registry 373 | 374 | - [Noir Libs](https://noir-libs.org/) by Walnut 375 | 376 | #### CLI Manager 377 | 378 | - [noir-libs](https://github.com/walnuthq/noir-libs) by Walnut 379 | - [noirupi](https://github.com/michaelelliot/noirupi) - Interactive noirup and bbup. Update noir and bb interactively using `noirupi` and `bbupi` 380 | 381 | ### IDE 382 | 383 | - [Noir Playground](https://www.noir-playground.app/) - A browser-based Noir zero-knowledge proof development environment. ([Source Code](https://github.com/0xandee/noir-playground)) 384 | - [VS Code Extension](https://marketplace.visualstudio.com/items?itemName=noir-lang.vscode-noir) - Syntax highlight, error highlight, codelens, etc. ([Source Code](https://github.com/noir-lang/vscode-noir)) 385 | - [Neovim Plugin](https://github.com/noir-lang/noir-nvim) - Syntax highlight, error highlight, etc. 386 | - [Emacs Plugin](https://melpa.org/#/noir-mode) - Syntax highlight ([Source Code](https://github.com/hhamud/noir-mode)) 387 | - [Zed Plugin](https://github.com/shuklaayush/zed-noir) - Syntax highlight, LSP support 388 | - [tree_sitter_noir](https://github.com/tsujp/tree_sitter_noir) - Tree-sitter grammar for Noir 389 | - [Emacs Tree-sitter Plugin](https://melpa.org/#/noir-ts-mode) - Syntax highlight ([Source Code](https://github.com/hhamud/noir-ts-mode)) 390 | 391 | ### Linting 392 | 393 | - [Noir Static Analyzer](https://github.com/walnuthq/noir-static-analyzer) by Walnut 394 | 395 | ### Debugging 396 | 397 | - [CodeTracer](https://github.com/metacraft-labs/codetracer) - A visual time-travelling debugger for Linux and MacOS with support for Noir 398 | 399 | ### Performance 400 | 401 | - [Noir + Barretenberg Profiler](https://github.com/noir-lang/noir/tree/master/tooling/profiler) - Opcode, execution and proving costs flamegraphing tool 402 | - [noir-web](https://github.com/gnosisguild/noir-web) – benchmark proving and verification of Noir programs on the browser 403 | 404 | ### Cross-platform 405 | 406 | #### Browser development 407 | 408 | - [NoirJS](https://noir-lang.org/docs/tutorials/noirjs_app) - compile and execute Noir programs in JavaScript / TypeScript 409 | - [Noir Codegen for TypeScript](https://noir-lang.org/docs/reference/noir_codegen) - generate TypeScript bindings for computing Noir program outputs in TS 410 | 411 | #### Mobile development 412 | 413 | - [MoPro](https://github.com/zkmopro) by PSE - prove and verify Noir programs on mobile (Android and iOS) 414 | - [Noir.rs](https://github.com/zkpassport/noir_rs) by ZKPassport - prove and verify Noir programs with Rust 415 | - [Swoir](https://github.com/Swoir/swoir) by ZKPassport - prove and verify Noir programs with Swift on iOS and MacOS 416 | - [Noir Android](https://github.com/madztheo/noir_android) by ZKPassport - prove and verify Noir programs with Kotlin on Android 417 | 418 | ### EVM 419 | 420 | - [hardhat-noir](https://www.npmjs.com/package/hardhat-noir) - Hardhat plugin ([Source Code](https://github.com/olehmisar/hardhat-noir)) 421 | - [foundry-noir-helper](https://github.com/0xnonso/foundry-noir-helper) - helper library for working with Noir circuits within Foundry. 422 | 423 | ### Private shared states 424 | 425 | - [coSNARKs](https://github.com/TaceoLabs/co-snarks) - generate witness and prove Noir programs in a Multi-Party Computation network 426 | - [Kalypso](https://docs.marlin.org/user-guides/kalypso/tutorials/noir-circuits/) - generate witness and prove Noir programs in Trusted Execution Environments 427 | 428 | ### Library-related 429 | 430 | - [Merkle Tree Generator](https://github.com/eyalron33/mpz/) - generate Noir-library-friendly Pedersen based Merkle trees 431 | - [Safecat](https://neimanslab.org/2024-02-19/safecat.html) - generate Noir-library-friendly EdDSA Baby Jubjub Elliptic Curve signatures 432 | - [Poseidon2 in TypeScript](https://github.com/zkpassport/poseidon2) - a Poseidon2 library in pure TypeScript with support for the implementation used by Noir (over BN254) 433 | 434 | ### Security 435 | 436 | - [rocq-of-noir](https://github.com/formal-land/rocq-of-noir) - formal verification of Noir programs with Rocq 437 | - [lampe](https://github.com/reilabs/lampe) - formal verification of Noir programs with Lean 438 | - [hunter](https://github.com/nfurfaro/hunter) - mutation-testing of Noir programs 439 | - [Circuzz fuzzer](https://github.com/Rigorous-Software-Engineering/circuzz) - fuzzer for finding soundness and completeness issues in the Noir infrastructure (by Consensys Diligence and TU Vienna) 440 | - [noir-metrics](https://github.com/mutorium/noir-metrics) - source code metrics for Noir programs, with JSON output designed for audits, tooling, and mutation testing 441 | 442 | ### Proving Backends 443 | 444 | - [Barretenberg (UltraHonk / MegaHonk)](https://github.com/AztecProtocol/barretenberg) by Aztec Labs 445 | - [coSNARKs](https://github.com/TaceoLabs/co-snarks) by Taceo Labs 446 | - [Edge (Supernova)](https://github.com/pluto/edge) by Pluto 447 | - [Plonky2](https://github.com/blocksense-network/noir) by Blocksense 448 | - [ProveKit (Recursive Groth16)](https://github.com/worldfnd/ProveKit) by World 449 | - [Sonobe (Nova, HyperNova)](https://github.com/privacy-scaling-explorations/sonobe) by 0xPARC and PSE 450 | - [Gnark](https://github.com/lambdaclass/noir_backend_using_gnark) by Lambdaclass (needs updating) 451 | - [Groth16](https://github.com/TomAFrench/acvm-backend-groth16) (needs updating) 452 | - [Halo2](https://github.com/Ethan-000/halo2_backend) by Ethan (needs updating) 453 | - [Marlin](https://github.com/noir-lang/marlin_arkworks_backend) (needs updating) 454 | - [Plonky2](https://github.com/eryxcoop/acvm-backend-plonky2) by Eryx (needs updating) 455 | - [Plonky3](https://github.com/vacekj/air-fried-gyatt) by Josef (needs updating) 456 | 457 | ## Contribute 458 | 459 | Propose link additions by [editing the README.md](https://github.com/noir-lang/awesome-noir/edit/main/README.md). We welcome and appreciate your contributions — thank you for helping improve this list! 460 | 461 | ## License 462 | 463 | [![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/) 464 | --------------------------------------------------------------------------------