Skip to main content
info

To protect end users and ensure your zkApps are secure, consider the information at Security and zkApps while architecting your solution and consider a third-party security audit before deploying to Mina mainnet.

zkApp Development Frameworks

Developers building zkApps in the Mina ecosystem can leverage two different frameworks, each tailored to optimize different types of solutions. Explore the options below to find the perfect fit for your project.

If you are unsure about any of the information presented here and need guidance on choosing the most suitable framework for you, drop by Discord and let us help!

o1js

o1js is the framework for building zkApps on the Mina L1 and new infrastructure such as rollups.
o1js is TypeScript based for ease of use, comes with a host of built-in features, is extensible to suit various use cases, and takes full advantage of the unique aspects of the Mina protocol.

o1js is also the zkDSL used for:

  • Writing general-purpose zk circuits.
  • Constructing new primitives and data structures.

There are some key considerations when choosing to build a zkApp with o1js on Mina L1:

  • zkApps are subject to protocol throughput limitations.
  • At present, zkApps that require support for multiple concurrent users require specific architecture to avoid race conditions:
    • Where more than the eight on-chain field elements are required to manage state, and access to that state is not shared between users, the experimental Offchain Storage API offers a solution.
    • Where concurrent access to shared global state is required, the required architecture is available out of the box when using the Protokit framework to build your zkApp as an zkApp-chain (L2). There is currently no easy-to-use equivalent for shared state in o1js L1 contracts.

Start here:

Protokit

Protokit is a powerful framework designed to build ZK appchains and smart contracts that are user-facing, privacy-preserving, interoperable.
It offers a familiar developer experience similar to Solidity dApps, making it easier and intuitive for developers to leverage ZK in their blockchain solutions.

It provides a full set of tools necessary for:

  • zkApps that require high throughput or multiple concurrent users.
  • zkApps that require shared or global state access.
  • Developers familiar with execution environments such as EVM.
  • Developers who wish to leverage the modular architecture of Protokit.

Start here:

Framework comparison

o1js SmartContractProtokit
Production readinessv1.0 released, internal audit complete, 3rd party audit in progress.Beta release, internal audit in progress, 3rd party audit not started. Testnet only.
Censorship resistanceDecentralized and censorship resistant.Censorship resistance via hybrid sequencing model.
Support for multi-user appsMany multi-user use cases require sophisticated architecture and are limited by L1 throughput.Capable of handling higher throughput and multiple concurrent users, thanks to Protokit's modular sequencer.
Execution environmentProving off-chain, verification on-chain, transaction ordering possible on-chain.Hybrid execution model, both on-chain (sequencer) and off-chain thanks to recursive zk-proofs, verification on-chain (MINA L1).
DXNew programming model, distinct from traditional web3.0 development.Module oriented app-chain development, similiar to Substrate Pallets, Cosmos SDK Modules or EVM smart contracts.
ComposabilityFully composable. Contracts can call other contracts directly within a single transaction.Protokit supports bi-directional L2 L1 messaging out of the box.