Mopro (Mobile Prover) is a toolkit for ZK app development on mobile. Mopro makes client-side proving on mobile simple.
π To learn more about mopro, please refer to the documentation at zkmopro.
This repository contains the following components:
| Package | Version | Description |
|---|---|---|
| mopro-ffi |
|
Uses UniFFI to generate bindings for ZK provers (currently: Circom, Halo2, and Noir). It includes build scripts that eliminate the need for manual setup when integrating with iOS and Android. |
| mopro-cli |
|
A command-line tool that makes it easy to scaffold ZK projects using selected proving systems and target platforms. Currently supports: Swift (Xcode), Kotlin (Android Studio), React Native, Flutter and Web. |
| circom-prover |
|
A Rust-based Groth16 prover for Circom. It supports multiple witness generators (rust-witness, witnesscalc, and circom-witnesscalc) and provers (arkworks, rapidsnark). It is designed to work across devices including desktop, iOS, and Android. |
| tests | End-to-end test examples for verifying integrations for mopro-ffi. | |
| docs | The source for zkmopro.org, containing up-to-date documentation. |
All tasks related to the Mopro implementation are public. You can track their progress, statuses, and additional details in the Mopro Kanban.
To get started with building a mobile app using Mopro, check out the Getting Started guide and ensure youβve installed all required prerequisites.
Clone this repository:
git clone https://github.com/zkmopro/mopro.gitRun Rustfmt to automatically format the code.
cargo fmt --allRun rust-clippy to catch common mistakes and improve your Rust code.
cargo clippy --all-targets --all-featuresTo test all witness generators and proof generators:
cd circom-prover
cargo test --all-featuresTo run with specific witness generator and/or proof generator
cd circom-prover
cargo test --features witnesscalc --features rapidsnarkImportant
To learn more about circom-prover, please visit circom-prover
To test the wasm bindings with wasm-pack test
wasm-pack test --chrome --headless -- --all-featuresImportant
To learn more about mopro-ffi, please visit mopro-ffi
To install the CLI
cd cli
cargo install --path .Important
To learn more about mopro-cli, please visit cli
-
Update bindings for iOS
cargo run --bin ios
or
mopro build # with mopro CLIand choose
iOS.
-
Update bindings for Android
cargo run --bin android
or
mopro build # with mopro CLIand choose
Android.
-
Update bindings for Flutter
cargo run --bin flutter --no-default-features --features flutter
or
mopro build # with mopro CLIand choose
flutter.
-
Update bindings for React Native
cargo run --bin react_native
or
mopro build # with mopro CLIand choose
react-native.
-
Update bindings for wasm
cargo run --bin web --no-default-features --features wasm
or
mopro build # with mopro CLIand choose
web.
- Install dependencies
yarn
- Build for the website
yarn build
- Start a server
yarn start
Both native circom witness generation and proof generation are generally faster than snarkjs in the browser, with potential speed improvements of up to 20 times.
Check the details for circom, halo2, and noir provers here: performance.
This work was initially sponsored by a joint grant from PSE and 0xPARC. It is currently incubated by PSE.
Important
We do not accept minor grammatical fixes (e.g., correcting typos, rewording sentences) unless they significantly improve clarity in technical documentation. These contributions, while appreciated, are not a priority for merging. If there is a grammatical error feel free to message the team.