Zcash Web Wallet - A Privacy-Preserving Browser Wallet

`TL;DR: We built a self-custodial Zcash wallet that runs entirely in your browser. No backend, no tracking, no account needed. Your keys never leave your device.

Live demo: Zcash Web Wallet
GitHub: GitHub - LeakIX/zcash-web-wallet
Video: https://x.com/dwillems42/status/2006037125762777143 and https://x.com/dwillems42/status/2005966595852513431

Note: This wallet has only been tested on testnet so far. We plan to polish it further before recommending mainnet use. Please test with testnet ZEC first!


Who We Are

This project is developed by the LeakIX team. At LeakIX, we support privacy-focused projects and build tooling and maintain infrastructure for the privacy community. Zcash Web Wallet is part of our commitment to making privacy-preserving technology more accessible to everyone.

This is an independent project - not funded by any grant. We’re building this because we believe in Zcash and privacy-preserving technology.


What is it?

Zcash Web Wallet is a privacy-preserving wallet toolkit that runs 100% client-side in your browser. All cryptographic operations happen locally using the official Zcash Rust libraries (zcash_primitives, orchard, sapling-crypto) compiled to WebAssembly.

This means:

  • Your seed phrase never leaves your browser
  • Your viewing keys stay on your device
  • No backend server to trust (or get hacked)
  • No account registration required
  • Works offline after initial load

Current Features

Simple View (Default)

Perfect for everyday users:

  • Balance display with Mainnet/Testnet indicator
  • Receive - Show your address with copy button
  • Send - Send transparent transactions
  • Recent transactions - View your transaction history with timestamps and explorer links

Advanced Features (Admin View)

For power users who need more control:

Wallet Management

  • Generate new wallets (24-word BIP39 seed phrases)
  • Restore existing wallets from seed phrase
  • Support for both Mainnet and Testnet
  • Multiple wallet support

Transaction Scanning

  • Scan transactions using your viewing key
  • Decrypt shielded outputs (Sapling & Orchard)
  • Track notes (spent/unspent status)
  • Balance breakdown by pool (Transparent, Sapling, Orchard)

Address Derivation

  • Derive transparent addresses (t1/tm)
  • Derive unified addresses (u1/utest1)
  • Duplicate address detection (Sapling diversifier behavior)
  • Save addresses to wallet for scanning
  • Export as CSV

Accountant View

  • Transaction ledger with running balance
  • Export to CSV for tax reporting
  • Cost basis tracking

Other Features

  • Dark/Light mode
  • Mobile-friendly interface
  • Multiple RPC endpoint support
  • Transaction broadcast capability

The Mindset

Why another wallet?

We wanted a wallet that:

  1. Respects privacy by design - Not just in the Zcash protocol sense, but in how the wallet itself operates. No analytics, no telemetry, no usage tracking.

  2. Is truly self-custodial - Many “web wallets” are just interfaces to custodial services. This wallet has no backend. Period.

  3. Uses official libraries - No reimplementation of cryptography. The WASM module wraps the same Rust libraries used by zcashd and other official tools.

  4. Is open source and auditable - Every line of code is on GitHub. You can build it yourself, verify the deployed version matches the source, or host your own instance.

  5. Works everywhere - No app store approval needed. Works on any device with a modern browser.

Architecture

Browser                                        Zcash Node
   |                                               |
   |  1. User enters viewing key + txid            |
   |                                               |
   |  2. JavaScript fetches raw tx via RPC         |
   |----------------------------------------------â–ş|
   |  3. Raw tx hex returned                       |
   |â—„----------------------------------------------|
   |                                               |
   |  4. WASM decrypts locally                     |
   |     (keys never leave browser)                |

The wallet connects directly to Zcash RPC endpoints (like lightwalletd or your own node). Transaction data flows from the node to your browser, where it’s decrypted locally. Your keys never touch a server.


Current Status & Roadmap

Current Status

The wallet is functional but still in active development. We have only tested on testnet so far and plan to polish it further in the near future before recommending mainnet use. We’re sharing it now to gather feedback from the community.

Future Plans

We’re actively working on this project. Here’s what’s coming:

Short-term

  • QR codes for receiving addresses
  • Transaction confirmation tracking
  • Automatic UTXO fetching from explorer APIs
  • More thorough mainnet testing

Medium-term

  • Orchard shielded transaction signing
  • Hardware wallet integration (viewing key export)
  • Viewing-key-only mode (read-only wallets)
  • End-to-end test suite

Long-term

  • Native mobile app (Zashi-equivalent experience)
  • DEX integration
  • Full shielded send support

Check the GitHub Issues for the complete list and to suggest features.


Technical Details

For the developers in the room:

  • Frontend: Vanilla JavaScript + Bootstrap 5 + Sass (no framework bloat)
  • Crypto: Rust compiled to WASM using wasm-pack
  • Libraries: zcash_primitives, zcash_keys, orchard, sapling-crypto
  • Storage: localStorage (all data stays in your browser)
  • Deployment: GitHub Pages (static hosting, no server)

The codebase is modular - the core Rust library is shared between the WASM module and a CLI tool, making it easy to maintain and test.


Try It Out

  1. Visit Zcash Web Wallet
  2. Generate a new testnet wallet (or restore an existing one)
  3. Get some testnet ZEC from a faucet
  4. Scan your transactions and watch your balance update

Important: This is experimental software that has only been tested on testnet. Please read the disclaimer and don’t store more funds than you’re willing to lose. Always backup your seed phrase securely.


Get Involved

This is an open source project and contributions are welcome!

  • Report bugs: GitHub Issues
  • Contribute code: PRs welcome
  • Suggest features: Open an issue or comment below
  • Spread the word: Share with others who might find it useful

Connect

LeakIX


We’d love to hear your feedback, questions, and suggestions. What features would make this most useful for you?


Built with privacy in mind by the LeakIX team. No tracking. No backend. Just Zcash.

8 Likes

Nice, :+1:t2: :+1:t2: shared

2 Likes

Why another wallet?

Recently I was walking in a major airport and noticed how many high priced wallets were for sale, the prices are mind boggling. The back of a napkin calculation last time was 73% of issued zec are held in transparent addresses. Personally, this shows me the wallets on offer (which are nice) for current and potential users are capturing a small slice of the zec issued than shield. Like all the expensive airport wallets, zec needs more wallet offerings to capture more of the market.

No app store, just the browser. Is an important note for all users.

I hope you keep up the effort!

Without using a browser extension, how do you prevent the server hosting the code from pushing a malicious update that steals users’ funds? Are users expected to self-host or run the server locally?

1 Like

Good question, thank you for the constructive feedback. I will post an update soon regarding this. Working on finalizing a solution now.

v0.2.0 Release - Integrity Verification & Auditability

Hey everyone,

Following up on @earthrise’s question about verifying deployed code matches source - we’ve shipped v0.2.0 with a focus on integrity verification and auditability.

What’s new:

Integrity Verification

  • New verification indicator in the footer shows if the app passes integrity checks
  • Click it to open a modal where you can verify the app against any specific commit, branch, or tag
  • All checksums are computed client-side and compared against the repository

Auditability Improvements

  • All generated artifacts (WASM, CSS) are now tracked in Git
  • Generated files must be committed separately from source changes - making audits clearer
  • Checksums are verified before every deployment to GitHub Pages
  • Pinned Rust nightly version for reproducible builds (automatically updated weekly via GitHub Actions)

UI Enhancements

  • Receive dialog now shows both unified and transparent addresses
  • Fixed: wallet list now refreshes in the address viewer when adding a new wallet

For auditors/developers:
The zcash-web-wallet/RELEASE.md at develop · LeakIX/zcash-web-wallet · GitHub is now documented. Every deployed file has a checksum in CHECKSUMS.json, and CI enforces that generated files are in dedicated commits for easier review.

What’s next:
This doesn’t fully address the audit question yet. Our focus is on ensuring the deployed version on any server matches the source code hosted by an external party. We also want the verification code itself to be auditable - we’ll improve it step by step. We’re working on notifying users when a new version is deployed, and providing a way to view and verify differences between versions.

The end goal is to provide full auditability from a first release version, so that subsequent releases and audits only need to focus on the files changed in the changelog - not the entire codebase each time.

Our approach is to ship now and iterate quickly. We’re adding tests (including UX/UI) to ensure we don’t break features over time.

Still testnet-recommended while we continue hardening. Feedback welcome as always.

GitHub: GitHub - LeakIX/zcash-web-wallet
Release: https://github.com/LeakIX/zcash-web-wallet/releases/tag/v0.2.0
Website: Zcash Web Wallet

1 Like

Just wanted to say that this is a great initiative, started trying it out! I think this is something that has been lacking in the ecosystem and can be really useful.

If you are ok with it, I would like to contribute.