Native Prover Prerelease
2–2.5x faster proof generation and chunking for larger circuits - powered by native code execution.
Speed Comparison
Same task, noticeably different speed. Watch the native prover finish while WASM is still working:
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.
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.
Installation
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:
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
