zkFold logo

zkFold Symbolic

zkFold Symbolic book

zkFold Symbolic is a subset of Haskell compilable to arithmetic circuits. It is, therefore, a high-level functional programming language that allows developers to harness the power of zero knowledge protocols for their trustless, decentralized, and privacy-preserving applications. It aims to reduce the barrier to entry in the development of zk-enhanced applications and smart contracts.

The key design pillars of Symbolic are code efficiency and safety. It is high-level enough to abstract all mathematical nuances of zero knowledge protocols yet extremely efficient with the arithmetic circuits it produces.

Traditional performance metrics such as CPU cycles and RAM requirements do not make sense in the context of zk-programs. Instead, the performance of a compiled circuit is usually measured in the number of additions and multiplications it contains. Symbolic transpiles the code directly, avoiding the limitations and inefficiencies of a typical VM approach.

The idea of the zkFold Symbolic compiler is inspired by symbolic math software packages (e.g., Wolfram Mathematica). There, user-defined functions are polymorphic in their arguments and can accept both symbolic expressions, with the result being another symbolic expression, as well as concrete numeric values. Similarly, in zkFold Symbolic, an arithmetic circuit representation of some pure polymorphic function is constructed by applying that function to the arithmetic circuit representation of its arguments.

ZkFold Symbolic is the programming language for writing zero-knowledge smart contracts. It is a high-level functional language, a subset of Haskell. Smart contracts written in zkFold Symbolic are compiled directly into arithmetic circuits that can be utilized by various zero-knowledge protocols.


Key language features:

  • High-level language with a performance of a low-level one. A subset of Haskell with full HLS support.
  • Correct-by-construction arithmetic circuits from your code
  • Experience in zero knowledge proof protocols is not required!
  • Support for the state-of-the-art ZKP protocols
  • Easy composability with other zkFold Symbolic contracts



  • Complex on-chain smart contracts
  • Large-scale decentralized applications
  • Privacy-preserving applications
  • Verifier circuits in recursive proof protocols

zkFold UPLC Converter

Compiles Untyped Plutus Core (UPLC) scripts into arithmetic circuits and lets developers code ZK smart contracts in their language of choice. No ZKP expertise required!

  • No script length limit

    UPLC scripts have a hard limit on size as they must fit into a Cardano transaction (currently, 16 KB).

  • No CEK execution budget limit

    Forget about ExUnits! Zero knowledge smart contracts can be arbitrarily complex. Express your contract logic in a natural way. No need for hacky optimizations.

  • No redeemer size limit

    Redeemers are now private data and are not submitted on-chain. They can be arbitrarily large and only used in the off-chain code to prove transaction validity.

  • Cost-efficient for complex logic

    The complexity of your smart contract does not affect the network fees. It is based on the cost of on-chain zero knowledge proof verification and the number of inputs and outputs in the transaction.

  • Private smart contracts

    Zero knowledge smart contracts are represented on-chain by polynomial commitments that do not reveal the contract logic.