Tools

Web app

app.cowlprotocol.com runs the whole protocol in a browser tab. Shield, private send, receive, private swap, and your shielded portfolio — same pool, same proofs, same contracts as the CLI. Nothing to install and no toolchain.

Mainnet · Live
Every surface below runs on Robinhood Chain mainnet today. Proofs are generated in your browser, on your machine, and the site is a static export with no server behind it — there is nothing to hand your keys to.

What is in it

Swap
Private swap
Both sides typeable. Quotes scan every Uniswap V3 fee tier and take the best fill, and a token-to-token pair routes itself through native in two private legs.
Shield
Shield & unshield
One card, two directions. Deposits become notes; withdrawals leave in shared denomination sizes unless you ask for an exact amount.
Send
Private send
Pay any zcowl1… address from your shielded balance. No token transfer appears on the explorer, and the recipient never signs anything.
Receive
Receive
Your shielded payment address and its QR. Share it anywhere — it is not an account anybody can watch.
Portfolio
Shielded portfolio
Every asset you hold inside the pool, priced, with the public side beside it. Read from your own keys, never from an API.
Notes
Merge
Fragmented notes get merged on demand, and the modal shows the bill — rounds, fee per round, total — before anything runs.

Your keys, derived from a signature

Connect a wallet, then unlock. Unlocking asks your wallet for one signature and derives your shielded spending and viewing keys from those bytes. The keys live in the tab for the session. They are never uploaded, never escrowed, and no part of Cowl can reconstruct them — the same wallet on any machine derives the same shielded account, and a different wallet derives a different one.

Connect
any EVM wallet
public address only
Unlock
one signature
shielded keys derived locally
Scan
replay the note tree
your notes, opened by your key
Spend
prove in-browser · relayer submits
Only sign the unlock message on app.cowlprotocol.com

The derivation is deterministic, so that signature is your shielded account. The same bytes open the same book from anywhere.

Cowl asks for it on app.cowlprotocol.com and nowhere else. If another site asks you to sign the unlock message, treat that the way you’d treat a site asking for your seed phrase and walk away. Your wallet shows you the text before you approve, so read it.

Want harder separation? Run a keystore account from the CLI instead. It derives from your private key, never from a signature.

Same book from the terminal
The app account and a CLI keystore account are two different shielded accounts by construction. To open the app’s book from the terminal, point the CLI at the same derivation: cowl config set shieldedAccount sig-v1. Check that cowl receiveprints the address on the app’s Receive tab before you move anything.

Proving happens in your tab

Every spend is a zero-knowledge proof, and the app builds it in a web worker on your own machine. A transfer proof takes about 2.3 seconds and a shield proof about 0.9. The first run of a session is slower because the proving system fetches its reference string once and caches it; after that the cards prove at full speed.

Nothing about your amounts, assets, or counterparty leaves the tab in the clear. What reaches the chain is a proof, two commitments, and two nullifiers.

Who pays the gas

Every spend surface carries a gas payer chip. Gasless is the default: the relayer submits the transaction and takes its fee from inside the same proof, so your wallet never appears as the gas payer. Pick you instead and your own wallet submits it and pays gas in ETH. Someone always pays the gas; gasless just means it is not you.

If a relayer is unreachable, or an asset has no route to price a fee against, the card falls back to self-paid and says so rather than failing.

Amounts leave in shared sizes

Boundary amounts default to shared denomination sizes, so what you withdraw looks like what everybody else withdraws. An exact opt-out is one toggle away when a counterparty needs a precise figure. Private sends between two shielded accounts are not on the boundary at all and carry no such constraint.

Errors say what happened

Rate limits, a relayer running low, a stale root, a spent note, venue slippage, a gas shortfall — each one gets a sentence naming what happened and what to do about it, with the raw line underneath for when you want it. Runs that outlive their sync deadline republish balances when the chain catches up, so a green run never leaves stale numbers on screen.

Limits worth knowing

RuleWhy
Private sends are capped during betaA single private send tops out at $200 of value, priced on chain. Withdrawals and swaps are not capped — the door out is always open.
Shield is never gaslessA relayer fee comes out of notes already inside the pool, and a deposit has none yet. See the relayer.
One spend reads two notesSo the most you can move at once is the sum of your two largest notes, not your balance. Merge first — the app offers it exactly when it matters.

Start