Announcing NoirJS: Privacy-Preserving ZK Applications In Your Browser

c

Today we’re releasing NoirJS– a Javascript package for Noir developers who want to build real applications that generate zero knowledge proofs in the browser.

Web development within the Noir ecosystem has historically been, uhm, complex. Practically, that meant Noir developers couldn’t really build applications that ran in the browser. And we want people to build applications with our software!

Y u no browser

A browser is an application used to access the World Wide Web and interact with Internet applications. It turns out most people like using browsers.

Before today, Noir didn’t really let you build applications that could run in-browser. Instead, developers were forced to run applications locally in a CLI.

In simple terms, that meant Noir couldn’t actually support real applications.

But now Noir does support applications with NoirJS.

The goals of NoirJS are simple:

  • enable Noir applications to work in web browsers
  • simplify package management
  • improve DevEx from “oh God” to “oh good”

Reminder on what Noir is

Noir is a zero knowledge circuit-writing language that works with multiple crypto proving back-ends. That means the front-end (the language) remains the same but Noir can be modularized to support the latest and greatest in zero knowledge proving research.

We do this through the ACIR (abstract circuit intermediate representation). Learn more about the ACIR here.

NoirJS lets developers build around the core concept of client-side compute: the ability to harness user hardware–phones, laptops, tablets–through the browser in order to compute proofs of execution.

And client-side compute in turn allows for fully private and trustless blockchain systems.

…sound familiar??

That’s the core philosophy of Aztec–giving developers the tools to develop programs with private data and compute while remaining fully trustless.

  • Users download encrypted data
  • They decrypt and manipulate the data locally (unbeknownst to anyone else)
  • They furnish a proof of computational correctness
  • They submit the proof

In English: do blockchain things without anyone knowing! Cool, right?

And for developers’ convenience, NoirJS is packaged with Barretenberg–the same Plonkish backend used by Aztec Labs in the Aztec rollup. No need to go shopping for a proving system unless you like, really want to.

Quality of Life Improvements

NoirJS does a lot of other things, too! Developers were previously burdened by the need to manage multiple components like `bb.js`, `acvm`, `noirc_abi`, and future components like `noir_wasm`.

But managing component libraries and balancing version compatibility is not our idea of fun.

To install NoirJS you simply run `npm i @noir-lang/noir_js` in your Javascript directory

Install your proving backend of choice (ahem, probably Barretenberg), and you’re good to go. 

NoirJS handles all Noir dependencies, exposing them through one clean interface, allowing you to focus on building rather than fiddling with packages. 

Here are some other advantages:

Immediate Access: Browser-based applications don’t require additional software, making it easier for developers to reach a wider audience.

Improved User Experience: By enabling Noir functionality in the browser, users can interact with applications in real-time. That means fast apps.

Enhanced Security: Operating in the browser allows for client-side cryptography, offering an additional layer of security for applications that require cryptographic proofs.

Developer Flexibility: NoirJS enables developers to build rich, client-side applications with cryptographic functions, providing a broader toolkit for web development.

Community Building: Browser-based Noir enables rapid prototyping and sharing among the developer community. This is especially useful for teams who focus on in-browser applications and use-cases.

In-Browser Tooling: NoirJS fits seamlessly with in-browser IDEs like VSCode for web, allowing for a streamlined development process in which Noir programs can be compiled and proven directly in the browser.

So to summarize, by bringing Noir to the browser, we’re:

  • simplifying development
  • expanding the scope and capabilities of what can be built with Noir

Siiick.

Use-Cases and Applications

Less development pain means more time for building new applications. Here are some use-cases we’re excited to see:

  • Pseudonymous identity web apps: Projects like Noxx are focused on building pseudonymous identity web apps.
  • In-browser ZK games: Tonk.gg’s NES emulator Dappicom can now incorporate Noir functionalities seamlessly.
  • Proof of solvency: prove solvency or liquidity without exposing the underlying assets or trades
  • On-chain poker: play poker with its hidden card dynamics without a trusted third party
  • zkEmail: decentralized e-mail with no trusted servers

Conclusion

NoirJS lets you build real Noir applications that run in the browser. It also makes your life easy breezy beautiful CoverGirl.

If you don’t know what Noir is, read this announcement, scan these docs, and watch this video.

If you do know what Noir is, install NoirJS right now. Right now. Right now.

And if you end up building something cool, come ask us for money.