01 · The wallet
Bitcoin in Lean
Keys, transactions, PSBTs, descriptors, compact-filter sync, peers and broadcast are Lean 4 compiled to C. Every signature runs on a secp256k1 whose arithmetic is proven in Lean.
A BITCOIN WALLET FOR IPHONE · WRITTEN IN LEAN 4
Pay from your phone, add a Ledger,
or share a wallet.
Open source · MIT · TestFlight · iPhone, iPad and Apple silicon Mac
SEE FOR YOURSELF
Real payments on a private regtest node, recorded by CI. The 2-of-3’s other signers are Bitcoin Core wallets on that node; the Ledger is simulated. Recording & source ↗



























CHECKED ON EVERY COMMIT
Each change to Winnow builds the app from its Lean source, runs it in a simulator against a private Bitcoin node, and records what happened. The screens above come from the newest run that passed.
A release tag runs all of it again before a build goes to TestFlight.
testCreateReceiveSendConfirm6 screens26 spassedtestMultisigTwoOfThreeWithRecovery9 screens1 min 39 spassedtestFeeBumpReplaceConfirm2 screens46 spassedtestRetryAfterNoPeers1 screen20 spassedtestLedgerPairVerifySpend6 screens1 min 41 spassedtestLedgerCardTwoOfTwo4 screens21 spassedtestShippedCensus6 screens19 spassedtestSilentPaymentSend2 screens20 spassedtestSpentElsewhere0 screens1 min 6 spassedWRITTEN IN LEAN 4
01 · The wallet
Keys, transactions, PSBTs, descriptors, compact-filter sync, peers and broadcast are Lean 4 compiled to C. Every signature runs on a secp256k1 whose arithmetic is proven in Lean.
02 · The app
Each screen is a Lean function from the wallet’s state. Standard iOS controls draw it, through an Objective-C shell that is itself printed from Lean at build time.
03 · The framework
Keychain, Face ID, Bluetooth, iCloud and background tasks reach Lean as typed capabilities. The Xcode project is generated from a Lean description of the app, which refuses a permission without its explanation.
Source on GitHub ↗How it worksHow the port was checked ↗LeanNative ↗