Zebra Onboarding
This is a personal onboarding course for Zebra, the Rust implementation of a Zcash full node maintained by the Zcash Foundation. The course is the kind of document that I, the reader, would have wanted when I first opened the repo, in the order I would have wanted to read it.
The audience is one person (me, the maintainer of this fork). It is written in the second person because that turned out to be the clearest voice, not because it is meant to teach anyone in particular.
:::warning Auto-generated. May be wrong.
This entire site was auto-generated using Claude Code by reading the Zebra source tree, the Zcash protocol specification, and a stack of audit reports. Errors will have been introduced.
The code in ZcashFoundation/zebra is the law. When this site disagrees with the source, the source wins.
Authoritative references:
- The source tree at
ZcashFoundation/zebra, pinned in this course to tagv4.4.1. - The Zcash protocol specification (PDF), latest version.
- The ZIPs index for all protocol-level changes.
- The Halo 2 book for the Orchard proving system.
- Published audits: NCC Group 2020, Trail of Bits 2021, and the Zcash Foundation security index.
If you find a wrong claim, the easiest fix is to open an issue or PR on the onboarding branch of the fork. Use the "Edit this page" link at the bottom of each chapter to jump straight to the Markdown source. :::
Notation
The course reuses the same notation across chapters. Once is enough.
- : a prime field of order . For Zcash, is the base field of either Jubjub (Sapling), Pallas (Orchard), or BLS12-381 (Groth16).
- : a cyclic group of prime order , written additively.
- : scalar multiplication of point by scalar .
- : a hash with -bit output (Blake2b for most KDF/PRF paths, Pedersen for fixed-domain commitments, Sinsemilla for the Orchard tree, Poseidon for in-circuit).
- : the BLS12-381 pairing , used by Groth16.
- : a commitment to message with randomness . In Sapling, is a Pedersen commitment; in Orchard, the value commitment uses Pallas and the note commitment uses Sinsemilla.
- / : symmetric encryption (ChaCha20-Poly1305 in Sapling note encryption).
- \stackrel{\}{\leftarrow}$: uniform random sampling.
- : byte-string concatenation.
How to Read This Course
The chapters are ordered as the dependency graph of the codebase: you cannot understand chapter without chapters through . The two load-bearing chapters are:
- Workspace, Dependency Graph, and Build - the crate map and the build commands you will run every day.
- Testing, Build, and CI - what every PR must pass locally before it goes anywhere.
The last chapter, First 90 Days, is a reading and contribution plan that converges on a real PR.
Contribution Gate (Read Before Opening a PR)
The upstream CLAUDE.md enforces a contribution gate: no PR before issue discussion with a Zcash Foundation team member. The detail is in chapter 22 and in the upstream CLAUDE.md. Skipping it gets the PR closed regardless of how good the code is.
License Note
This course quotes Zebra source code under its MIT or Apache-2.0 license. The course prose itself is personal notes and carries no separate license: if you want to reuse it, ask first.