Skip to main content
Version: 3.9.0

Frequently Asked Questions

ICICLE is a cryptography library designed to accelerate algorithms and protocols—starting with Zero-knowledge proofs—across diverse compute backends, including CPUs, GPUs, Apple Silicon, ZPU™ and more.
It significantly accelerates core cryptographic operations like MSM, NTT, modular multiplication, and hashing on any backend.

ICICLE is partially open-source:

  • The core CUDA backend is source available under Ingonyama’s custom ICICLE-SA license.
  • The frontend and language bindings (Rust & Go) are open-source under the MIT license.
  • Full backend license details: ICICLE Licensing.

ICICLE supports a wide range of field, curve, vector, polynomial, MSM, NTT, FRI, and hashing operations across native, extension, and RNS fields. Learn more here.

ICICLE is designed to integrate with virtually any prover. We've already integrated it into Gnark, Halo2 and also provide a native Groth16 prover in our icicle-snark repository.

For the CPU backend, any 64-bit CPU is fully supported. We've also successfully tested ICICLE on 32-bit CPUs, such as those found on Raspberry Pi, though with limited performance.

For the CUDA backend, ICICLE runs on any NVIDIA GPU from the RTX 2060 and newer. We currently build for compute capabilities 7.5, 8.0, 8.6, and 8.9. For more details on GPU compatibility, see this reference.

Metal (Apple GPUs) is partially supported but still experimental. Vulkan support is in progress and will expand compatibility in the future.
The core library is written in CUDA C++. Bindings exist for Rust and Go.

Yes, ICICLE supports multi-GPU configurations. Learn more here.

Check out the Benchmark Dashboard to explore real-world results.

ICICLE is used by leading projects and research teams across cryptography and infrastructure. See the full list here.

GitHub issues on the ICICLE repo are the primary support channel. Community discussions often happen in our Discord Server’s ICICLE channel.

Yes — contributions to ICICLE are welcome! You can submit pull requests or open issues on our public GitHub repository. If you're working on research or development aligned with ICICLE, consider applying to our Ingonyama Research Grant Program 2025.

MSM sizes up to 230 have been tested successfully on the 3090Ti. Note that this applies only to certain backends. For example, Metal may not yet support streaming, which could limit maximum MSM size on that backend.
Nvidia CUDA GPUs only. Some mobile/workstation GPUs (e.g. Quadro P520) may hit compilation issues that require patching CMake flags.
Likely due to LLVM optimization eliminating empty loops. Use black_box to prevent optimization during benchmarks.
Yes, but ICICLE stores precomputed omegas for multiple powers. The specific omega used depends on the NTT size.

No formal docs. But the butterfly operation is here: ntt.cuh L153.