Releases: ZcashFoundation/zebra
Release list
Zebra 4.3.0
Zebra 4.3.0 - 2026-03-26
This release fixes two important security issues:
- CVE-2026-34202: Remote Denial of Service via Crafted V5 Transactions
- CVE-2026-34377: Consensus Failure via Crafted V5 Authorization Data
We recommend node operators to update to 4.3.0 as soon as possible. All previous
Zebra versions are vulnerable to these issues.
This release adds support for ZIP-235 and extends the documentation on performance profiling. It also fixes issues with block propagation on Regtest, the computation of miner rewards for pre-Canopy blocks in the getblocksubsidy RPC, and a performance regression on Testnet where Zebra would hog a single CPU thread.
Added
- Network Sustainability Mechanism: ZIP-235 (#10357)
- Add
profilingCargo profile and use it in profiling docs (#10411)
Fixed
- Fix block propagation on Regtest (#10403)
- Subtract Founders' Reward from block subsidy (#10338)
- Cache parsed checkpoints (#10409)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@gustavovalverde, @judah-caruso, @nuttycom, @oxarbitrage and @upbqdn.
Zebra 4.2.0
Zebra 4.2.0 - 2026-03-12
This release expands Zebra’s RPC functionality, improves mempool policy,
adds more state querying capabilities, and replaces the legacy OpenAPI
documentation with OpenRPC.
Added
UnspentOutputrequest to mempool component service (#10235)- Founders reward addresses (#10188)
- Support for pre-Canopy block subsidies (#10191)
- AI contribution policy and agent guidance files (#10318)
rpc.discoverendpoint (#10201)gettxoutRPC method (#10235)AnyChainBlockstate request for querying blocks in side chains (#10325)- Remaining non-standard mempool transaction filters (#10314)
Removed
- Python QA RPC test framework (
zebra-rpc/qa/) in favour of the new integration-tests project, which captures all previous work in zcash/integration-tests#1 (#10363) - OpenAPI specification and related functionality (#10298) in favour of OpenRPC
Changed
- Simplify
ReadStateService::call()method (#10335) - Replace
NETWORK_UPGRADES_IN_ORDERwithstrum::EnumIter(#10096)
Fixed
- Preserve input order in
spent_outputsfor mixed chain/mempool transactions (#10356) - Clarify
TransparentInputNotFounderror message (#10302) - Improve
getrawtransactioncompatibility withzcashd(#10307) - Peerset banned cancel handles (#10258)
- Support writing non-finalized state backups to disk before broadcasting updated chainstate (#10361)
- Fix bug in
ActiveConnectionCounterand inaccurate connection count metrics (#10311)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@VolodymyrBg, @arya2, @conradoplg, @gustavovalverde, @mpguerra, @oxarbitrage, @syszery, @upbqdn and @zmanian
Zebra 4.1.0
Zebra 4.1.0 - 2026-02-05
This release has no breaking changes for node operators. It expands Zebra's
observability with new Prometheus metrics and Grafana dashboards. It also adds
mempool checks for standard transparent scripts to match zcashd.
Listed below are all user-visible changes.
Changed
- Check that
SENTRY_DSNenv variable is present before initializing sentry (#10256)
Added
- Add RocksDB I/O latency and sync distance metrics (#10181)
- Add performance histograms for bottleneck identification (#10179)
- Add value pool, RPC, and peer health metrics (#10175)
- Add standardness checks and configurable
OP_RETURNpolicy (#10224) - Add zaino to the qa rpc framework (#10199)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@Bashmunta, @MozirDmitriy, @gustavovalverde, @mpguerra, @oxarbitrage, @syszery, @upbqdn and @zlyzol
Zebra 4.0.0
This release fixes the type of a field in the getinfo RPC and adds support for
the pingtime and pingwait fields of the getpeerinfo RPC.
It also changes the Grafana dashboards to add auto-provisioning and AlertManager
support.
This release also adds a new mainnet DNS seeder from Shielded Labs to the default
configuration. However, if you already have a config in place, you will need
to add it manually; add "mainnet.seeder.shieldedinfra.net:8233" to
initial_mainnet_peers.
The new OpenTelemetry support must be enabled at compile time with the
opentelemetry feature, e.g. cargo build --features=opentelemetry --release.
Breaking Changes
This release has the following breaking changes:
- Changed the
getinfoRPCerrorstimestampfield from a string timestamp (ISO
UTC timestamp) to a i64 (seconds from Unix epoch) to match zcashd
(#10079). If you rely
on this field, you will need to change your code to be able to interpret
the i64 result. - Always parse Zebra's config file as TOML (#10222). This allows using a config
file with an extension different than.toml. Previously, it would use the
format detected from the extension, so in the unlikely case you were using
a format different than TOML you will need to change your config to TOML.
Added
- Added
pingtimeandpingwaittogetpeerinfoRPC (#9880) - Added Grafana auto-provisioning and AlertManager (#10171)
- Added OpenTelemetry distributed tracing support (#10174)
- Added new Shielded Labs mainnet seeder (#10228)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@conradoplg, @gustavovalverde and @syszery
Zebra 3.1.0
This release fixes how Docker images are published for ARM64 platforms, increases the maximum size of RPC responses and allows configuring it, and filters out dust transactions in the mempool.
Added
- Implemented filter for dust transactions in the mempool (#10134)
Changed
- Updated Debian from
bookwormtotrixiein Docker (#10111) - Configured Zebra to listen on the all-zero IPv6 address in Docker by default (#10095)
- Increased allowed RPC response size (#10118)
Fixed
- Fixed publishing workflow for ARM64 and AMD64 Docker images (#10125)
- Fixed logging of commit IDs (#10135 and [#10115)
- Prevented static IP assignment step from failing on read command (#10123)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@conradoplg, @gustavovalverde, @imcdona, @oxarbitrage and @upbqdn
Zebra 3.0.0
Zebra 3.0.0 - 2025-11-17
This release is a stable version of the release candidate deploying NU6.1 on Mainnet. It fixes some issues that were found after
the release candidate was published but otherwise mostly includes technical improvements and cleanup with relatively few user-visible changes.
Changed
- Gated code behind the
tx_v6feature flag behind thezcash_unstable=nu7config flag too (#10060)
Added
- Added ZIP 233 (Network Sustainability Mechanism) implementation (#8930)
- Populated
asmfield returned by Zebra's RPC methods with code in script outputs as well as script types (#10019) - Added a CHANGELOG file to track changes in the python QA framework (#10076)
- Enabled backtraces and added debug info by default in production builds (#10097)
Fixed
- Updated Dockerfile to accept Cargo features for release builds (#10075)
- Fixed the
docker buildcommand (#10007) - Fixed a bug in
z_validateaddressaround parsing Testnet transparent addresses on Regtest (#10022) - Re-enabled Docker provenance and SBOM attestations (#10071)
- Fixed an issue where Zebra would panic in some edge cases around mempool transactions depending on other mempool transactions (#10049)
- Fixed a DDoS vulnerability and panic issue around error handling in proof verifiers (#10099)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@AloeareV, @arya2, @conradoplg, @dorianvp, @gustavovalverde, @mariopil, @oxarbitrage, @syszery, and @upbqdn
Zebra 3.0.0-rc.0
Zebra 3.0.0-rc.0 - 2025-10-15
In this release, we add the Mainnet activation height for Network Upgrade 6.1 (NU6.1), which will activate at block 3,146,400.
This is a release candidate. Its support is set to expire before the activation height. If no issues are found, this candidate will become the final release for NU6.1.
This release also includes significant updates to Zebra's CI and Docker setup, as well as performance optimizations.
Breaking Changes
- Migrate
zebradto a layered configuration using config-rs. Environment variables must use theZEBRA_SECTION__KEYformat (double underscore for nesting), for example:ZEBRA_NETWORK__NETWORK,ZEBRA_RPC__LISTEN_ADDR,ZEBRA_RPC__ENABLE_COOKIE_AUTH,ZEBRA_RPC__COOKIE_DIRZEBRA_TRACING__FILTERZEBRA_STATE__CACHE_DIR,ZEBRA_MINING__MINER_ADDRESS. LegacyZEBRA_*test/path variables andZEBRA_RUST_LOGare no longer honored. Update any scripts, Docker configs, or systemd units that relied on the old names (#9768). - Docker entrypoint simplified: it no longer generates a
zebrad.tomlor translates legacy Docker environment variables. To use a file, setCONFIG_FILE_PATH(the entrypoint forwards it via--config). Otherwise, configure viaZEBRA_*variables.ZEBRA_CONF_PATHhas been removed in favor ofCONFIG_FILE_PATH. Docker setups that used variables likeZEBRA_RPC_PORT,ZEBRA_COOKIE_DIR,NETWORK,ENABLE_COOKIE_AUTH, orMINER_ADDRESSmust switch to the config-rs equivalents shown above (#9768). - Fully removed the
getblocktemplate-rpcsfeature flag fromzebrad/Cargo.toml. All functionality previously guarded by this flag has already been made the default. As a result, the following build command is no longer supported:(#9964)cargo build --features getblocktemplate-rpcs
Changed
zebradnow loads configuration from defaults, an optional TOML file, and environment variables, with precedence: Env > TOML > Defaults (#9768).- Docker and book documentation updated to describe
CONFIG_FILE_PATHandZEBRA_*environment variable usage; removed references toZEBRA_CONF_PATHand legacy Docker variables (#9768). - Implemented nextest and optimized Docker test builds (#9435)
- Replaced light wallet .proto files with canonical versions obtained from https://github.com/zcash/lightwallet-protocol (#9783)
- Allow
zebra-rpcto be compiled withoutprotoc(#9819) - Switched Sapling verifier (#9737)
- Refactor Sapling parameters loading (#9678)
- Adopt upstream types for sapling commitments where possible (#9828)
- Updated transaction verifier to use
orchard::bundle::BatchValidator(#9308) - Improved error propagations (#9921, #9919, #9848)
- Broadcast block submissions to all peers in the peer set (#9907)
- Removed outdated seeders (#9932)
- Apply suggestions for code cleanup from NU6.1 audit. (#9952)
- Always return
1.0fromgetblockchaininfoas the verification progress on Regtest (#9908) - Corrected number of addresses for the FPF funding stream extension on Testnet (#9786)
- Simplified a test to use regtest instead of fake activation heights (#9792)
- Re-enable and update
disconnects_from_misbehaving_peerstest (#9735) - Improve connection times in regtest framework (#9917)
- Always wait for RPC port to open in cached state tests (#9903)
- Allow configuration of funding streams on Regtest (#9710)
- Implemented draft ZIP 2003 for NU7 and use Testnet network protocol versions on Regtest (#9787)
Added
- NU6.1 activation height, funding streams, lockbox disbursments, and current network protocol version (#9987)
- Backup non-finalized blocks in state cache directory (#9809)
- Complete
z_gettreestate(#9798) getmempoolinfoRPC method (#9870)getnetworkinfoRPC method (#9887)- Support side chains in
getrawtransaction(#9884) - Support single-string or object params in
getaddresstxids(#9854) - Exposed
z_validateaddresslogic for library consumers (#9859) - Missing Orchard fields to
getrawtransaction(#9808) vjoinsplitfield togetrawtransaction(#9805)- Use specific error code for
addnode; reuse message in response filter (#9931) - Support for the
chainInfofield ingetaddressutxosRPC method (#9875) - Allow for cycling through configured funding stream addresses (#9989)
- Introduce
BytesInDisplayOrdertrait to standardize byte-reversed encoding in RPC (#9810) MappedRequesthelper trait and refactors error types used byCommitSemanticallyVerifiedBlockrequests (#9923)- Useful standard trait implementations to ease downstream use (#9926)
- Added
ZFuturevariant toNetworkUpgrade(#9814) - Allow configuration of checkpoints on test networks (#9888)
- Added HTTP
/healthyand/readyendpoints (#9895, #9886) - New book page on profiling Zebra (#9983)
- Deserialization logic to call
extend_funding_streams()when the flag is true for both configured Testnets and Regtest (#9989)
Fixed
- Restore initial sync performance by avoiding RocksDB merge operations when the on-disk database format is up-to-date (#9973)
- Use
STANDARDBase64 for RPC auth encoding/decoding (#9968) - Expects the block commitment bytes of Heartwood activation blocks to be the
hashBlockCommitmentsafter NU5 activation (#9982) - Fixed UTXO selection loop to iterate over entries instead of repeating first (#9826)
- Improve extra argument passing to zebra in qa framework(#9858)
- Avoid heap allocations in
expand_zero_be_bytes()(#9951) - Fixed
sanitize_avoids_leakstest to validate sanitized MetaAddr (#9867) - Corrected
at_least_one!count-form and add unit test (#9871)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@Fibonacci747, @Galoretka, @GarmashAlex, @JacksonEi, @MozirDmitriy, @Olexandr88, @arya2, @conradoplg, @gap-editor, @gustavovalverde, @natalieesk, @nuttycom, @oxarbitrage, @radik878, @sashass1315, @str4d, @syszery, @upbqdn and @zancas
zebra-rpc v2.0.1
This release removes zebra-rpc's build dependency on protoc by copying the pre-generated protoc files into the build output directory if protoc is unavailable in the build environment.
Changed
- Removed build dependency on
protoc
Zebra 2.5.0
Zebra 2.5.0 - 2025-08-07
This release includes the implementation of Zcash Network Upgrade 6.1 (NU6.1) on Testnet and sets its activation height on the public Testnet at block 3,536,500. Please update your Testnet nodes as soon as possible to ensure compatibility.
Breaking Changes
- Value pool "deferred" changes its identifier to "lockbox".
getblockandgetblockchaininfoRPC methods will now returnlockboxas theFS_DEFERREDvalue pool to match zcashd. (#9684)
Added
- Implement one-time lockbox disbursement mechanism for NU6.1 (#9603, #9757, #9747, #9754)
- NU6.1 Testnet implementation and deployment (#9762, #9759)
Fixed
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@Galoretka, @arya2, @conradoplg, @dorianvp, @gustavovalverde, @oxarbitrage, @pacu and @upbqdn
Zebra 2.4.2
This release fixes a database upgrade bug that was introduced in the 2.4.0
release (which has been removed). If you have upgraded to 2.4.0, your Zebra
address index has become corrupted. This does not affect consensus, but will
make the RPC interface return invalid data for calls like getaddressutxos and
other address-related calls.
(Also refer to the 2.4.0 release notes below for important breaking changes.)
Zebra 2.4.2 prints a warning upon starting if you have been impacted by the bug.
The log line will look like:
2025-07-17T17:12:41.636549Z WARN zebra_state::service::finalized_state::zebra_db: You have been impacted by the Zebra 2.4.0 address indexer corruption bug. If you rely on the data from the RPC interface, you will need to recover your database. Follow the instructions in the 2.4.2 release notes: https://github.com/ZcashFoundation/zebra/releases/tag/v2.4.2 If you just run the node for consensus and don't use data from the RPC interface, you can ignore this warning.
If you rely on the RPC data, you will need to restore your database. If you have
backed up the state up before upgrading to 2.4.0, you can simply restore the backup
and run 2.4.2 from it. If you have not, you have two options:
- Stop Zebra, delete the state (e.g.
~/.cache/zebra/state/v27/mainnetand
testnettoo if applicable), upgrade to 2.4.2 (if you haven't already), and
start Zebra. It will sync from scratch, which will take around 48 hours to
complete, depending on the machine specifications. - Use the
copy-statesubcommand to regenerate a valid state.
This will require an additional ~300 GB of free disk size. It is likely that
it will take around the same time as syncing from scratch, but it has the
advantage of not depending on the network.- Stop Zebra.
- Rename the old corrupted state folder, e.g.
mv ~/.cache/zebra ~/.cache/zebra.old - Copy your current
zebrad.tomlfile to azebrad-source.tomlfile and edit
thecache_dirconfig to the renamed folder, e.g.cache_dir = '/home/zebrad/.cache/zebra.old' - The
copy-statecommand that will be run requires a bigger amount of opened
files. Increase the limit by runningulimit -n 2048; refer to your OS
documentation if that does not work. - Run the
copy-statecommand:zebrad -c zebrad-source.toml copy-state --target-config-path zebrad.toml. The command will take several hours to
complete.
Fixed
Contributors
Thanks to @ebfull for reporting the bug and helping investigating its cause.
Zebra 2.4.1 - [REMOVED]
This version of Zebra wasn't fully published; it was tagged but the tag was
removed, and it was published on crates.io but it was yanked. It was not
published on Docker Hub.
We removed it due to a panic that happened during the pre-release validation.
However, we determined that the panic was caused by an external tool (ldb checkpoint) being used internally to make database backups and it was not a bug
in Zebra.
Zebra 2.4.0 - 2025-07-11 [REMOVED]
Breaking Changes
This release has the following breaking changes:
- This release contains a major database upgrade. It will upgrade an existing
database, automatically moving it from thev26/folder to a newv27/
folder. However, downgrading is not possible. If you want to keep the
possibility of reverting Zebra in case of an unexpected issue, backup the
v26/folder before running the upgraded Zebra. Note that the upgrade is slow
and could take several hours or more to complete on smaller machines. Zebra will
operate normally during that time; the only difference is that some RPC
responses might return empty or not accurate data (pool values for arbitrary
block heights and received balances for addresses). - While this was never documented as an option for backups, if you relied on the
ldb checkpointtool to generate database backups, be advised that the tool
is no longer supported and will corrupt databases generated or touched by
Zebra 2.4.0 or later releases. - The
debug_like_zcashdconfig option for mining is no longer available. It
was not enabled by default; if it is now present in the config file, Zebra
will panic. Simply delete the config option to fix. - The
cm_ufield byte order was fixed ingetrawtransaction/getblock
response, so if you relied on the wrong order, you will need to fix your
application. - The
zebra-scanandzebra-grpccrates are no longer supported and were
removed from the codebase.
Security
- Fix a consensus rule violation in V5 coinbase transactions at low heights. This issue could only occur on Regtest or custom testnets and is now resolved (#9620)
Added
- Implemented deserialization for Zebra's block and transaction types (#9522)
- Update
getaddressbalanceRPC to returnreceivedfield (#9295, #9539) - Added a
mempool_change()gRPC method for listening to changes in the mempool (#9494) - Added
raw_valuefeature to serde_json (#9538) - Modified
zebra_network::Configtype to use IPv6 listen_addr by default (#9609) - Added
invalidateblockandreconsiderblockRPC methods (#9551) - Updated
(z_)validateaddressto validate TEX addresses (#9483) - Added a
addnodeRPC method (#9604) - Added missing fields to getrawtransaction (#9636)
- Added value pool balances to
getblockRPC output (#9432, #9539) - Added support for configuring shielded addresses for mining (#9574)
- Added binding_sig, joinsplit_pub_key and joinsplit_sig fields to
getrawtransaction/getblockresponse (#9652) - Added a method in
zebra-rpcto allow validating addresses (#9658)
Changed
- Allow Zebra crates to be compiled with alternative versions of their dependencies (#9484)
- Updated README with Arch build patch (#9513)
- Renamed and moved exports in
zebra-rpc(#9568) - Upgraded DB format to support new fields in RPC outputs (#9539)
- Moved GBT RPCs into the main RPC server (#9459)
- Added a
Nu6_1variant toNetworkUpgrade(#9526) - Use zcash_script’s new
Scripttrait (#8751) - Removed
debug_like_zcashdconfig option (#9627) - Sync all chains in
TrustedChainSync::sync, addNonFinalizedStateChangegRPC method (#9654) - Added
prometheusas a default feature in zebrad (#9677)
Fixed
- Preserve order of RPC output fields (#9474)
- Fixed
cm_ufield byte order ingetrawtransaction/getblockresponse (#9667) - Avoid repeatedly converting transactions to librustzcash types when computing sighashes (#9594)
- Correctly set optional
scriptPubKeyfields of transactions ingetblockandgetrawtransactionRPC outputs (#9536) - Allow local outbound connections on Regtest (#9580)
- Allow for parsing
z_gettreestateoutput type where optional fields are omitted (#9451)
Removed
- Removed
zebra-scanandzebra-grpc(#9683)
Contributors
Thank you to everyone who contributed to this release, we couldn't make Zebra without you:
@ala-mode, @arya2, @conradoplg, @elijahhampton, @gustavovalverde, @idky137, @mpguerra, @oxarbitrage, @sellout, @str4d and @upbqdn