Privacy-first · tracks the coins other trackers don’t
  • Bitcoin
  • Ethereum
  • Monero
  • Zcash
  • Solana

Client-side encrypted — zero-knowledge by design

Your crypto holdings.
Encrypted before they leave your device.

StealthLedger is a private portfolio tracker for crypto and cash — one screen for what you actually own. Your holdings are sealed with AES-256-GCM in your browser; the server stores an opaque blob it has no key to open.

Mac / iPhone app
Download on the App Store Coming soon Google Play

Invite-only Signups need a one-time code from someone who already has one.

  • Passkey login — no phrase to remember
  • Zero-knowledge — server never sees plaintext
  • Source available — the crypto module is public, and its hash is pinned

The whole idea, in one picture

What the server sees vs. what you see.

Same data. Two views. The one on the left is the only one that ever leaves your device.

What the server stores

Ciphertext. That's it.

Opaque AES-256-GCM output. No coin names, no amounts, no cost basis. A stolen database is a stolen blob — attacker still has no key.

What you see (locally decrypted)

Your actual portfolio.

BTC 0.874 $94,400
ETH 12.5 $47,500
XMR 38.0 $11,970
Total $153,870

Rendered client-side from a locally decrypted vault. The server watched the ciphertext go by and learned nothing.

Sample numbers. Your vault, your keys, your privacy.

Preview

Everything on one screen — including cash.

Most trackers only see crypto. Yours knows about your bank accounts too, so the number at the top is what you actually have.

Demo — sample data
Grand total (USD) $18,650 +2.14% · 24h
Crypto $13,950 6 holdings
Cash $4,700 4 accounts
Portfolio value $18,650
+$391 (+2.14%)
30 days · crypto + cash baseline
Allocation $13,950
6 holdings
Cash accounts $4,700
most trackers can’t do this
  • EverydayUSD$1,850
  • SavingsUSD$2,200
  • WalletUSD$450
  • EmergencyUSD$200

Encrypted in your browser

AES-256-GCM with a key derived from your vault passphrase via scrypt. The plaintext never leaves your device — not to the server, not to a CDN, not to logs.

Passkey-first login

Face ID, Touch ID, Windows Hello, or a hardware key. WebAuthn PRF becomes your login secret — nothing to type, nothing to phish, nothing for an attacker to grind against.

Tamper-evident sync

Every write is bound to a monotonic sequence and authenticated with the same key that decrypts it. Rollback and cross-vault splice attacks both fail the same authentication check.

Zero-knowledge by construction

A stolen database gives an attacker no shortcut. The server holds a scrypt verifier and ciphertext; the key that unlocks either only ever lives in your device's memory.

Koinly sync, optional

Bring your Koinly holdings in as a live section — read-only, on your device, cached against your API key. Or don't; the app works entirely with hand-entered holdings if you'd rather nothing third-party ever sees your ledger.

Multi-currency & cash side

Track crypto and cash in one view, priced in your local currency — USD, EUR, GBP, AUD, and more. Bank balances live next to XMR bags; the grand total is one number.

Share the shape, not the size

One tap renders a shareable card of your allocation and trajectory with the dollars stripped — the shape of your portfolio, without the size of your bag. Copy image, or copy image + caption, straight into Telegram or Signal.

Chart what actually happened

Toggle between crypto-only, crypto + cash, and a per-asset view. The line is computed from your holdings against real historical prices, so growth isn't inflated by deposits — you see market movement on the coins you already own.

See it in action

A real portfolio, running privately in your browser.

This is the actual app after unlock. Every number below was rendered client-side from a locally decrypted vault. The server watched ciphertext go by.

StealthLedger portfolio view showing grand total, Koinly section, private external holdings, and cash accounts in AUD.
Sample data. Click the preview to try the demo.
Try the demo No signup. Sample data only.

How it works

A few taps. Then it just works.

No email, no exchange logins, no wallet addresses. Sign up, add what you hold, keep it locked — and take the whole thing with you.

Every step happens in your browser. Nothing readable leaves your device.

Under the hood

Cryptography chosen for what it can't do.

Standard primitives, boringly configured. Nothing custom, nothing clever — the encryption module is published, its hash pinned, and the threat model is open for review. Read the security spec →

Symmetric encryption
AES-256-GCM with per-write 96-bit IV and additional authenticated data binding each ciphertext to its vault and sequence number.
Key derivation
scrypt N=2¹⁶, r=8, p=1 for the vault key. About 64 MB of memory per guess — unfriendly to any brute-force cluster.
Login secret
Passkey PRF or scrypt-stretched passphrase. Only a verifier reaches the server; the secret itself never does.
Transport
Same-origin fetch under a strict Content-Security-Policy: no inline scripts, no third-party origins, no remote fonts.
Session
HttpOnly session cookie plus a CSRF token echoed on every write. No token in local storage, no bearer to leak.
Recovery
A one-time recovery code shown at vault creation. No email reset, no support back-door — the operator has nothing to give away.

FAQ

Questions worth answering upfront.

Is the encryption code open source? Can I verify it?

Yes. The full cryptographic core — the vault-core.js your browser runs and the iOS Swift VaultCore — is published for independent audit, and every primitive is standard (AES-256-GCM, scrypt, HKDF-SHA-256) with published parameters. The SHA-256 hash of the live module is pinned on the verify build page so you can confirm the bytes in your browser match the source.

Is my portfolio actually private?

Yes, at the level we can prove in the browser. Your holdings are encrypted on your device with AES-256-GCM before they ever leave. The server sees only a blob of ciphertext plus a monotonic sequence number. The key never touches the network.

Is there a Tor onion mirror?

Yes. StealthLedger is reachable as a Tor hidden service. The current onion address is shown in the Tor mirror section on the home page; open it in Tor Browser to use the same app without a clearnet hop.

It is a preview for now. The mirror is not always reachable yet while we prepare continuous hosting. If it times out, try again shortly. It stays on one stable address across restarts, so you can bookmark it.

Why won’t my passkey work over Tor or in Lockdown Mode?

Hardened privacy browsers disable WebAuthn, the browser API that passkeys depend on. Tor Browser disables it entirely, and iOS Onion Browser in its high security setting (which turns on Apple’s Lockdown Mode) does the same. Passkeys are also bound to the site’s normal domain, so a passkey created on the clearnet site can’t be reused on a .onion address.

The fix is to set a login passphrase before you need it. Open Settings, then Security, and add a login passphrase. Over Tor or with Lockdown Mode on, sign in with that passphrase or with your 12 word recovery phrase. Passkeys keep working as normal on the clearnet site.

Account number or username — what's the difference?

Every account gets a permanent 12-digit account number when you sign up, like 1234-5678-9012. It's unique, immutable, and reveals nothing about you. You can log in with it forever, from any device.

A username is optional. It's a memorable handle you pick (letters, numbers, underscore, hyphen) that also works for login. You can set one at signup, add it later, or never set one at all.

Privacy trade-off: an account number is randomly assigned and leaks nothing about you. A username you pick is visible to anyone you share it with, and it can be linked back to you if it matches a handle you use elsewhere. If you'd rather stay fully anonymous, leave the username field blank and save your account number somewhere safe. If you want something easier to type, set a handle that isn't tied to your real identity.

Either way, both identifiers work for login. And you can always find your account number in Settings → Account.

Why do I have two passkeys — “Sign-in” and “Vault”?

Two passkeys, two jobs, so the server can never decrypt your data even if it wanted to.

“Sign-in” passkey — proves who you are to the server. When you tap it, the server checks a cryptographic proof and sends back your encrypted portfolio file. The server never sees anything inside that file.

“Vault” passkey — decrypts that file in your browser. The key it derives never leaves your device. Even if we got hacked or subpoenaed, we couldn’t hand over your portfolio because we don’t have the key.

You’ll see both entries labelled in iCloud Keychain / Google Passwords: 1234-5678-9012 · Sign-in and 1234-5678-9012 · Vault. Two passkeys per device is the design, not a bug.

What does the server actually see?
  • Your account number, plus a username if you chose one — either works for login.
  • A scrypt verifier of your login secret — passphrase or the secret derived from your passkey. The secret itself never leaves your device.
  • If you signed up with a passkey: the credential ID, so we can prompt the right one next time. Never the private key.
  • Your email, only if you chose to add one.
  • Your encrypted vault — unreadable without your vault passphrase.
  • An audit trail: when your vault changed and how big it got. Never what changed.
What is the 12-word recovery phrase?

Twelve English words drawn at random from a fixed 2048-word dictionary (the same BIP-39 list Bitcoin and Ethereum wallets use). Written down on paper it's your master backup: bring the phrase to any browser and you can sign back into your account and decrypt your vault, even if you've lost every device you own.

The phrase is generated in your browser from your operating system's cryptographic random-number generator. It's never sent to the server, not while you're signing up and not afterwards. The server stores a scrypt verifier of the phrase — enough to check you know it, not enough to guess it. 12 words gives you 128 bits of entropy, which is more than enough to be safe against any brute-force attack anyone can build.

The same phrase unlocks two things: it logs you in to the server (which then hands you your encrypted vault), and it decrypts the vault in your browser. One phrase, one thing to write down.

What if I lose my recovery phrase?

If you still have a device signed in, open Settings → Sign-in & security and add a passkey or a memorised passphrase as a fallback. Do it before you lose that device.

If you've already lost every device and the phrase, your vault is gone. We can't reset it — we don't have the key, and neither does anyone else. The one exception is if you saved the recovery code we showed you at signup: paste that in and it works as a last-resort unlock.

This is the security trade-off. Any system where staff can “reset” your account is a system where staff (or an attacker with staff access) can read your data. We opted out of that.

Is the recovery phrase generated safely?

Yes. It's produced entirely in your browser by crypto.getRandomValues(), the WebCrypto API your browser exposes to the operating system's CSPRNG (Secure Enclave on Apple hardware, TPM on Windows, kernel RNG on Linux). There is no server round-trip, no analytics, no logging. The 128 random bits are mapped to 12 BIP-39 words using the standard checksum construction, so the phrase you get is a valid BIP-39 mnemonic that would work in other wallets that use the same derivation.

You can hit Regenerate as many times as you like before you write anything down — each draw is independent. Once you tick the “I've written it down” box and continue, we wipe the words from the page and from memory, so re-opening the signup form won't show them again.

How do I sign in with my 12-word recovery phrase?

On the login screen, type your account number (or username), then tap Recovery phrase on the toggle above the credential field. You get a grid of 12 numbered boxes, just like a hardware-wallet restore screen.

The fastest path: tap Paste phrase. That reads your clipboard and splits the phrase across all 12 boxes automatically. You can also paste into any single box — if you pasted more than one word, we’ll spread the tokens across the following boxes. Or just type: Space or Enter jumps to the next box, Backspace on an empty box jumps back.

Words are hidden by default (looks like a password). Tap Show words to double-check before you sign in, Clear to wipe every slot and start over. Once you tap Log in we join the words with single spaces, lowercase, and derive the login proof the same way signup did — so as long as the 12 words are correct and in order, it works regardless of how you typed them.

What’s the “Skip the 12 words next time” card at the top of the app?

A one-off nudge that only appears when you’ve just unlocked with your 12-word recovery phrase AND your vault doesn’t have a passphrase or an unlock passkey yet. The recovery phrase is meant to be a break-glass, not a daily login — so we surface the two faster options in one place:

  • Add a passkey — biometric unlock (Face ID, Touch ID, Windows Hello). Only shown when your browser can actually do WebAuthn PRF, so it’s always an honest offer.
  • Set a passphrase — a memorised phrase you’ll type on unlock. Works everywhere, no hardware needed.

Both buttons deep-link into Settings → Sign-in & security and start the real flow — no shortcut around the confirm-and-reseal ceremony.

Two dismiss modes. Not now hides the card for this session — it comes back next time you unlock with the 12 words, in case you change your mind. Never show again silences it for this account on this device forever, for the user who genuinely prefers the recovery-phrase ceremony. Adding either credential also removes the card automatically. Your recovery phrase stays as your ultimate backup either way — nothing about adding a faster unlock deletes it.

What’s the difference between the Passphrase and Recovery phrase tabs at login?

Both prove who you are to the server; they’re just two different input shapes for two different kinds of secret.

Passphrase is a single field for a phrase you chose yourself — the one you set at signup or added later in Settings. You can hit the eye icon to reveal it, and the field respects your password manager (autofill works normally).

Recovery phrase is the 12-slot grid, meant for the phrase we generated for you at signup. Splitting it into 12 boxes means you can actually see each word, fix typos in-place, and confirm the position of each one — not possible with a single blob input.

Pick whichever matches how you signed up. If you added a memorised passphrase later in Settings, both paths work — use whichever secret you remember.

Passkey, passphrase, or recovery phrase — which should I pick?

Default to recovery phrase. Twelve random words on paper is the most portable, most future-proof way to keep access — works on any browser, any device, no vendor lock-in, no biometrics that might not exist in ten years. This is why hardware wallets use the same design.

Pick passkey if you value tap-to-unlock over portability. Your device (Face ID, Touch ID, Windows Hello, a hardware key) holds a private key that never leaves it; on login the browser asks the device for a per-site secret and we stretch that with the same scrypt KDF the passphrase path uses. Nothing to remember, nothing to phish — but you're tied to the device.

Pick your own passphrase if you'd rather memorise a phrase you chose yourself, or if you plan to log in from browsers where passkey roaming is awkward.

There are actually two secrets, doing two different jobs. Login proves who you are to the server so it hands over your encrypted file. Unlock then decrypts the file inside your browser — the server never sees the unlock key. Both can be passkeys, or one passkey and one passphrase, or both passphrases. The most common setup is: login passkey + unlock passkey, so a normal visit is a single Face ID prompt.

Your vault passphrase stays as a fallback either way — it's what protects your holdings if you ever lose every device that holds a passkey.

Which button do I use on the login screen?

Whichever credential you actually have. The login screen shows all methods at once so you don't have to hunt for yours:

  • Sign in with passkey — tap if you added a login passkey (Face ID / Touch ID / Windows Hello / hardware key). You can leave the account field empty and the OS will pick the right passkey; or type your account number first and we run a targeted single-tap ceremony against that account.
  • Passphrase — the default text field. Enter the memorised passphrase you chose at signup (or after an Add login passphrase in Settings).
  • Recovery phrase — tap the tab next to Passphrase. This is the 12 words you wrote down at signup; treat it as the break-glass path when everything else is unavailable, not the day-to-day login.

If you're not sure which you set up, try the passphrase field first — it fails safely and tells you what to try next. Nothing about the login screen depends on the value you typed until you submit, so pasting an account number won't hide anything.

Login vs unlock — why are there two steps?

Because they do different jobs and only one of them can involve the server.

  • Login is between you and the server. It proves you’re allowed to have the encrypted file, and the server hands it over. A login passkey or login passphrase unlocks this step.
  • Unlock is entirely in your browser. It decrypts the file the server just handed you — the server never sees the key. An unlock passkey or vault passphrase unlocks this step.

So there can be up to four credentials on a full account: a login passkey, a login passphrase, an unlock passkey, and a vault passphrase. Most people set one on each side and forget about it. Settings groups all four under “Sign-in & security,” with Quick sign-in for the day-to-day credentials and Vault unlockers for the local decrypt step.

Rule of thumb: if a screen is titled Log in, it wants a login credential. If it’s titled Unlock your vault, it wants an unlock credential. Adding a passkey on one side doesn’t add it on the other — they’re independent.

I added a passkey but it’s still asking for a passphrase

You added it on one side; the other side doesn’t have one yet. The most common case: you added a login passkey, signed in with a tap, and then the unlock screen asked for your passphrase because the vault itself doesn’t know about a passkey yet.

Fix it in Settings → Sign-in & security → Vault unlockers → Add unlock passkey. That wraps the vault key with a passkey-derived secret and appends it to the vault’s unlockers, so next time the unlock screen offers a passkey button instead of the passphrase field.

Restoring a backup carries over whatever unlockers the backup had, which is usually just the original passphrase. Add an unlock passkey once, after restore, and you’re done.

What if I lose the device with my passkey?

If your passkey syncs (iCloud Keychain, Google Password Manager, 1Password, etc.) it comes back with your account. If it doesn't — say it lived only on one hardware key — the account is stuck. StealthLedger can't reset it because it has no shared secret to reset to.

Practical mitigations, in order of effort:

  • Enrol a second passkey on another device (Settings → Add another device). One on your laptop, one on your phone is the pattern.
  • Keep a login passphrase attached as a fallback — the signup flow lets you choose one, and Settings lets you add or change it later.
  • Write down your vault recovery code either way — that's what protects the actual holdings even if every device is gone.
What if I forget my login passphrase (or lose my passkey)?

Right now, the account is stuck. If we later add an email-based reset it will only reset the login, not decrypt anything — the vault contents are still gated by the vault passphrase.

Restoring a backup — what should I expect?

A backup file is your encrypted vault as it was on the day you exported it: same vaultId, same unlockers, same holdings. Restoring it into a new account overwrites whatever vault that account currently has and hands you back the old one. You’ll unlock it with the backup’s vault passphrase or recovery code — not the passphrase you just used to sign up.

The usual flow when moving between accounts or coming from the old single-tenant version:

  1. Sign up on the new site (any username you like).
  2. Log in, then head to Settings → Restore from backup… and pick the JSON file.
  3. Confirm the “different vault” warning; the app locks itself.
  4. Unlock with the passphrase (or recovery code) that opened the backup back when it was made.
  5. Optional but recommended: add an unlock passkey so future unlocks are one tap.

If the restore screen refuses your file, the fastest reset is Settings → Forget access token, log in again with the account passphrase, then retry.

Does Koinly import work on my phone?

No — the Koinly import is a bookmarklet you drag onto your desktop browser's bookmarks bar, and mobile browsers don't have one. Run the import once on a laptop or desktop and the resulting Koinly section syncs to your vault; from then on you can view it on mobile like any other section.

Are logins safe if the server gets dumped?

The server never stores your login secret. It stores a scrypt verifier with N=65536, r=8, p=1 — about 64 MB of memory per guess. A stolen database gives an attacker no help decrypting any vault; vault contents need the vault passphrase, which the server has never seen.

What if I forget my vault passphrase?

Your holdings are gone. Not "wait a while" gone — gone. There is no reset flow because there is no reset key. Set up a recovery code when you create the vault; that's the escape hatch.

What if the site owner turns evil?

Because the site serves you the JavaScript that touches your vault passphrase, a determined operator could push a poisoned build. We mitigate that with a strict Content-Security-Policy (no inline scripts, no third-party origins), a small hand-written codebase, and a published crypto spec you can diff against what your browser loads. The application code itself is proprietary; the encryption layer, threat model, and audit-log format are open for review.

How much does it cost?

The web vault is free. The app is free to download, with optional StealthLedger Pro subscriptions listed at A$6.99 monthly or A$49.99 annually in the Australian App Store. Prices vary by region. Check the App Store purchase screen for your local price and terms. Encryption, recovery and access to your own data do not require Pro.

Do I need to connect an exchange or a wallet?

No. You type in what you hold (or paste it from Koinly), and we fetch unit prices only — the same anonymous quote your browser can already get from CoinGecko. We never see, ask for, or store your exchange logins, wallet addresses, or API keys.

Does it work on my phone, iPad or Mac?

Yes. On iPhone, iPad and Apple silicon Mac, download the native app from the App Store. It requires iOS 16 or iPadOS 16 or later. On Mac it requires macOS 13 or later and an Apple M1 chip or newer. Unlock with Face ID or Touch ID on supported hardware.

On Android or any other mobile browser (Safari, Chrome, Firefox) the website works the same as on desktop and installs to your home screen with “Add to Home Screen.” Face ID / Touch ID / device passkeys give you the same one-tap unlock. The only thing you can’t do on mobile is the Koinly bookmarklet import — run that once on a laptop and the result syncs to your phone like anything else.

How is this different from Bitwarden or 1Password?

Same idea, narrower scope. StealthLedger is a purpose-built encrypted spreadsheet for crypto holdings — fewer features, smaller codebase. Bitwarden and 1Password are fully open source; StealthLedger publishes its crypto layer and threat model rather than the whole app.

Can I delete my account?

Yes, any time. Settings → Account → Danger zone → Delete my account. Type your account number (or username, if you set one) to confirm. It’s a hard delete — encrypted vault, sessions, all of it. No grace period, no undo. Export your data first from Settings if you want a copy.

Can I export or leave whenever I want?

Yes. Settings → Export encrypted vault downloads your holdings as an encrypted file you can restore later, and Delete account is a real delete — there’s nothing to hold on to anyway, since we can’t read what we’re storing.

Can I share my portfolio without revealing the amount?

Yes. Portfolio → Share renders a card you can copy or download. In anonymous mode the card shows your allocation shape, top holdings, 24h change, and a normalised trajectory line — no dollar values, no y-axis, no account names. Coin symbols are optional too; leave them off and the card just shows ranked slices (“#1, #2, …”).

“Copy image + text” bundles the PNG and a share caption into one clipboard action, so a paste into Telegram / Signal / Discord drops both together — useful for community shares where you want the link included.

What is “Hide amounts” for?

A one-tap toggle in the header that redacts every dollar value on screen without changing the chart shape — useful when checking your portfolio in public. Percentages, allocation, and 24h change still render; only the money is masked. Tap again to bring the numbers back. The state is remembered per device.

Can I rearrange the dashboard?

Yes, on the website. Press the rearrange button in the top bar. Every section gets a blue outline, then you tap one to pick it up, drag it where you want it, and tap it again to put it down. Press Done when you are finished. Rearranging in the native app is planned for a future update and is not included in the public 1.7 release.

If you would rather not drag anything, there is a plain list with up and down arrows in Settings under Dashboard layout, plus a reset to the original order.

Your layout is saved on that device only, so your phone and your laptop can be arranged differently, and it is deliberately not part of your encrypted vault. Sections you have hidden keep their place for when you turn them back on.

Can I chart cash alongside crypto?

Yes. The chart above the holdings has three views: Portfolio (crypto + cash), Crypto only, or Cash only. In Cash mode the donut splits per account (Bank, Savings, Wallet…) instead of collapsing to a single cash slice, so you can see the shape of your cash side the same way as your crypto side.

The +% delta on the charts card — what is it measuring?

By default the chip reads something like +A$120 (+24%) · market · 30D. That’s the market movement of your current basket over the selected range — i.e. if you’d held today’s coins the whole time, price movement alone would have this effect. It’s not personal P/L: adding a coin today and immediately seeing “+24%” is the coin’s 30-day chart, not your gain.

Head to Settings → P/L baseline → Reset P/L to now and the chip switches to “since <today’s date>”. The “market · 30D” suffix disappears and every future delta is measured against today’s total instead. Clear the baseline any time to go back to the market-view.

The baseline is stored in your browser, scoped to your account number, and never leaves this device. Change display currency and the chip falls back to range-start until you reset again — we don’t have client-side historical FX to convert an old baseline reliably.

Where do I find my account number after signup?

Once you’re signed in, open Settings → Account. Your 12-digit account number sits at the top with a Copy button. It’s also on the “Save these” screen right after signup — the Copy both as text button there gives you account number and recovery code as one block ready to paste into a password manager.

If you signed up before we introduced account numbers, one gets assigned to you automatically the next time your browser talks to the server — open Settings, wait a beat, and it appears.

Do you have telemetry or analytics?

None. No trackers, no pings, no third-party scripts.

Does the app support passkeys and biometric unlock?

The app supports Face ID or Touch ID unlock on supported hardware. Once your device is remembered, its vault key is protected in Keychain and the device signs a challenge to restore your session.

The app for iPhone, iPad and Apple silicon Mac is live on the App Store. Install it and sign in to your existing StealthLedger account. Passkeys are also supported.

How do I pair the iPhone app with my account?

Sign in on the website, open Settings → Devices → Pair iPhone, and you’ll see a QR code that expires in about a minute. Open the StealthLedger app on your phone, scan the code, and confirm the pairing with Face ID. The QR carries a one-time challenge that the phone signs; the actual vault key is derived on the phone from your existing unlocker and never crosses the network in plaintext.

After pairing, the phone appears in the same Devices list. You can revoke it from either the phone or the web at any time; revocation takes effect on the next request.

Do I have to install the app to use StealthLedger?

No. The website stealthledger.io is the full product on its own: sign up, store your vault, chart your holdings, use passkeys, everything. The native app is a companion for iPhone, iPad and Apple silicon Mac, with biometric unlock on supported hardware. Both talk to the same encrypted vault, so what you add on one shows up on the other.

Does the iPhone app collect anything different than the website?

No. The iOS build contains no analytics SDK, no crash reporter, no third-party tracker. The only network calls the app makes are to the same StealthLedger API the website uses, over TLS, sending the same opaque encrypted blobs. See the current App Privacy section on the App Store listing for the published data disclosures.

Can I rotate the vault key if a device is compromised?

Yes. Settings → Security → Rotate vault key generates a brand-new vault encryption key on your device, re-encrypts your whole vault under it, and re-wraps the new key into every unlocker you can re-verify (your passphrase and 12-word recovery phrase). The old vault key stops working immediately — a stolen or compromised phone can no longer read your balances.

Rotation is an emergency action: remembered iPhone access and passkeys are removed from the vault, so reconnect each phone from the website by QR and re-add your passkey afterwards. Your passphrase and recovery phrase stay the same and still open the vault. The server never sees the old or new key — the re-encryption happens entirely in your browser.

Rotation invalidates the old vault key so a compromised device can no longer decrypt your balances. Fully revoking a compromised device’s server-side session and signing key is a follow-up — for now, also change your passphrase if you believe the secret itself leaked.

Ready to see what a private ledger feels like?

Two minutes and one passkey prompt away. If signups need an invite right now, ask a friend who already has an account to mint you a one-time link — it pre-fills the code so you skip the paperwork.

StealthLedger
Grand total (AUD) —
Crypto —
Cash —
Last updated —
USD → base —

Charts

Computed on your device
Crypto value —
Allocation —

    External (private)

    Total —

    Cash

    Total —

    Add coin

    Add cash entry

    Confirm

    Delete your account

    This is permanent. Your encrypted vault, username, and sessions on every device will be wiped. We can't recover any of it — that's the whole point of the design.

    Confirm

    Rotate vault key

    Enter every secret you want to keep access to. A new vault key is generated and your vault is re-encrypted under it; only the unlockers you re-verify survive. Remembered iPhone access and passkeys are removed.

    Fill in every secret you still have. An unlocker is kept only if its secret matches; blanks are simply dropped. Enter at least one, or you can’t unlock the vault afterwards.