Bringing Zero-Knowledge Proofs to Mobile: EZKL goes Mobile
Smartphones have become the dominant computing platform for everyday tasks. They’re no longer just devices for browsing or messaging—they’ve evolved into secure, portable vaults for personal data, equipped with NFC readers, biometric authentication, and processing power rivaling traditional desktops. These features make them ideal for deploying privacy-preserving computations using Zero-Knowledge Proofs.
Until now, the mobile ecosystem has struggled to integrate ZKPs efficiently, often relying on constrained browser environments, clunky integrations, or off-device computation.
With the EZKL iOS Package, we change that. By integrating EZKL’s ZKP toolstack directly into native iOS apps, developers gain an intuitive and flexible way to run proofs locally. No more worrying about limited native API access, loading times for heavy circuit files, or error-prone browser execution. Instead, you can tap into advanced use cases—fully private on-device identity verification, confidential scoring, and beyond—right where users live: on their phones.
The Challenge: Bringing ZKPs into Users’ Daily Lives
Zero-knowledge proofs promise strong privacy guarantees, yet their use has largely been confined to powerful servers aggragating L2 transactions or relatively constrained browser demos. Meanwhile, smartphones are how most people interact with the digital world, from everyday communication to secure payments. To embed ZKPs into daily life, we must meet users where they are: on their phones.
Mobile browsers present a tempting shortcut for deployment, but their limitations quickly surface. Strict memory caps, restricted access to device features, and fragile environments make it impractical to run complex ZKP circuits.
In contrast by integrating ZKP directly into native mobile apps:
- One can access unique device capabilities, such as NFC and biometric authentication, as well as a miriad of other sensors.
- Run larger proofs with fewer memory constraints and better stability, as well as leverage GPU acceleration, and background execution for intensive tasks.
- Instill greater user trust, as apps feel more private and secure than web pages.
These advantages translate into smoother and unique experiences — like reading an NFC passport chip on-device, verifying a user’s identity, and then proving identity attributes to anyone without sensitive data ever leaving the phone.
Previous Work on Native Apps
Bringing ZKPs to mobile devices is not entirely a new idea. Earlier attempts, often based on Groth16 due to its efficient provers, laid some groundwork. For example, RapidSnark offered an iOS deployment option as early as 2022. However, these approaches typically were a hacky solution — developers faced complex build processes and inflexible circuits, making it difficult to evolve or update their applications over time.
In 2023, the Mopro project by PSE emerged, aiming to streamline mobile proof generation and cryptography more broadly. While Mopro improved the developer experience compared to previous attempts, it still required working with a separate Rust project and maintaining some ZKP expertise. This added friction and narrowed the pool of developers who could confidently build privacy-preserving mobile apps.
Moreover, modern mobile use cases frequently involve machine learning models — consider KYC checks that require biometric face matching, liveness detection, and continuous updates to counter spoofing. With Groth16 or similar systems, updating even a single layer of a neural network or swapping out a model could demand a new trusted setup. This overhead is unsustainable in fast-paced environments and further constrains developer talent, as both ZKP and ML expertise become prerequisites.
Introducing the EZKL iOS Package
These challenges motivated us to bring EZKL’s ML-focused, Halo2-powered stack natively to iOS. Halo2’s universal and updatable CRS eliminates the need for repeated trusted ceremonies, allowing teams to adapt their circuits and models seamlessly. By integrating EZKL directly into the iOS ecosystem, we offer a scalable, production-ready environment that doesn’t require deep Rust knowledge or specialized ZKP expertise, making zero-knowledge on mobile simpler and more accessible than ever.
The EZKL iOS Package, a Swift Package Manager integration of the enables to use all of the EZKL functionality from your iOS application without any need for extra configuration.
The EZKL iOS Package, a Swift Package Manager integration of the EZKL library, enables the full EZKL toolstack directly within your iOS application—without extra configuration. It offers:
On-Device ZKP API: Swift APIs make it straightforward to generate witnesses, proofs, and verifications directly on iOS.
Seamless Integration with EZKL CLI: Preprocess your ONNX models and circuits using the EZKL CLI, then bundle these assets into your Xcode project.
Hot-Loading Circuits: Quickly update circuits, SRS files, proving keys, or verification keys without recompiling the entire app.
Developer-Friendly: Leverage Swift and SPM to integrate proof logic directly into app code, making iteration and experimentation easier.
In practice, developing a ZKP-powered iOS app simply involves using the EZKL CLI to prepare the required files, then loading and running them locally with the EZKL iOS Package.
importEzklPackage// Assuming compiledCircuitData, inputData, pkData, vkData, and srsData are loadedimportEzklPackage// Assuming compiledCircuitData, inputData, pkData, vkData, srsData, and settingsJson are loaded from app resourceslet witnessData = try genWitness(compiledCircuit: compiledCircuitData, input: inputData)
let proofData = try prove(witness: witnessData, pk: pkData, compiledCircuit: compiledCircuitData, srs: srsData)
let isValid = try verify(proof: proofData, vk: vkData, settings: settingsJson, srs: srsData)
XCTAssertTrue(isValid, "Proof should verify successfully")
EZKL in Action: The CryptoIdol iOS App
To showcase what’s possible, we ported the CryptoIdol experience to iOS via React Native and the EZKL iOS Package.
CryptoIdol lets users:
Record Their Singing: Capture audio directly on the device.
Run On-Device Scoring: A locally embedded ML model evaluates singing quality without sending data elsewhere.
Generate a ZK Proof: The EZKL package proves the authenticity of your score.
Mint a Unique NFT: Mint an NFT based on your verified performance.
Check it out and try it locally while we work on making it available in the App Store.
)
Under the Hood: React Native + Swift
EZKL Swift Integration: The EZKL Swift package is added directly to the Xcode project.
Bridging to JavaScript: EZKL Swift functions are exposed to React Native using a bridging module, allowing the JavaScript layer to easily request proofs.
Dynamic Key Generation: Proving and verification keys can be generated at runtime or bundled in advance.
Recommended Device: Due to heavy resource usage, an iPhone 15 Pro or newer is suggested. The app’s memory demands can exceed 2GB, making recent devices more suitable.
Future Directions
We are actively researching performance optimizations, including leveraging Apple Metal GPU library to further accelerate proof generation on mobile as well as on laptops. As these optimizations roll out, you can expect shorter proving times and support for more complex workloads—enabling richer applications in identity verification, private credit scoring, gaming, and beyond.
Local Proofs vs. Remote Computation
For some tasks, outsourcing proving to a server might be efficient, especially if the input is public or privacy isn’t a main concern. Solutions like Lilith fit well here. This can be potentially paired with proof splitting, which can provide an option to seperate the privacy preserving and non-privacy preserving proving parts into seperate stages and offload non-privacy preserving stages while have the phone only work on privacy preserving parts. This can also allow to run ZK Proofs on very low memory deveices, as the proofs can be split into smaller parts until they fit in.
Conclusion
With the EZKL iOS Package, integrating zero-knowledge proofs into mobile apps has never been easier. From privacy-preserving identity verification to imaginative applications like CryptoIdol, the potential of ZKPs on mobile now is purely up to your imagination.