The o1js 3.0 prerelease now supports Mesa, the upcoming Mina upgrade that significantly increases what a single zkApp can do. With Mesa, zkApp developers get more on-chain state, much larger events/actions, and higher account-update limits, all while keeping the familiar o1js developer experience.
Below is a quick overview of what changed and how to deploy to Mesa.
What’s New with Mesa for zkApps?
More on-Chain state per zkApp Account
Mesa increases the zkApp account state capacity from a small handful of field elements (8) to 32 Field elements per account, that’s a 400% increase!
What this enables:
- Model richer application state directly on-chain (more config, metadata, counters, flags, etc.)
- Reduce the need for state packing or extra helper accounts
- Keep circuits and off-chain state coordination simpler, because more real state can live on-chain
Much larger events & actions
Mesa dramatically raises the limit for how much data you can emit as events or actions in a single transaction. Up to 1024 field elements per transaction is now possible.
What this enables:
- Emit richer and more structured data (e.g., full trade tails, Merkle proofs, batched updates)
- Dispatch many more actions for later reduction, all within a single transaction
- Avoid splitting a logical operation into partial transactions just to fit within the old limit
Higher account-update limits per transaction
Mesa also raises the cap on account updates per transaction, so a single zkApp transaction can touch far more accounts than before.
What this enables:
- Batch payouts or reward distributions to many accounts in one go
- Multi-party workflows (e.g., token or DeFi apps that touch multiple accounts in a single transaction)
- Cleaner UX with fewer separate transactions needed
How to deploy to Mesa with the new o1js 3.0 prerelease
- Install the Mesa-compatible o1js prerelease
npm i https://pkg.pr.new/o1-labs/o1js@e5011ff - Point your app at the Mesa GraphQL endpoint
In your o1js application, set the active Mina instance to Mesa:import { Mina } from 'o1js';Your existing deploy flow stays the same - the key change is using the Mesa GraphQL URL instead of a Berkeley one and upgrading o1js to the prerelease version.
const Mesa = Mina.Network(
‘https://plain-1-graphql.mina-mesa-network.gcp.o1test.net/graphql’
);
Mina.setActiveInstance(Mesa); - Get testnet MINA from the faucet
To pay fees on Mesa, request testnet Mina on the faucet:- Generate a Mina address (wallet or through o1js directly
- Go to https://faucet.minaprotocol.com
- Paste your public key and select the Mesa network
- Submit and wait for funds to arrive
Once funded, you can deploy your zkApp and start pushing Mesa’s new limits: bigger state, bigger batches, and much richer events and actions - all within the same o1js developer experience that you are used to!

