Hello, Keelung

Introduction
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.
zk-SNARK Backends
Keelung programs compile to zero knowledge circuits, the language does not burden the developers with concerns over what protocols or systems the circuits might be utilized with. But in general use cases, the developers would expect these circuits to be compatible with some ZK-SNARK systems, such as Groth16. It is also reasonable to expect there are tools for integrations with such systems to make the development of zk-SNARK applications as smooth as possible. We refer to utilities for such systems "backends" of zero knowledge applications' development process, as opposed to "frontends" such as circuit designs.
We have integrated Aurora, a post-quantum zk-SNARK system, in the Keelung compiler and as a default backend. Commands the invoke the Keelung compiler such as prove
or verify
would generate and verify Aurora proofs by default, assuming the Aurora backend is correctly installed.
Additionally, the Keelung compiler is capable of generating Snarkjs-compatible proof and witness, such that more common/traditional zk-SNARK systems such as Groth16 or PLONK can be used seamlessly in combination with Keelung. See Integrations with Snarkjs for more details.
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
Keelung Language: https://github.com/btq-ag/keelung
Keelung Compiler: https://github.com/btq-ag/keelung-compiler
Standard Library: https://github.com/btq-ag/keelung-stdlib
Examples & Tutorial: https://github.com/btq-ag/keelung-examples
Community
Last updated