Skip to main content
Prerelease

Native Prover Prerelease

2–2.5x faster proof generation and chunking for larger circuits - powered by native code execution.

0Faster
 Code Changes
 Larger Circuits
Terminal

Speed Comparison

Same task, noticeably different speed. Watch the native prover finish while WASM is still working:

Native Prover0%
WASM Prover0%
~2–2.5x faster proof generation

What is the Native Prover?

The native prover is a drop-in replacement for the default WASM-based prover in o1js. Instead of running proof generation inside a WebAssembly sandbox, it executes the prover as compiled native code on your machine - resulting in 2–2.5x faster proving and removing the 4 GB memory ceiling imposed by WASM.

Your circuit code stays exactly the same. No rewrites, no new APIs - just install the prerelease package. Larger circuits that previously hit the WASM memory wall can now run to completion.

2–2.5x faster proof generation
No changes to your circuit code required
No 4 GB memory cap - run larger circuits that WASM can't handle

Chunking: Build Larger Circuits

Without the 4 GB WASM memory ceiling, the native prover unlocks chunking - a technique that splits a circuit's polynomials into smaller segments, each fitting within the proof system's domain size. The chunks are proved individually and recombined during verification.

This raises the circuit size limit from 216 to 218 rows, enabling significantly more complex programs, deeper recursion, and richer application logic - all without workarounds.

Large Circuit
220 rows
split
Chunks
f₀
f₁
f₂
f₃
216 rows each
prove
Result
Proof

Installation

This is an early prerelease - not yet production-ready. We're actively looking for feedback and bug reports to shape the stable release.

First, install the prerelease version of o1js:

npm install o1js@2.10.0-dev.be63f

Then, to use the native backend, install the native package:

npm install @o1js/native@0.0.1-dev.be63f

Supported architectures:

🍎
macOSApple Silicon & Intel
🐧
Linuxx64 & arm64
+
Request architectureOpen a GitHub issue

Usage

Call setBackend before any other o1js import or usage - this switches the proving engine to the native backend. The rest of your code stays the same:

import { setBackend } from 'o1js';

// Must be called first, before any other o1js usage
setBackend('native');

After that, your existing circuit code works as-is:

import { Field, ZkProgram } from 'o1js';

const MyProgram = ZkProgram({
name: 'my-program',
methods: {
compute: {
privateInputs: [Field],
async method(x: Field) {
x.mul(x).assertEquals(Field(25));
},
},
},
});

// Compile & prove - same API, 2–2.5x faster
await MyProgram.compile();
const { proof } = await MyProgram.compute(Field(5));

// Verify
const isValid = await MyProgram.verify(proof);
console.log('Proof valid:', isValid);

Report Issues

Found a bug or unexpected behaviour? We'd love to hear about it. When filing an issue, please include:

  • The o1js version you installed (npm ls o1js)
  • Your operating system and architecture
  • A minimal code snippet that reproduces the problem
  • The full error message or stack trace, if any
Open an issue on GitHub

Ready to try faster proving?