Skip to content

A(n almost) complete atlas of contemporary Zero-Knowledge Proof technologies

Notifications You must be signed in to change notification settings

alxkzmn/zk-atlas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 

Repository files navigation

A(n almost) complete atlas of Zero-Knowledge Proof technologies

Most of the blocks are clickable!

%% This is a comment! TD means "Top-Down"
graph TD
%% No need to "define" a new block in a special way, the first mention is the definition.
%% The connection length is determined by the number of dashes, but the minimum is three ---.
%% If you need to skip a level, use more than three dashes.
    Rust --- Bellman
    Rust --- arkworks
    Rust --- Halo2
    Halo2 ---- UltraPLONK
    arkworks ---- Groth16
    R1CS --- PLONK
    ACIR --- PLONK
    Bellman ---- PLONK
    Lurk ----- Nova
    Lurk ----- SnarkPack[SnarkPack+]
    TypeScript --- SnarkyJS
    Lurk ----- Groth16
    snarkjs ---- Groth16
    snarkjs ---- PLONK
    gnark ---- Groth16
    R1CS --- Groth16
    gnark ---- PLONK
    arkworks --- R1CS
    SnarkyJS ---- PLONK
    Circom --- snarkjs
    Go --- gnark
    arkworks ---- Marlin
    arkworks ---- ripp
    arkworks ---- gm17
    arkworks ---- gemini
    ripp --- QAP
    gm17 --- QAP
    gemini --- QAP
    Groth16 --- QAP
    Nova --- QAP
    Noir ---- ACIR
    SnarkPack --- QAP
    Marlin --- QAP
    Leo ---- R1CS
    ZoKrates ---- R1CS
    snarkjs --- R1CS
    Circom ---- R1CS
    gnark --- R1CS
    PLONK --- QAP
    UltraPLONK ---- zkSNARK
    ACIR --- Marlin
    ACIR --- Groth16
    QAP --- zkSNARK
    Cairo ---- RAP
    RAP ----- zkSTARK
    
    %% Visual style definition. Color here refers to text color.
    %% If you want to modify a style, please modify the corresponding style of the legend below.
    
    classDef framework fill:#f94144,color:#fff
    classDef lang fill:#277da1,color:#fff
    classDef compiler fill:#f8961e,color:#000
    classDef intermediate fill:#f9844a,color:#000
    classDef lib fill:#f9c74f,color:#000
    classDef provingSystem fill:#90be6d,color:#000
    classDef algForm fill:#43aa8b,color:#000
    classDef tech fill:#4d908e,color:#fff
    classDef color9 fill:#f3722c,color:#000
    classDef color10 fill:#577590,color:#000
    
    %% These are class assignments. There should be no spaces around commas.
    class SnarkyJS framework
    class Circom,ZoKrates,Leo,Noir,Cairo,Lurk,Rust,TypeScript,Go lang
    class R1CS,ACIR,RAP intermediate
    class snarkjs,Bellman,Halo2,arkworks,gnark lib
    class Groth16,PLONK,Marlin,SnarkPack,Nova,UltraPLONK,gm17,gemini,ripp provingSystem
    class QAP algForm
    class zkSNARK,zkSTARK tech
    
    %% These are onclicks. Docs say you can even use an arbitrary JS callback.
    click Circom href "https://docs.circom.io/"
    click ZoKrates href "https://zokrates.github.io/"
    click Leo href "https://leo-lang.org/"
    click Noir href "https://docs.aztec.network/developers/noir"
    click snarkjs href "https://github.com/iden3/snarkjs"
    click Cairo href "https://eprint.iacr.org/2021/1063.pdf"
    click RAP href "https://eprint.iacr.org/2021/1063.pdf"
    click Lurk href "https://github.com/lurk-lang"
    click SnarkPack href "https://research.protocol.ai/blog/2021/snarkpack-how-to-aggregate-snarks-efficiently/"
    click Nova href "https://github.com/microsoft/Nova"
    click Bellman href "https://github.com/matter-labs/bellman"
    click Rust href "https://www.rust-lang.org/"
    click SnarkyJS href "https://github.com/o1-labs/snarkyjs"
    click TypeScript href "https://www.typescriptlang.org/"
    click ACIR href "https://noir-lang.github.io/book/acir.html"
    click PLONK href "https://eprint.iacr.org/2019/953.pdf"
    click Groth16 href "https://eprint.iacr.org/2016/260.pdf"
    click Marlin href "https://eprint.iacr.org/2019/1047.pdf"
    click zkSTARK href "https://eprint.iacr.org/2018/046.pdf"
    click Halo2 href "https://zcash.github.io/halo2/index.html"
    click arkworks href "https://github.com/arkworks-rs/"
    click gm17 href "https://github.com/arkworks-rs/gm17"
    click gemini href "https://github.com/arkworks-rs/gemini"
    click ripp href "https://github.com/arkworks-rs/ripp"
    click Go href "https://go.dev/"
    click gnark href "https://docs.gnark.consensys.net/en/latest/"
Loading
%% This legend graph is separate because I couldn't find a way to force the subgrapg to be rendered within the main graph in the same position
graph LR
    subgraph Legend
        direction LR
        Lang([Language])---Framework([Framework])---Compiler([Compiler])---Intermediate([Intermediate Format])---Library([Library])---ProvingSystem([Proving System])---AlgebraicForm([Algebraic Form])---Tech([Technology])
    end
    
    %% This styling makes the connections invisible
    linkStyle default stroke-width:0px;
    
    classDef framework fill:#f94144,color:#fff
    classDef lang fill:#277da1,color:#fff
    classDef compiler fill:#f8961e,color:#000
    classDef intermediate fill:#f9844a,color:#000
    classDef lib fill:#f9c74f,color:#000
    classDef provingSystem fill:#90be6d,color:#000
    classDef algForm fill:#43aa8b,color:#000
    classDef tech fill:#4d908e,color:#fff
    classDef color9 fill:#f3722c,color:#000
    classDef color10 fill:#577590,color:#000
    
    class Framework framework
    class Lang lang
    class Compiler compiler
    class Intermediate intermediate
    class Library lib
    class ProvingSystem provingSystem
    class AlgebraicForm algForm
    class Tech tech
Loading

Inspired by https://harryr.github.io/zklangs/. This diagram uses Mermaid syntax. Its learning curve is relatively shallow, so the comments inside this file would probably be enough for you to start contributing.

About

A(n almost) complete atlas of contemporary Zero-Knowledge Proof technologies

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published