It finds your money.It asks no one.

A Taproot-only wallet for iPhone. It pulls compact block filters straight from Bitcoin peers and checks them against your keys on the device — so nothing ever has to be told which addresses are yours.

btc-swift home screen captured on signet: confirmed balance, filter-scan sync status, and two confirmed received transactions
filters checked 0 blocks fetched 0 addresses revealed 0

Filters stream in. Matching happens on the phone. Nothing goes back.
The screen above is an unretouched capture from the automated end-to-end run against signet.

How it works

Bitcoin has no address index.

So every wallet has to answer one question — which coins are mine? — and the answer decides who learns about you.

your phone your addresses your history indexer balance · history counterparties · IP

Most wallets

Ask a server.

You hand an indexer your addresses and it answers. Now it knows your balance, your history and who you pay, tied to your IP. “We don't log” is a policy, not a mechanism — the question itself is the leak.

peers the same bytes for everyone block filters nothing your phone matches here

btc-swift

Ask no one.

Peers send a small summary of every block — about 15 KB, identical for everyone who asks. Your phone tests each one against its own keys and pulls a full block only on a hit. Your keys never leave it.

The app

Modern Bitcoin. Nothing else.

Taproot only, so the legacy matrix simply isn't in the binary. Every path you can take is one of these.

Every screen on this page is an unretouched capture from the automated end-to-end suite running against signet.

Receive

A fresh address, every time.

Taproot receiving addresses derived on the device. While the Receive screen is open, the wallet privately watches live transaction relay and flags incoming payments as “unconfirmed” within seconds; they count once confirmed in a block — 0-conf is never called received.

btc-swift receive screen captured on signet: QR code, fresh tb1p taproot address, and the note that incoming payments show as unconfirmed while the screen is open

Send

See it before you sign it.

Every payment is reviewed in full — destination, amount, fee, rate and inputs — before a signature exists. Pay a normal address or a reusable sp1… silent-payment code.

btc-swift send review captured on signet: destination, amount, fee, rate, inputs and change, all shown before signing

Vaults

Shared custody, on one screen.

MuSig2 vaults that look like an ordinary single signature on-chain, and k-of-n vaults for a 2-of-3. Cosigning shows you every destination and the fee before your key is used.

btc-swift vault cosigning captured on signet: the review section showing destination, vault change, fee and sighash before any key is used

Built small on purpose

Less to trust.

1
runtime dependency —
Bitcoin Core's libsecp256k1
203
tests against
official BIP vectors
~3MB
per day of filters,
steady state
0
servers asked
by default

Proof, not mockups

Every screen, from the test suite.

Unretouched captures from the automated end-to-end suite: the app runs against a local signet node while the test creates the wallet, mines blocks to it, spends from it, builds a vault and verifies an import. Per-scenario timings from the latest run are in timings.json, regenerated with the screenshots on every run.

btc-swift onboarding on signet: create or import a wallet
Onboarding
btc-swift send status captured on signet: transaction broadcast, relayed to a peer, awaiting confirmation
Broadcast, relayed to peers
btc-swift send status captured on signet: seen in a block
Seen in a block
btc-swift vault list captured on signet: a saved 2-of-3 script-path vault
Vaults
btc-swift esplora opt-in warning captured on signet, naming exactly what the server backend learns
The opt-in, behind its warning
btc-swift import verification report captured on signet: bundle verified by forward filter scan
Import, verified

The trade

Asking no one costs something.

Every wallet makes this trade. Most don't tell you. Here is ours, in full.

Slower news
Payments appear when they confirm in a block — with one bounded exception: while the Receive screen is open, the app privately watches live relay traffic (it fetches every relayed transaction, indistinguishable from a full node, so nothing is revealed) and shows incoming payments as unconfirmed in seconds. Close the screen and the window closes. Everything else waits for confirmation — and unconfirmed is never called received.
Coarser fees
Fees come from what peers will relay and what you've paid before, not a live fee market. Good enough to confirm; honest about being blunt.
Bring your history
A new wallet scans forward from the day you make it. Moving an existing one in means bringing its history with you — never handing a server your keys to re-scan.
Sending still shows
Filters protect what you read. Broadcasting a payment still links your address to your transaction at the peers you send through.
An exit, if you want it
A server backend is one switch away, off by default, behind a warning that names exactly what you give up.

Where it is

Running on signet today.

The protocol core, both multisig schemes and silent payments are complete and vector-tested. The app runs on signet — Bitcoin's test network — while mainnet gets the care it deserves.