- Send and receive Bitcoin via Cashu ecash tokens
- Lightning Network payments and invoices
- Multi-account support with swipeable account pager
- Real-time balance with sats/fiat toggle
- Claim a custom Lightning address username
- Choose between npubx.cash and sovran.money domains
- Real-time availability checking across all domains
- Display balances in USD, EUR, GBP, or sats
- Real-time fiat conversion with price caching
- Quick-switch currency pill in the header
- Every transaction shows how it started — QR scan, NFC tap, clipboard paste, or deeplink
- Swaps, pending sends, and cancelled transactions all live in one unified timeline
- Filter by currency, type (lightning or ecash), direction, status, and month
- Horizontal month selector for quick time navigation
- Live timeline per transaction that updates as state changes — step by step
- Mint quotes counting down to expiry, sends progressing through preparation to finalization, melts moving from pending to paid
- Generate or import locking keys (nsec or raw hex)
- Keys derived from your seed using a BIP-39 path
- Quick Access shows your latest locking key on the receive screen
- 37 themes including color palettes and background image wallpapers
- Pick a color or a background image — applies everywhere, instantly
- Mints accessible from the payments page — tap to message them over Nostr
- Audit any mint through the Cashu Auditor: lightning node connectivity, success rates, average swap times, and community ratings
- Tap any user to see their profile — reputation score, follower count, and most-followed connections
- Powered by Nostr social graph data
- Encrypted peer-to-peer messaging rebuilt on NIP-17 gift-wrapped DMs
- Send Cashu tokens and payment requests inline in conversations
- Nostr-based contact system on the payments page
- Search for users by npub, NIP-05, or name
- Recent conversations with message previews
- Built-in map (powered by BTCMap) shows merchants near you that accept Bitcoin
- Filter by category — food, retail, ATMs, accommodation — and tap for details
- Efficient map clustering with viewport-based rendering
- Explore page shows total unspent balance across all pending sends
- One tap starts a sweep — rolling back each transaction and reclaiming tokens, grouped by mint
- Rebalance ecash across mints without doing the transfers yourself
- The health page monitors your distribution drift and flags when things are off
- Set target distribution percentages per mint with sliders
- Supports middleman routing chains for mints that can't swap directly
- Balance distribution monitoring card on the explore page
- Shows distribution status, pending transactions, and rebalance suggestions
- Hero transition animation from card to full modal
- Browse community-recommended mints discovered via Nostr or the Sovran API
- Paste a URL manually to add any mint
- Every mint shows its KYM score before you commit
- Configure routing parameters for mint swaps
- Set max hops, max fee percentage, minimum success rate, and trust mode
- Opt-in location stamps — tag where a transaction happened
- Stored locally, shown on a map with a privacy-first "tap to reveal" blur
- Off by default
- Built-in AI chat through Routstr
- Pick from dozens of models across providers — each one shows exactly what it costs in sats per token
- No subscription — send ecash to fund your balance
- Session management with search, model switching, and anonymous mode
- Cashu payment requests (NUT-18) — send ecash directly over Nostr
- No Lightning invoice needed — just a request, a tap, and it's done
- NFC tap payments — scan NFC tags to pay Lightning invoices or receive ecash
- Includes rollback handling, robust mint selection, and POS payment recovery
- Full-featured QR code scanner with torch toggle
- Import QR codes from your photo library — pick an image and the app decodes it automatically via
expo-camerascanFromURLAsync - UR code support with multi-frame progress tracking
- Clipboard paste fallback for quick input
- Encode ecash tokens with Bitcoin-themed emojis for creative sharing
- Select an emoji, token is encoded, copied to clipboard automatically
cashu://andsovran://URL schemes for seamless payment handling- Automatically routes to the right screen based on link content
- 4-digit PIN code for app-level protection
- Custom numeric keyboard with passcode gate on launch
- Restore your wallet from a BIP-39 seed phrase
- Sweeps all known mints to recover ecash proofs
- Progress tracking per mint during recovery
- BIP-39 mnemonic seed phrase generation and storage
- NIP-06 deterministic key derivation for Nostr identity
- Encrypted local storage via expo-secure-store
- No data collection — privacy-first, open source
yarn start # Start Expo development server yarn ios # Run on iOS simulator/device yarn android # Run on Android emulator/device
yarn prebuild # Prebuild native projects yarn build:ios # Build iOS for production (EAS) yarn build:dev:ios # Build iOS for development (EAS) yarn build:android:apk # Build Android APK (preview)
yarn submit:ios # Submit iOS build to App Store yarn submit:android # Submit Android build to Play Store
yarn lint # Run ESLint yarn type-check # Run TypeScript type checking yarn pretty # Format code with Prettier yarn pretty:check # Check formatting without writing yarn knip # Find unused exports/dependencies
yarn maestro # Run Maestro UI testsReact Native app built with Expo, using file-based routing via Expo Router.
- Frontend: React Native with Expo
- Styling: Tailwind CSS via NativeWind
- State Management: Zustand (migrating from Redux)
- Cashu Operations: Coco-Cashu for ecash processing
- Nostr Integration: NDK for decentralized communication
- Animations: Reanimated with hero transitions
- Cashu NUTs — NUT-00 through NUT-13, NUT-17, NUT-18, NUT-23
- Lightning Network — BOLT11 invoices
- Nostr — NIP-04, NIP-05, NIP-06, NIP-17, NIP-19, NIP-44, NIP-59
- BIP-39 / BIP-32 — Hierarchical deterministic wallets
We welcome contributions! See our GitHub repository for issues, feature requests, and code contributions.
- GitHub Issues — Bug reports and feature requests
- Nostr — Direct messaging via Nostr protocol
- Twitter — @KevinKelbie