HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
lurk-lab
lurk-beta
Rust2022–2022
lurk-lab / lurk-beta

lurk-beta

Lurk is a Turing-complete programming language for recursive zk-SNARKs. This is the prior, elliptic curve based variant of Lurk (contact: @porcuquine)

2Distinct people
6Mentions
0Explicit recommenders
454GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Lurk is a Turing-complete programming language for recursive zk-SNARKs. This is the prior, elliptic curve based variant of Lurk (contact: @porcuquine)

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by week6 dated mentions

Observed mentions: 2022-07-06 11:33:14 UTC to 2022-12-01 18:48:03 UTC. Weeks start Monday, UTC.

0122022-07-04 00:00:00 UTC to 2022-07-11 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsJul 42022-07-11 00:00:00 UTC to 2022-07-18 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-07-18 00:00:00 UTC to 2022-07-25 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-07-25 00:00:00 UTC to 2022-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-08-01 00:00:00 UTC to 2022-08-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-08-08 00:00:00 UTC to 2022-08-15 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-08-15 00:00:00 UTC to 2022-08-22 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-08-22 00:00:00 UTC to 2022-08-29 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-08-29 00:00:00 UTC to 2022-09-05 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-09-05 00:00:00 UTC to 2022-09-12 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-09-12 00:00:00 UTC to 2022-09-19 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsSep 122022-09-19 00:00:00 UTC to 2022-09-26 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-09-26 00:00:00 UTC to 2022-10-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-10-03 00:00:00 UTC to 2022-10-10 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2022-10-10 00:00:00 UTC to 2022-10-17 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2022-10-17 00:00:00 UTC to 2022-10-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-10-24 00:00:00 UTC to 2022-10-31 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-10-31 00:00:00 UTC to 2022-11-07 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2022-11-07 00:00:00 UTC to 2022-11-14 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-11-14 00:00:00 UTC to 2022-11-21 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-11-21 00:00:00 UTC to 2022-11-28 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-11-28 00:00:00 UTC to 2022-12-05 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsNov 28

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Jul 42022-07-04 00:00:00 UTC2022-07-11 00:00:00 UTC202
Jul 112022-07-11 00:00:00 UTC2022-07-18 00:00:00 UTC000
Jul 182022-07-18 00:00:00 UTC2022-07-25 00:00:00 UTC000
Jul 252022-07-25 00:00:00 UTC2022-08-01 00:00:00 UTC000
Aug 12022-08-01 00:00:00 UTC2022-08-08 00:00:00 UTC000
Aug 82022-08-08 00:00:00 UTC2022-08-15 00:00:00 UTC000
Aug 152022-08-15 00:00:00 UTC2022-08-22 00:00:00 UTC000
Aug 222022-08-22 00:00:00 UTC2022-08-29 00:00:00 UTC000
Aug 292022-08-29 00:00:00 UTC2022-09-05 00:00:00 UTC000
Sep 52022-09-05 00:00:00 UTC2022-09-12 00:00:00 UTC000
Sep 122022-09-12 00:00:00 UTC2022-09-19 00:00:00 UTC000
Sep 192022-09-19 00:00:00 UTC2022-09-26 00:00:00 UTC000
Sep 262022-09-26 00:00:00 UTC2022-10-03 00:00:00 UTC000
Oct 32022-10-03 00:00:00 UTC2022-10-10 00:00:00 UTC101
Oct 102022-10-10 00:00:00 UTC2022-10-17 00:00:00 UTC101
Oct 172022-10-17 00:00:00 UTC2022-10-24 00:00:00 UTC000
Oct 242022-10-24 00:00:00 UTC2022-10-31 00:00:00 UTC000
Oct 312022-10-31 00:00:00 UTC2022-11-07 00:00:00 UTC101
Nov 72022-11-07 00:00:00 UTC2022-11-14 00:00:00 UTC000
Nov 142022-11-14 00:00:00 UTC2022-11-21 00:00:00 UTC000
Nov 212022-11-21 00:00:00 UTC2022-11-28 00:00:00 UTC000
Nov 282022-11-28 00:00:00 UTC2022-12-05 00:00:00 UTC101

What Hacker News says

6 sources
Lurk Lab @ Protocol Labs | Multiple Positions | REMOTE | Full-time Lurk Lab is building Lurk (https://github.com/lurk-lang), a Turing-complete programming language for recursive zk-SNARKs. Lurk implements a minimal Lisp whose program executions can be proved in zero-knowledge, yielding succinct proofs that are concretely small and fast to verify. Lurk uses a Rust implementation (https://github.com/lurk-lang/lurk-rs) for expression evaluation, proving, and verification, with Nova (https://github.com/microsoft/Nova/) as its proving backend. Because Lurk is Turing-complete, it can be used to make and prove arbitrary computational claims (within resource limits). We are looking for strong cryptography engineers, researchers, functional programming language specialists, applications developers, and start-up leaders/web3 entrepreneurs who want
Read the rest
to build next-generation SNARK technology. Ideal candidates will be knowledgeable about the state of the art in zero-knowledge proofs and (if looking for an engineering position) strong in Rust. We are specifically hiring for: - Rust Cryptography Engineers - zk-SNARK Researchers and Engineers - Functional Programming Language Specialists - Software Engineers for Lurk Applications - Documentation Engineers - A Business Lead and/or COO If you are interested in any of these roles, email luke.sandquist@protocol.ai with CV and a brief cover letter.
In Ask HN: Who is hiring? (December 2022)
Lurk Lab @ Protocol Labs | Multiple Positions | REMOTE | Full-time contract-to-hire Lurk Lab is building Lurk (https://github.com/lurk-lang), a Turing-complete programming language for recursive zk-SNARKs. Lurk implements a minimal Lisp whose program executions can be proved in zero-knowledge, yielding succinct proofs that are concretely small and fast to verify. Lurk uses a Rust implementation (https://github.com/lurk-lang/lurk-rs) for expression evaluation, proving, and verification, with Nova (https://github.com/microsoft/Nova/) as its proving backend. Because Lurk is Turing-complete, it can be used to make and prove arbitrary computational claims (within resource limits). We are looking for strong cryptography engineers, researchers, documentation specialists, applications developers, and start-up leaders/web3 entrepreneurs who want t
Read the rest
o build next-generation SNARK technology. Relevant programming languages include Rust, Lisp, and (less significantly) WASM. We are hiring for: - Rust Cryptography Engineers, https://grnh.se/d94e94ec4us - Software Engineers for Lurk Application Development, https://grnh.se/de7e82424us - Documentation Engineer, https://grnh.se/10e2ca4d4us - Start-up operator / business lead (currently unlisted, email luke.sandquist@protocol.ai with CV and a brief cover letter describing your experience driving the business end of deep technical projects in the web3 space)
In Ask HN: Who is hiring? (November 2022)
I recently published a fairly detailed blog post about how to formulate expressive provable programs in Lurk (https://github.com/lurk-lang/lurk-rs). Although this post goes into no details about the underlying proving mechanism, it does build to some pretty powerful ideas. If you haven't thought about the implications of being able to prove correctness of a computation without revealing some or all details of what the computation actually was, you might enjoy it. https://blog.lurk-lang.org/posts/prog-intro/
In How to prove you know a secret without giving it away
Lurk Lab @ Protocol Labs | Multiple Positions | REMOTE | Full-time contract-to-hire Lurk Lab is building Lurk (https://github.com/lurk-lang), a Turing-complete programming language for recursive zk-SNARKs. Lurk implements a minimal Lisp whose program executions can be proved in zero-knowledge, yielding succinct proofs that are concretely small and fast to verify. Lurk uses a Rust implementation (https://github.com/lurk-lang/lurk-rs) for expression evaluation, proving, and verification, with Nova (https://github.com/microsoft/Nova/) as its proving backend. Because Lurk is Turing-complete, it can be used to make and prove arbitrary computational claims (within resource limits). We are looking for strong cryptography engineers, researchers, documentation specialists, applications developers, and start-up leaders/web3 entrepreneurs who want t
Read the rest
o build next-generation SNARK technology. Relevant programming languages include Rust, Lisp, and (less significantly) WASM. We are hiring for: - Rust Cryptography Engineers, https://grnh.se/d94e94ec4us - Software Engineers for Lurk Application Development, https://grnh.se/de7e82424us - Documentation Engineer, https://grnh.se/10e2ca4d4us - Start-up operator / business lead (currently unlisted, email luke.sandquist@protocol.ai with CV and a brief cover letter describing your experience driving the business end of deep technical projects in the web3 space)
In Ask HN: Who is hiring? (October 2022)
Nova (for example) doesn't require a trusted setup. The circuit is just a schematic description of the underlying computation. In the case of the Lurk core language, this computation is 'one reduction step of a Lurk evaluation' (https://github.com/lurk-lang/lurk-rs/blob/master/spec/reduct...). Coming up with a 'fixed computation' that yields general computation is part of the design problem for Lurk (or any other Lurk-like language). Even if we did need a per-circuit trusted setup (which we don't), we could perform such a setup for our core circuit and use it to prove arbitrary programs. For example, although we have not actually performed the trusted setup, we do have an example using Groth16 (which does require a trusted setup to be secure) and aggregates the potentially many discrete reduction steps to produce a succinct proof.
In Lurk – Language for Recursive ZK-SNARKs Inspired by Common Lisp and Scheme
> My understanding is that a SNARK circuit is used to prove a series of computations without revealing any of the inputs or outputs. Close: the so-called 'public inputs' must be revealed because these are checked by the verifier. What's neat is that many (even 'most') of the so-called 'private inputs' need not be revealed. This lets you prove statements that have the form, "I know of secret values x, y, z, etc. such that the following arithmetic relationship holds: [statement including public and private inputs]." One of Lurk's contributions is that this 'statement' can express arbitrary computation, including anything requiring unbounded recursion. That's what makes it Turing complete. A traditional SNARK circuit is expressive enough to describe any computation, but the limitation on requiring a fixed size means you have to know (and are
Read the rest
limited by) an upper bound on the size of the computation in advance. > Is my understanding correct that lurk would be used instead of something like circom where circom can create simple arithmetic zk circuits, whereas lurk can create circuits that can describe arbitrary computations? Yes, exactly. You can construct an arbitrary program (say `((lambda (x) (* x x)) public-input)`) and pass that whole expression to the verifier. The prover can then provide the claimed result, which will also be a public input to the verifier, along with a proof that the 'input' evaluates (according to Lurk semantics) to the 'output'. Note that both what I called 'input' and 'output' will be public-inputs used by the verifier. > So lurk programs can point to previously proven (and published?) hashes to make provable claims about their calculations? Yes, that is one use case. Take the example above: the whole lambda expression I gave as an input example will actually be represented as a 'hash' (a content-address for the complete expression). But the 'interesting' part of the function doesn't actually have to have been given to the verifier. Instead, the prover might have committed to this function previously. The prover then 'opens' the commitment on the provided input. This is possible because the verifier can construct the 'hash' corresponding to the 'input' without knowing the internal hashes of the entire expression. The verifier might only know she is verifying a statement of the form `(<secret function> public-input)`. But she still knows that the claimed output is indeed an evaluation of the pre-committed secret function because she trusts the cryptographic proof. We have an example project dealing with exactly this situation. The examples need a lot of work, but you can see the idea here: https://github.com/lurk-lang/lurk-rs/tree/master/fcomm This WIP commit adapts the example to use a more explicit form of commitments and should make clearer what's going on: https://github.com/lurk-lang/lurk-rs/pull/112/files#diff-d6b... The initial example took advantage of the fact that all compound Lurk data is produced by hashing anyway. > Is this like "merkle-izing" computation? You merkle-ize the recipe/program. The computation itself is performed normally (by the prover), but only needs to happen once. Thereafter any number of verifiers can 'check the prover's work' and see that it was performed correctly. Both the input and output to the computation proven can be merkle roots — so the amount of private versus public data can be tuned to the needs of the application. > Sorry I'm just really trying to wrap my head around this. It's a lot to grok and takes a while (but not too bad if you're really interested). If you follow us on Twitter (https://twitter.com/LurkLab) you'll see when we publish some blog posts in which I hope to walk through examples like this in a lot more detail. That should give a very concrete sense for what is possible and what is involved from a programmer perpsective.
In Lurk – Language for Recursive ZK-SNARKs Inspired by Common Lisp and Scheme

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.