Lurk
A Turing-complete programming language for Zero Knowledge Proofs — general-purpose ZK development in a familiar Lisp-family syntax, with the compilation infrastructure to make it fast.
Visit siteThe problem
Writing ZK circuits is specialist work — the languages (Circom, Cairo, etc.) constrain expressiveness for provability reasons, and general-purpose programmers can't move into ZK without learning a fundamentally different mental model. General-purpose ZK development requires a language that is Turing-complete and provable, and the compilation infrastructure to make it fast enough for real workloads. Without that, ZK stays a specialist domain — usable only by teams with dedicated cryptography engineering, which sharply limits the applications the technology can support.
Key challenges
General-purpose ZK is a research-adjacent engineering domain. Language design has to balance expressiveness against provability. Compilation targets have to reconcile familiar semantics with the mathematical structure ZK requires. Execution has to be efficient enough to compete with hand-written circuits for the common cases. And the developer experience has to be friendly enough that general-purpose programmers can approach it.
What we built
AR Data contributed engineering on Lurk and its execution stack — a general-purpose ZK-friendly programming language that lets developers write in a familiar Lisp-family syntax and get provable computation without hand-writing circuits. Contributions extended into the Arecibo SuperNova execution stack that provides the proof-generation performance real applications need. The contribution pattern focused on the ecosystem-level engineering that makes a language usable: tooling, integration paths, execution performance, and the documentation-adjacent engineering that helps new developers approach ZK without a cryptography background.
Our approach
- 1
Familiar syntax over ZK-native notation
Lisp-family syntax is familiar to a wide developer audience. Starting from that surface makes ZK approachable in a way notation-first languages don't.
- 2
Execution performance as a first-class concern
General-purpose ZK is only useful if execution is fast. Contributions to the Arecibo SuperNova stack target the performance bar real applications require.
- 3
Ecosystem-level engineering, not language purity
Language adoption follows tooling. Focus on the tooling and integration surfaces that make Lurk usable rather than the theoretical purity of the language design.
- 4
Documentation-adjacent engineering
New ZK developers need runnable examples, integration templates, and clear on-ramps. Engineering that supports these gets referenced constantly.
Key architectural decisions
Familiar syntax over ZK-native notation
Adoption favors familiar surfaces. Lisp-family syntax has a large developer audience already.
Execution performance prioritized alongside language design
A slow general-purpose ZK language doesn't get used. Performance is what makes it competitive with hand-written circuits.
Ecosystem engineering over language purity
Languages get adopted through tooling. Focus follows adoption strategy.
Documentation-adjacent engineering as a priority
Approachability is the adoption bottleneck for ZK. Engineering that supports docs and examples has outsized leverage.
Results
- General-purpose ZK language contributions
- Turing-complete provable computation in a familiar syntax
- Contributions to the Arecibo SuperNova execution stack
- Tooling and integration paths lowering the ZK adoption barrier
- Ecosystem engineering for a new class of ZK developer
Impact
Lurk is one of the projects that will decide whether ZK becomes a specialist domain or a general-purpose one. The engineering contributions target the adoption path — familiar syntax, real execution performance, ecosystem tooling — that make general-purpose ZK viable rather than aspirational.
Tech stack
Want a case study like this?
30 minutes. We scope the real problem and figure out what to build.
Book a call

