Roadmap for Noir Language Development (as of mid-April)

Milestones - Noir Language Development

NOTE: This is a work-in-progress and will be continuously updated as we release newer versions of Noir and re-prioritize features. This is intended to be an explanatory document for external developers interested in using Noir.

This should help describe where Noir is today, where Noir will be tomorrow, and a general idea of the expected progression of the language.


Quick intro to Noir

Noir is a domain specific language for creating and verifying proofs. Its design choices are influenced heavily by Rust.

Noir is designed for accessible and flexible development of provable programs. It abstracts away the need for developers to handcraft low-level circuits and aims at supporting different proving backends for different development needs.

Noir compiles to an intermediate language, which itself can be compiled to an arithmetic circuit or a rank-1 constraint system. This allows one to decouple the programming language completely from the backend, so Noir can support arbitrary backends.

Noir ‘off-the-shelf’ runs using Aztec’s TurboPlonk backend (although an UltraPlonk integration is imminent).


Noir Language – End of April 2023

  • Dynamic arrays
  • UltraPlonk integration (CLI)
    • Faster proving speeds
    • Comes with optimized implementations of
      • Keccak256 in 18,000 constraints
      • ECDSA verification in 36,000 constraints
    • Benchmarks for UP will come in Q2 2023

Noir Tooling – During Q2 2023

  • Noir.js
    • Embed Noir programs in browser / JavaScript environments
  • Language Server Protocol support
    • Write Noir code with in-browser VSCode
  • Linter
    • Lightning fast debugging
  • Package Registry
    • One-stop shop for all Noir package needs
    • Reference: Rust’s crates
  • Package Manager
    • Installing Noir packages as simple as nargo install package
  • Linguist support
    • Automatic syntax highlighting on GitHub
    • Requires >200 unique :user/:repo on GitHub; Write some Noir code!
  • Benchmarks for UltraPlonk

Noir Tooling – During Q3 2023

  • Debugger
    • Step through Noir programs
    • Potential blocker: Noir doesn’t currently give debug symbol info
  • Integration with 3rd party external development frameworks
    • E.g. Foundry, Hardhat
    • Request for feedback – let us know which frameworks you want! Leave comments here
  • Resource Guesstimation
    • Quick resource feedback (e.g. constraint count, proving time, memory needs)
    • In Nargo / VSCode plugin / standalone app
  • Code Visualization
    • Visualizing Noir source code and ACIR
    • Reference: Scaffold-eth, Speed Run Ethereum
  • More to come! Suggest what you would like to see!

Noir Language v1.0 – During Q3 2023

  • Main Objective: It just works!

  • Programmable Noir smart contracts with:

    • Contract scope
    • Unconstrained functions
    • Import syntax
    • Public/private variables
    • Public/private functions
    • Nested function calls
    • Sending to L1
    • Consuming from L1
    • Emit data
    • BigInt library integration
    • [Possibly] Traits
47 Likes

Update: UltraPlonk is merged in!

47 Likes

Nice! Amazing news. Are the constraints counts listed in the initial post (“Comes with optimized implementations of Keccak256 in 18,000 constraints and ECDSA verification in 36,000 constraints”) the final constraint counts of the optimized implementations?

49 Likes

A job well done to you guys.

24 Likes

Well done, WAGMI

35 Likes
  • Request for feedback – let us know which frameworks you want! Leave comments here

Unsure of whether this will be a priority since the company/codebase is not open-source, but Tenderly.co is becoming a more widely adopted piece of the EVM developer toolkit – maybe some integrations with them would lead to more attention on Noir from individual developers to companies alike, and could become a de-facto piece of infrastructure for Noir developers looking to deploy on EVM chains.

1 Like

Tenderly is pretty useful for EVM indeed. But for Noir I have questions about exactly what features would be useful to integrate… Any ideas @SanLeo ?

I believe if their code is not open-source, any work on that front would have to be done by the Tenderly team

2 Likes

Congrats to the team for UltraPlonk update!

As for 3rd party integration, it would be great to see an official guide to using Noir with Foundry. Through my experience, using Noir on Foundry is actually not so difficult but requires a bit of understanding of where the files should be placed or where Solidity files will be generated. So even having a tutorial would be super helpful for newcomers who would want to try out Noir.

3 Likes

Would love to see more documentation. For example, I want to try out string handling but have no idea where to look.

1 Like

I just published some info about strings here. There’s not a ton you can do with them yet, but they work.

1 Like

You can now install Noir that is using UltraPlonk by running

noirup -v 0.5.0

Plain noirup will still get you 0.4.1 until we mark 0.5.0 as official.

If you dont have noirup, you can install if following the instructions here.

I understand. Would probably make sense for my team to hold on until you guys make them more usable. :slight_smile:

1 Like

Dynamic arrays are merged in!

3 Likes

great work for your doing!

awesome, great work guys

Keccak merged :raised_hands:

3 Likes

IMO hardhat would be good pls!

I would really appreciate it if the if-else clauses worked. This bug has been unattended for a while now, and without it being addressed, we can’t really do much on our end:

2 Likes

This is great work. We are waiting for the final result.

You can see an example of a Noir project using hardhat here. Feel free to open issues with feedback or suggestions on that repo.

1 Like