Migration Guide: From zcashd to Zebrad/Zallet
The traditional zcashd full node, maintained by Electric Coin Company (ECC) / Zodl, has been replaced by Zebra and Zallet. zcashd reached its end-of-support halt on 18 July 2026 and no longer runs.
- Zebra is a modern Rust implementation of the Zcash protocol developed by the Zcash Foundation
- Zallet is a lightweight wallet built to interface seamlessly with Zebra nodes developed by Zodl
This guide walks you through the migration from zcashd to Zebrad and Zallet, including setup, wallet import, and troubleshooting common migration issues.
zcashd stopped running on 18 July 2026
What this means
- zcashd reached its end-of-support halt on 18 July 2026. It will not sync to the chain tip again, and it cannot send or receive funds. This is finished, not planned.
- zcashd's two jobs are now split: zebrad is the full node, and Zallet is the wallet.
- Zallet is in beta. Breaking changes can occur between releases, and some zcashd JSON-RPC methods are not implemented yet. Check the method status matrix before you depend on a specific call.
- If you still hold Sprout funds, read the warning in step 6 first. Zallet does not support the Sprout pool, and the usual way to move those funds required a running zcashd.
Why Migrate - Beyond Deprecation
Even leaving deprecation aside, there are compelling reasons to move:
- Security & Robustness: Rust's memory-safety and modern tooling reduce risks of vulnerabilities.
- Performance & Efficiency: Zebrad is designed for parallelism, more efficient resource usage, and faster sync.
- Modular Architecture: Separating node logic (Zebrad) from wallet UI (Zallet) offers clearer boundaries and better upgrade paths.
- Future Ecosystem Compatibility: Tools, enhancements, and the rest of Zcash's ecosystem will increasingly target Zebrad/Zallet.
- Peace of Mind: Avoid being stuck running a deprecated, unsupported component.
Now let's dive into the Migration guide
1. Backup Everything
- Backup your wallet.dat (or any other wallet file / key store) from your zcashd node.
- Save your zcash.conf and any custom settings.
- Export a copy of any RPC scripts or automation you use.
- Verify that your backups are valid (e.g. in another environment, try to open or inspect them).
- Review which JSON-RPC methods you're currently relying on.
- Compare against the planned compatibility table maintained on the Zcash support site
- Prepare for changes or missing methods (some might need workaround or adaptation).
2. System Requirements & Disk Space
- Disk space is the requirement people underestimate. The Zcash chain passed 270 GB in August 2026, so allow at least 300 GB of free space, on an SSD if you can.
- Ensure your machine has stable network, CPU, RAM.
- An internet connection
- If you plan to compile from source, have Rust & Cargo installed.
3. Install / Setup Zebrad
You can either download a prebuilt binary or build from source.
Option A: Install via prebuilt binary
On Linux/macOS:
This installs the latest stable version of zebrad.
Option B: Build from source
After building, move the binary into your path:
4. Configuration & Launch
Generate a default config:
Edit zebrad.toml to your preferences (listen address, ports, state directory, caching).
Start the node:
The node will begin syncing from genesis - expect several hours (or more) depending on hardware and network.
5. Install / Setup Zallet (Wallet)
Zallet is designed to replace the wallet portion of zcashd.
Check the Zallet GitHub / release page for binaries.
Or build from source:
- Launch the GUI or CLI (as your installation provides).
- Configure it to connect to your local Zebrad node via RPC or API endpoint.
6. Importing Your zcashd Wallet into Zallet
You do not need a running zcashd for this. Zallet reads the wallet.dat file directly, which matters because zcashd can no longer be started.
Keep wallet.dat. The migration reports anything it cannot represent in a Zallet wallet instead of importing it, and that key material then exists only in wallet.dat. Do not delete it after migrating.
Run zallet init-wallet-encryption first. Zallet encrypts key material to an age identity, and that identity has to exist before any keys are imported.
Then convert your config and your wallet:
Code-highlight
# translate zcash.conf into zallet.toml
zallet migrate-zcash-conf --zcashd-datadir /path/to/zcashd/datadir -o /path/to/zallet/datadir/zallet.toml
# import wallet.dat into Zallet's wallet.db
zallet migrate-zcashd-wallet --zcashd-datadir /path/to/zcashd/datadir
migrate-zcashd-wallet is only present in builds with the zcashd-import feature, and reading wallet.dat needs the db_dump utility from Berkeley DB 6.2, the version zcashd used. If you have more than one wallet file, run the command once per file and add --allow-multiple-wallet-imports on the later runs; each becomes its own set of accounts. Your rpcuser and rpcpassword are not carried over, because Zallet's JSON-RPC uses cookie authentication by default; add credentials with zallet add-rpc-user if you need them.
What comes across
- Mnemonic seeds and the keys derived from them, with accounts rebuilt to match the zcashd wallet
- Standalone imported Sapling spending keys and transparent keys
- Transparent watch-only entries that include their public key or redeem script
- Account birthdays, so chain scanning starts at the right height
What does not come across. These are reported with counts rather than imported:
- Sprout spending keys and funds. Zallet does not support the Sprout pool. The documented route was to move Sprout funds out using zcashd before retiring it, and that is no longer possible. If this affects you, ask on the Zcash R&D Discord or the community forum before doing anything else.
- Address book entries
- Watch-only entries stored without a public key or redeem script, and entries with uncompressed public keys
- Regtest wallets
Backing up afterwards. A mnemonic on its own is not a complete backup, because imported keys exist only in the wallet database. Keep secure copies of wallet.db, the age encryption identity file named by the keystore.encryption_identity option, and your mnemonic phrase, and keep the original wallet.dat. Note that wallet.db is not itself encrypted: it holds your transaction history and viewing keys in the clear, so store the backup somewhere safe.
Wallet Rescan & Synchronization
- Once the keys are imported, Zallet will trigger a rescan of the chain via Zebrad.
- Allow some time for Zallet to rebuild your balance and transaction history.
7. Verify Balances and Sync
Once imported, Zallet will connect to your Zebrad node and rescan the blockchain.
When synchronization completes, your balances and transactions should appear exactly as before.
You can verify your node's sync status by running:
Or check logs.
8. Troubleshooting
| Issue | Possible Cause | Solution |
|---|
| Zebrad won't start | Port in use or bad config | Check zebrad.toml and use a free port |
| Slow sync | Network congestion | Ensure stable internet, restart Zebrad |
| Wallet missing transactions | Partial key import | Re-import keys or rescan in Zallet |
| Zallet can't connect to node | Node not running or wrong endpoint | Start Zebrad and verify correct RPC port |
| Zallet crashes | Outdated build | Update to latest release from GitHub |
9. Conclusion
Migrating from zcashd to Zebrad and Zallet gives you a faster, safer, and more modern Zcash experience.
With Rust-based security, modular design, and better tooling, this setup ensures your node and wallet remain future-ready as the Zcash ecosystem continues to evolve.
Tip: Keep your wallet keys offline and regularly back up your Zallet data.
Visit zebra.zfnd.org for Zebra, and The Zallet Book or the Zallet repository for Zallet. The Migrating from zcashd chapter of The Zallet Book is the authoritative reference for step 6.