Changelog
Tagged releases live on GitHub Releases — that’s the authoritative record of what’s in each version. This page summarizes themes alongside the release notes, plus the rolling work on main between tags. For the exhaustive log, use the GitHub commit history.
v1.0.0
Section titled “v1.0.0”The first tagged release of ProveKit. Crates published to crates.io: provekit-cli, provekit-common, provekit-prover, provekit-verifier, provekit-r1cs-compiler, provekit-gnark, provekit-ffi, provekit-wasm.
See the v1.0.0 release notes for the full change list.
Unreleased (rolling, main)
Section titled “Unreleased (rolling, main)”Breaking changes
Section titled “Breaking changes”- CLI subcommand renamed.
circuit_stats→circuit-stats. Update scripts and CI jobs. - Hash configuration is stored on
WhirR1CSScheme. Process-global hash drift is no longer possible; consumers reading scheme types directly should fetch the hash from the scheme instead of process state. - Digest hashers unified, V1 domain separation tag added. Proof hashing is now consistent across paths.
- Zero-arg defaults for
prepare/prove/verify. Each command runs from the enclosing Noir package without explicit paths, with full--pkp/--pkv/--prover/--verifier/--input/--outoverrides still available. - Improved CSP benchmark scripts to match the new
prove/verifyflags.
Performance
Section titled “Performance”- Poseidon2 hot path: inlined permutation helpers, squaring S-box, zero-allocation byte/field conversion, in-place API.
- Native Keccak benchmarks rebalanced for lower witness count.
- NTT picked up an explicit
rootsmethod, b51-mode NTT enabled in WASM, and a canonicalized comparison test.
Hash and proof system
Section titled “Hash and proof system”- Poseidon2 hash config is now selectable via
--hash poseidon2alongside Skyscraper, SHA-256, Keccak, and Blake3. - Public-input hashing is aligned with the chosen
HashConfig. Mixing public-input encoding across hash choices was previously possible and is now prevented. - Process-global hash drift eliminated. Hash configuration is stored on the scheme.
Benchmarks
Section titled “Benchmarks”- Ethproofs CSP benchmark suite added under
noir-examples/csp-benchmarks/. Targets: SHA-256 (128–2048 bytes), Keccak-256 (128–2048 bytes), Poseidon (states 2–16), Poseidon2 (states 2–16), and ECDSA over secp256r1. - Sticky CSP PR comment in CI reports constraints, witnesses, and deltas vs. the
mainbaseline.
Compiler and tests
Section titled “Compiler and tests”- Noir blackbox hash paths are preferred where ProveKit lowers them efficiently. The CSP suite documents where native Noir paths win instead.
- Verifier-visible public input equalities are preserved by Noir prepare.
Documentation
Section titled “Documentation”- Restructured docs site (Astro Starlight) with a Diátaxis-aligned IA: Start here / Build and integrate / Concepts / Reference / Operations.
- Added: What is ProveKit? explainer, Tutorial (private-knowledge proof), Designing circuits for ProveKit (ProveKit-specific circuit mechanics), Performance, Comparison, FAQ, Examples catalog, FFI error codes, Starter templates, Changelog.
- Re-routed the wasm-demo through Verity without changing the ProveKit UX surface.
- Raised the SHA-256 demo circuit workload to better exercise the in-browser path.
Acknowledged work in progress
Section titled “Acknowledged work in progress”These are tracked, not yet shipped:
- Tagged releases and SemVer guarantees.
- Public audit certification.
- Native (non-Groth16) recursive verification.
- Hosted rustdoc and generated C-header reference linked from the docs.
- Release binaries for
provekit-cli. - An official starter-app repository (see Starter templates for the assembly recipe meanwhile).
Branch policy recap
Section titled “Branch policy recap”| Branch | Purpose | Compatibility |
|---|---|---|
v1 | Current stable interface. | Treat as the reproducibility target. |
main | Active development. | Formats and APIs may change between commits. |
See Project status and versioning for the full policy.
Where this changelog comes from
Section titled “Where this changelog comes from”Per-release content comes from GitHub Releases. The “Unreleased” section above is curated from substantive commits on main between tags. It is not a complete log; every change is in Git, but most don’t belong in a user-facing changelog. The selection criterion: would a user who upgraded benefit from knowing this?
If you spot a missing change that affects users, open an issue or PR against docs/src/content/docs/reference/changelog.mdx.