
Mina is the world’s lightest ZK blockchain. It enables everything from KYC verification to onchain gaming scaling by leveraging zk tech to create a private, provable web.
👀 My [my previous article](https://hackmd.io/@4ni4/exploring_mina_eco) covered Mina’s basics, zkApps, and how to contribute to the ecosystem.
In this article, we’ll explore Mina’s tooling and its potential to change the world and build the next generation of zk applications.
**Mina’s Tooling: Kimchi + Pickles, O1js and Protokit**
---
* [Kimchi](https://o1-labs.github.io/proof-systems/specs/kimchi.html) - modular, general-purpose, PLONK-inspired zk-proof system
* [Pickles](https://o1-labs.github.io/proof-systems/specs/pickles.html) - It is a recursive framework for building general-purpose zk-proofs. Kimchi, and Pickles improve Mina's proof system by enabling more efficient zk-proof constructions.
* [O1js](https://github.com/o1-labs/o1js) - A TypeScript library for zk-SNARKs and zkApps. It requires no deep cryptographic knowledge for successful experimentation.
* [Protokit](https://github.com/proto-kit): A modular framework for building privacy-enhanced application chains on Mina with minimal learning curve.
**Understanding Kimchi proofs**
---

Kimchi is a PLONKish zk-proof system. It doesn't require a trusted setup.
There are three main algorithms to kimchi:
1. [Setup](https://o1-labs.github.io/proof-systems/specs/kimchi.html#setup): takes a circuit and produces a prover index and verifier index
1. [Proof creation](https://o1-labs.github.io/proof-systems/specs/kimchi.html#proof-creation): uses the prover index and circuit execution trace to produce a proof
1. [Proof verification](https://o1-labs.github.io/proof-systems/specs/kimchi.html#proof-verification): uses the verifier index and proof to verify
These algorithms create tables (later converted to polynomials) to generate proofs, enabling:
**Scalability**: Efficiently proving and verifying zk-SNARKs
**Flexibility**: Supporting zkApps developers
**Pickles & Inductive Proof Systems**
---

Pickles complements Kimchi as a recursive composition framework for general-purpose zk-proofs.
It enables flexible construction and combination of zk-SNARK proofs for verifiable computation.
Pickles uses a pair of amicable curves called [Pasta](https://o1-labs.github.io/proof-systems/specs/pasta.html).
In Mina’s source code, these curves are known as “tick” and “tock”:
* Tick — Vesta (a.k.a. Step), constraint domain size 218 (block and transaction proofs)
* Tock — Pallas (a.k.a. Wrap), constraint domain size 217 (signatures)
The Tock prover performs fewer operations (only recursive verifications), requiring fewer constraints and a smaller domain size. Internally, Pickles refers to Tick and Tock as Step and Wrap.
Tock proves Tick proof verification and outputs a Tick proof, while Tick proves Tock proof verification and outputs a Tock proof. Specifically:
* Provetock(Verify(Tick))=Tickproof
* Provetick(Verify(Tock))=Tockproof
Both Tick and Tock can verify up to 2 proofs of the opposite kind, though theoretically more is possible.
Currently in Mina:
* Every Tock wraps 1 Tick proof
* Tick proofs can verify 2 Tock proofs
* Blockchain SNARK takes previous blockchain SNARK proof and transaction proof
* Verifying two Tock transaction proofs
Key Features of Pickles:
---
* **Recursive Proofs**: Allow for the nesting of proofs, reducing computational overhead
* **Enhanced Privacy**: Supports complex applications without compromising data security
**Kimchi proofs and Pickles recursion in action:**
---
[zkDatabase](https://www.zkdatabase.org/) - private offchain storage for zkApps. [Verifiable](https://orochi.network/blog/Strategic-Partnership-Announcement-Orochi-Network-and-Mina-Foundation) DB for Enterprise, AI/ML, FinTech, IoT, and Healthcare.
[BioSNARKS](https://snarky.bio/) - recursive zk-proofs for biotech. Helping drug and biotech development, by allowing participants to interact with validated data, IP, protocols, and targets without revealing sensitive information.
**O1js SDK for building zkApps, v2.0 release**
---
It’s a TypeScript framework for creating zk-SNARKs and zkApps, enabling developers to write zero-knowledge smart contracts for the Mina Protocol.
The new o1js v2.0 introduces several powerful features:
**Improved DevX, Custom Token Balance Validation, ECDSA, and Foreign Curve Improvements.**
**Auxiliary Output Support for ZkProgram**: This feature allows developers to use auxiliary output as additional data points in circuits. Unlike public output — which verifiers need to check proofs — auxiliary output serves as optional data for further computations. This improvement makes it easier to build large, complex, and modular applications using zkProgram.
**BLAKE2B Hashing Support**: o1js v2.0 now supports the BLAKE2B cryptographic hash function, alongside SHA256, Keccak, and Poseidon. This versatile hashing option expands o1js’s cryptographic capabilities, enabling more diverse applications.
Upgrading to the latest version is straightforward since most APIs remain unchanged — simply run:
```
npm i o1js
```
and continue building your application.
While o1js v2.0 offers enhanced security and features, please note that upgrading will ***break the constraints of your application***. If you’ve deployed applications to Mina mainnet or devnet, they won’t be compatible with o1js 2.0 — you’ll need to redeploy them after upgrading.
The team plans to support o1js v1.0 until Mina Protocol’s next hard fork, providing essential maintenance and security patches. After that, development will focus on o1js v2.0 and future versions.
Community Packages
---
* o1js-elgamal A partially homomorphic encryption library for o1js based on Elgamal encryption: [GitHub](https://github.com/Trivo25/o1js-elgamal) and [npm](https://www.npmjs.com/package/o1js-elgamal)
* o1js-pack A library for o1js that allows a zkApp developer to pack extra data into a single Field. [Github](https://github.com/45930/o1js-pack) and [npm](https://www.npmjs.com/package/o1js-pack)
* zk-regex-o1js A CLI tool for compiling ZK Regex circuits in o1js. [Github](https://github.com/Shigoto-dev19/zk-regex-o1js) and [npm](https://www.npmjs.com/package/zk-regex-o1js)
* To submit your package, see [Creating community packages](https://github.com/o1-labs/o1js/blob/main/CONTRIBUTING.md).
**o1js ZK Regex**
---
[ZK Regex](https://github.com/Shigoto-dev19/zk-regex-o1js) is a breakthrough in zk-proof technology that enables text data verification within a ZKP framework.
Developers can use ZK Regex to verify text patterns securely while maintaining data privacy, enabling applications like secure messaging and confidential document validation.
While traditional zk-proofs verify field elements within circuits, ZK Regex extends this to validate string data or bytes against specified expressions.
Originally created for [zk-email-verify](https://github.com/zkemail/zk-email-verify), this innovation now enables private text verification across various blockchain applications.
Using ZK Regex, developers can verify specific text patterns while preserving privacy, enabling secure messaging, confidential document validation, and more.
**How to Install the CLI**
```
npm install -g zk-regex-o1js
```
**How to Confirm Successful Installation:**
```
zk-regex --version
```
**or**
```
zkr --version
```
Support for JSON Web Token (JWT) Verification in o1js
---
[JWT](https://jwt.io/) — JSON Web Tokens are an open, industry-standard [RFC 7519](https://tools.ietf.org/html/rfc7519) method for representing claims securely between two parties.
Platforms that use JWTs include Apple, Facebook, and Google through OAuth/OpenID.
This verification enables seamless integration between Web2 platforms and trustless systems using existing logins.
O1js Resources:
---
For a list of changes, see the [CHANGELOG](https://github.com/o1-labs/o1js/blob/main/CHANGELOG.md).
To learn more about developing zkApps, see the zkApp Developers [docs](https://docs.minaprotocol.com/zkapps).
For guided steps building and using zkApps, see the [zkApp Developers Tutorials](https://docs.minaprotocol.com/zkapps/tutorials/hello-world).
To meet other developers building zkApps with o1js, participate in the #zkapps-developers channel on Mina Protocol [Discord](https://discord.gg/W5nKjE5z).
For guidance on building o1js from source and understanding the development workflow, see o1js [README-dev](https://github.com/o1-labs/o1js/blob/main/README-dev.md) and O(1) Labs [Blog](https://www.o1labs.org/blog?topics=o1js).
Exploration Team: Build in Public
---
The Exploration Team focuses on supporting zkApp developers using o1js. They’ve created example zkApps like [Mastermind](https://github.com/o1-labs-XT/mastermind-zkApp) and [Name Service](https://github.com/o1-labs-XT/name-service-example) while actively fixing bugs in o1js.
Join the discussions on Mina Protocol [Discord](https://discord.gg/W5nKjE5z) in #zkapps-developers and #zkapps-questions, or tag the Exploration Team `(@o1-labs/exploration-team)` on [github](https://github.com/o1-labs/o1js).
Contributing:
---
o1js is an open-source project built on community contributions. Feel free to explore ways to contribute to make it even better. [Contributing guidelines](https://github.com/o1-labs/o1js/blob/main/CONTRIBUTING.md).
Protokit: Protocol Development Framework for Privacy-Enabled Application Chains
---
Enabling developers to build privacy-preserving applications using zk proofs with a minimal learning curve.
[Protokit](https://protokit.dev/) is compatible with the Mina blockchain by design — and can use the Mina L1 for settlement, leveraging the shared security of the Layer-1 consensus.
All code written with Protokit is provable, generating zk-proofs from transaction execution and block production that can be verified by the L1 (or anyone).
```
npx degit proto-kit/starter-kit#develop my-chain
```
* [Docs](https://protokit.dev/docs/what-is-protokit)
* [Starter kit](https://github.com/proto-kit/starter-kit)
* [Live code](https://stackblitz.com/github/proto-kit/starter-kit?file=README.md&startScript=test)
Protokit Highlights:
---
* **Supercharged DevX** — Protokit chains are built using O1JS, Mina’s zero-knowledge DSL for writing provable code. This enables you to leverage the wide variety of existing tools in the JavaScript/TypeScript ecosystem.
* **Modular** — Combine existing runtime, protocol, or sequencer modules to create a complete application chain.
* **Succinct zkVM** — Chains built with Protokit run on top of our modular zkVM, powered by recursive zk circuits that generate a unique block proof for each block. This enables efficient block production with concise proofs that can be verified inexpensively.
* **Interoperable** — Integrate your app-chain with existing app-chains, L2s, and rollups to maintain ecosystem liquidity.
* **Wallet Integration** — Protokit’s transaction format is MINA-native, supporting most existing ecosystem wallets built on the mina-signer.
**And for Dessert: Kimchi Bytes**
---
A web3 take on the infamous, iconic, and spicy🌶️ Hot Ones🔥 with host Will Cove, Head of Ecosystem at Mina Foundation.
🌶️ lore drop with ex-scientist Boris from [Aligned Layer](https://alignedlayer.com/)
<iframe width="680" height="382" src="https://www.youtube.com/embed/pydYSYNCiNk" title="Kimchi Bytes | Episode 3 | Boris Dyakov" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
🌶️ with Raphael co-founder of [Protokit](https://protokit.dev/): the story behind Protokit
<iframe width="680" height="382" src="https://www.youtube.com/embed/rs4JJ5WI81M" title="Kimchi Bytes | Episode 2 | Raphael Panic" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>