Hello, Keelung


Keelung is a domain-specific language (DSL) that is designed for creating zero-knowledge proofs (ZKPs). With Keelung, developers can create high-quality and reliable ZKPs with ease, even without expertise in cryptography.

Since Keelung is a DSL embedded in Haskell, we can borrow tools from Haskell as much as possible. It also means writing Keelung programs is essentially writing Haskell programs, using only a subset of the general purpose programming language.

Keelung ecosystem

We sometimes use "Keelung" to refer to the DSL itself, while sometimes use it to refer to Keelung compiler, the program which compiles Keelung programs into constraints.

The definitions of the language and its basic libraries are located in a single repository, and the repository is sometimes altogether referred to as "the Keelung libraries". The source code for the compiler is located in a separate repository and is not necessary to access in order to use Keelung. As long as the compiler is installed on the system and the Haskell environment is available, the compiler can be invoked through the interface defined in the Keelung libraries. You must have access to the Keelung libraries to develop Keelung programs.

Preliminary Knowledge

We expect you to have some basic experience with command line interface and programming. We also expect you to have some basic knowledge of zkSNARK, e.g. you should know what are "circuits" in the sense of zkSNARK, what R1CS is, and why you are using Keelung.

It's okay if you not familiar with Haskell, but since Keelung programs are also Haskell programs, understanding the basics of Haskell can enhance your experience with Keelung. Advanced metaprogramming and optimization techniques in Keelung may also require a deeper understanding of Haskell. We recommend reading Learn You a Haskell. It should be enough to skim through the first 4 or 6 chapters.

Repositories & Resources


Last updated


Copyright © 2023 BTQ