Sovran 0.1.0
The first release — a Bitcoin wallet and a Nostr social app in one. Send and receive ecash or Lightning, hand cash to people nearby, read a feed that ranks for you, message privately, and pay an AI in sats.
Ordered by what's most interesting — flagship features first, then design, security, and engine work. 19 areas, 223 changes.
Nut Drop: hand ecash to people near you
Send ecash to nearby peers over Bluetooth — no internet needed. Pick a face from the live peer field and send.
- Send ecash directly over Bluetooth via bitchat.
- For now a drop goes out to the whole public mesh, so anyone nearby can redeem it — the amount screen warns you before you send. Locking a drop to a specific person will come once bitchat can carry longer encrypted messages.
- Larger Cashu tokens arrive intact: the public path splits and rejoins them the way bitchat expects. On iOS the rejoined token shows as a single redeemable chip; on Android it arrives as a standard Cashu token.
- Your mesh identity is derived from your Nostr key, so the same person shows up consistently to nearby peers and switching profiles switches who you appear as.
- A watch-style peer canvas: nearby faces settle into a live honeycomb that drifts and snaps toward the center as you move.
- The peer picker keeps the focused face crisp while distant avatars recede, then animates your chosen peer into the send flow.
Chat with an AI, pay in ecash
A new AI tab brings streaming chat from OpenAI, Claude, and Grok, routed through Routstr and paid for in Cashu ecash from your wallet — no subscription, no signup.
- A dedicated AI tab replaces the old Explore tab, with a streaming chat surface routed through Routstr.
- Pay as you go: top up by redeeming a Cashu token, and watch your sats balance in the header.
- Each reply is stamped with what it cost, so spending stays visible message by message.
- Your Routstr balance, models, and conversations are scoped to the active profile and never bleed in from another account.
- Choose between OpenAI, Claude, and Grok, each at Auto, Pro, and Max tiers; every session starts fresh on Auto.
- Before you send, each tier shows whether you can afford it, roughly how many messages your balance buys, and the exact top-up needed if a model reserves more than you hold.
- Replies stream in token by token, with a collapsible reasoning view showing live "Thinking…" and "Thought for N seconds" for models that reason aloud.
- Branch like ChatGPT: retry an assistant reply to fork a sibling, then page between versions with a "2 / 3" navigator. The whole tree survives restarts.
- Pick up earlier conversations from a bottom sheet, with a sticky "New conversation" action always within reach.
- Plus steadier composer and keyboard behavior, and fixes to how Routstr replies render.
Send and receive ecash or Lightning, in any currency
Send and receive money as ecash or over Lightning — to a Lightning address, a Nostr npub, or an NFC tap — with multi-currency pricing, multi-path Lightning, P2PK-locked sends over Nostr, and offline send suggestions when a mint is unreachable.
- Send ecash as a Cashu token, or pay over Lightning via a BOLT11 invoice or a Lightning address — pasted, scanned, or typed.
- Receive by minting against a Lightning invoice to top up from a mint, or by redeeming a Cashu token someone sent you.
- Send ecash to a Nostr npub: the token travels over Nostr, P2PK-locked so only the recipient can redeem it.
- Paying a Lightning address with no amount now prompts you for one instead of stalling.
- Multi-path (MPP) Lightning payments split a single payment across mints, with a routing and confirmation step and eligible mints filtered to those that support it.
- Melts now draw from your highest-balance eligible mint, and pasted or scanned invoices flow cleanly through the amount screen.
- Melt quotes update live as you go, stay hidden until the final step to prevent accidental payment, and surface failures as readable errors.
- Expired Lightning invoices are hidden and blocked from payment.
- Hold and display balances in USD, GBP, and EUR alongside sats; non-sat Lightning receives mint the correct proofs for the chosen currency.
- Lightning send confirmations show non-sat amounts with correct formatting.
- NFC point-of-sale payments gained a configurable spending cap, set alongside your fiat currency.
- Lightning receives can carry an optional memo on the incoming payment.
- A rebuilt mint selector appears when you send from a zero-balance mint, and switching mints mid-send keeps the amount you already entered.
- Offline send suggestions: when a mint is unreachable, a sheet proposes spendable proof combinations with round-up and round-down options, plus a fee bump on the send confirmation.
- Payment context is cleared at every send and receive entry, so a stale amount or mint can't leak between unrelated payments.
- Tighter proof handling: redeeming non-sat tokens is blocked, sat transfers stay whole, and proofs of one currency can no longer delete another's.
- Stricter money entry: leading-zero and millisat amounts are rejected, Next enables only above zero, and insufficient-funds errors read as plain messages.
- Lightning and onchain split into separate routes — onchain is groundwork only, showing an "Onchain send is not supported yet" state for now.
- Receive reliability fixes: the receive button works again, a listening spinner shows while awaiting a Lightning payment, and incoming-payment handling was repaired.
- Send and receive failures render human-readable messages instead of raw errors, and the payments screen no longer lists duplicate contacts.
- Bitrefill purchases gained an email field.
P2PK-locked ecash, redeemable anywhere
Lock a Cashu token to someone's Nostr npub so only they can spend it, manage your locking keys, sweep pending proofs in a single pass, and redeem giveaways with a key every install already carries.
- Lock ecash to a Nostr npub so only that recipient can unlock it. The send-confirmation flow now carries the lock through cleanly, and locked sends no longer misfire.
- Manage your P2PK keys from settings: generate a fresh keypair, import one from a hex secret, and copy or share any key's public value.
- Auto-rotate the key you receive on (on by default): after redeeming a locked token, the wallet retires the used key so incoming locks stay unlinkable.
- Sweep every pending proof at a mint in one tap. They combine into a single token and redeem at once, instead of clearing transactions one by one.
- Redeem giveaway ecash out of the box: every build ships a shared, rotatable giveaway key, reserved for low-value drops rather than your profile key.
- Scanned or pasted tokens now reliably show a Redeem action and redeem from the raw token, fixing cases where the button was hidden or did nothing.
Pay NUT-18 payment requests privately over Nostr
Scan or paste a NUT-18 payment request and Sovran delivers the ecash as a gift-wrapped NIP-17 DM, drawing from your trusted mints and asking only for what the request leaves open.
- Pay a NUT-18 payment request: the wallet decodes it and delivers the ecash to the recipient as a gift-wrapped NIP-17 DM, published to the request's relays plus a fallback set.
- Routing picks the shortest path from what the request pins. If exactly one of your trusted mints qualifies it goes straight to send, several show the mint selector, and you're only prompted for an amount when the request omits one.
- When the request's unit and your token's unit disagree, the send is blocked with a Currency Mismatch error instead of paying in the wrong denomination.
- Non-sat requests convert correctly: a fiat amount in cents now resolves to its whole-unit value instead of being sent 100x too large.
- The amount screen behaves in the request flow: one Next action, auto-advancing only once an amount is present, with the quick-amount buttons working again.
- Each send records the originating payment request, so its source survives in your history.
- A status toast tracks delivery, moving from Waiting for recipient to Claimed by recipient, or Payment failed.
- Lightning top-ups now settle as soon as the mint issues the proofs, so a payment isn't left hanging.
- Request expiry shows as a live relative time, such as in 2 hours, instead of a miscalculated fixed string.
Mints you can vet, trust, and rebalance
Mints become first-class accounts: discover them by currency, vet them with live audit data and Nostr reputation, and let an automated plan move funds over Lightning to hit your target split.
- Sovran ships with a curated default set on first run — minibits, chorus.community, and cubabitcoin.org alongside mint.sovran.money, selected by default.
- Discover mints by currency: a unit filter narrows the list to mints that support what you hold, and a dedicated flow adds the ones you pick.
- Onboarding walks you through your first mint, with a manual pick when the Nostr search comes up empty.
- A full mint info page replaces the old trust sheet, with audit data, success rate, and average swap time, reachable from the balance display.
- Redeem ecash from an unknown mint and that same page opens in a verify mode, so you can accept or reject it in one step.
- Per-mint audit data renders as charts and a 30-day swap-success heatmap, aligned with the upstream auditor's figures.
- A Mints tab lists your mints like contacts, enriched with Nostr profiles and reviews, resolving the operator and linking reviewer avatars — and degrading gracefully when enrichment fails.
- Set target allocations across mints with a per-unit split editor: sliders, quick actions, and a distribution bar tinted from each mint's colors.
- An automated rebalance plan moves funds between mints to match your split, stepping over Lightning within a fee reserve and suggesting alternate routes when one leg can't be routed.
- The plan reads as transfer and chain cards with an animated step chain, and you can retry a failed step instead of restarting the whole run.
- The mint balance selector is now a sheet, with allowed-unit filtering, a context menu, and old sats surfaced from inactive keysets — and a clear popup when switching the active mint fails.
- Point a Lightning receive at a specific mint, and get alerted on keyset-ID collisions that flag a misbehaving mint.
A Lightning address tied to your Nostr key
Every profile now has its own npub.cash Lightning address that quietly mints incoming Lightning payments into ecash, with no setup beyond having a profile.
- Each profile gets a Lightning address derived from its own Nostr key, ready the moment the profile exists.
- Switch profiles and the address follows: the new identity takes over, and each one tracks its own claimed payments independently.
- The address appears in the receive flow, defaulting to your profile npub and shown truncated with one-tap copy.
- Payments to your Lightning address are minted into ecash in the background and land in your history automatically.
- A live websocket delivers incoming payments instantly, with periodic polling as a fallback so nothing is missed if the connection drops.
- Pull to refresh in the receive flow to claim pending payments on demand, with a clear empty state when nothing is waiting.
- Setting a mint as your npub.cash mint is now only offered when that mint can actually serve the address, preventing a dead-end binding.
- Claim a username with live availability checks; free names can be registered, while priced names surface a paid path that is still in progress.
A Nostr feed that ranks for you
A social feed that orders Nostr notes by relevance instead of raw recency, renders stories, media, and threaded replies inline, and falls back gracefully when the app-view goes quiet.
- Infinite-scroll home feed with For You, Following Popular, and Following Recent tabs.
- Tap any post to open a thread view that walks its full reply chain.
- A stories row sits above the tabs: avatars with recent video gain a gradient ring, and tapping one opens an immersive image and video overlay.
- The story overlay keeps loading feed pages in the background until it finds the next clip.
- Like, repost, and follow respond instantly with haptics and a bounce, then reconcile against relays in the background.
- Each post shows its total sats zapped alongside the usual metrics.
- Feed content flows through Nagg's app-view and quietly falls back to a Nostr query path whenever the app-view is empty, errors, or unavailable.
- Relevance ranking blends trending, recent, and following signals, and rewards substantive posts over filler.
- Reply threads are reconstructed across nested authors and people you follow, so conversations stay coherent.
- Mute and report controls on profiles, plus a per-post Ignore menu for hiding a single post or an author.
- Ignored people and posts drop out of the feed immediately, without a refresh.
- Ecash arriving in a chat or DM renders as a card with amount, mint, and fiat estimate, plus a one-tap Redeem action.
- Plus a batch of stability fixes that keep feeds and notifications from rendering blank.
Private messages, now end-to-end encrypted and pay-enabled
Direct messages move to gift-wrapped NIP-17 DMs served through the app-view, with on-device decryption and a Send Money action built into the composer.
- Direct messages now use gift-wrapped NIP-17 DMs, with unwrapping and decryption done entirely on your device.
- Conversations stream through Nostr's app-view instead of a live relay subscription, so threads load and paginate fast.
- Send Money now lives in the message composer: pay any contact who publishes a Lightning address without leaving the thread.
- Messages send optimistically, appearing instantly with a spinner until the network confirms them, never duplicated.
- Re-opening a chat pulls in anything that arrived while you were away.
- Older NIP-04 DMs stay reachable through an explicit Legacy DM option, marked with its own icon alongside encrypted threads.
- Fixed legacy DM timestamps that could collapse to 1970, so old conversations sort by their real dates.
- Hardened decryption against a race that could mis-key messages when several arrived at once.
- Contact names and avatars load from a shared profile cache, and long npubs are trimmed in the chat header for readability.
A notifications inbox that groups the noise
A dedicated notifications inbox folds bursts of follows, reposts, reactions, and zaps into readable grouped rows, lets you choose how much reaches you, and pages cleanly through even the busiest accounts.
- A new notifications screen with All, Mentions, and App tabs, reachable from its own tab, the drawer, and settings.
- A companion Follows screen lists everyone who recently followed you.
- Bursts of follows, reposts, reactions, and zaps collapse into one row that reads "A, B and 47 more," with a few sampled avatars and the real total.
- Grouped reaction, repost, and zap rows preview the post being acted on, now styled to match every other row.
- Four notification policies in settings: Relaxed, Moderate, Strict, and a new Follows policy that only surfaces people you actually follow.
- A reply-scope control counts replies as Direct (only direct replies to your post) or Thread (anything under it).
- Scroll-to-load-more keeps fetching until a page brings something genuinely new, fixing the stall after the first page.
- Grouped and single notifications no longer repeat as you scroll.
- Opening the inbox and Follows screen is instant: each shows its cached page first and refreshes in the background, with a full recompute only on pull-to-refresh.
- Notifications are now scoped to you end to end, laying the groundwork for personalized feeds.
- A persistent prompt appears on launch when a newer build is available.
Every account is a Nostr identity
Each wallet account carries a live Nostr profile and follower counts, your contacts surface from real DM history, and sharing your npub or Lightning address is a single tap.
- Accounts are first-class Nostr identities. A new account derives its Nostr key alongside its Cashu seed from your root mnemonic, or you can import an existing nsec.
- An imported account takes its identity from the nsec but derives its Cashu seed on a separate path, so imported and derived accounts never share a wallet seed.
- Your name and picture are cached once and reused everywhere an avatar appears: drawer, account switcher, settings, passcode screen, and message threads.
- Profiles refresh on launch without blocking startup, pulling your name, picture, and follower and following counts from Vertex and the app-view.
- Profile banners render a gradient sampled from your picture, falling back to a seeded gradient when no image is set.
- A contact's profile stays live in message threads, so a name or avatar change upstream shows up without reloading.
- Your contacts list is built from real NIP-17 DM history, and rows wait for that history to load instead of flashing empty.
- NIP-05 identifiers on a contact are verified inline with a green check or red cross, so a real Nostr address is easy to tell from a spoofed one.
- A flat avatar fallback now fills feeds, DM lists, contact rows, payment recipients, and mesh peers without a picture, replacing blank slots.
- The npub share screen was rebuilt with a tappable row that copies your npub, plus a separate row exposing your Lightning address on the receive screen.
- Profile resolution was hardened: the right account resolves across screens, profiles can't be created without a pubkey, and missing follower or following counts no longer crash contact rows, the split-bill picker, or the profile screen.
- Plus a batch of stability fixes across contacts and profiles, including the setup banner now cross-fading instead of sliding.
Find Bitcoin merchants near you, and remember where you paid
A native map of Bitcoin-accepting merchants pulled from BTCMap, opened from your wallet, plus opt-in location stamps that quietly pin where each payment happened, kept on-device behind a privacy gate.
- Open a map of Bitcoin-accepting merchants straight from the Bitcoin near you card on your wallet, drawn over BTCMap data on a native map view.
- Tens of thousands of merchants stay responsive: pins cluster by zoom level, and tapping a cluster zooms in to split it apart.
- The map and the wallet card render instantly from an on-device cache, refreshed hourly in the background.
- Filter the map to Food & Drink, Retail & Shopping, ATMs & Exchange, Accommodation, or Services, with a live count of how many merchants match.
- Tap a merchant to see accepted payment methods, the last-verified date, address, opening hours, and tappable phone, website, email, and social links.
- Opt in to location stamping (off by default) to record roughly where you send, receive, mint, or melt. Coordinates stay on your device, scoped per profile, and are never uploaded.
- Stamped transactions show a muted map on the history entry, blurred behind a Tap to reveal location placeholder until you choose to show it.
- The location section now reliably appears on the receive screen once a redeemed payment finalizes.
- Plus a batch of map performance fixes for faster opens and smoother dragging.
One search bar for people, posts, and mints
A single search surface — the same in Contacts, Feed, and Wallet — finds Nostr profiles, their recent posts, and mints from one bar and one relevance-ranked list.
- Contacts, Feed, and Wallet now share one search surface, so all three carry the same scope tabs and result list instead of three separate screens.
- An All scope interleaves people, places, and mints into one relevance-ranked list; the other tabs appear only when the query has results for them.
- Exactly one tab ever reads as active, and the selection falls back to All the moment that tab's results disappear.
- People search resolves Nostr profiles by name, NIP-05, or npub, backed by the Sovran API.
- Mint search fires at two characters — shorter than the people minimum, since mint brand names are often just two letters.
- A Posts scope surfaces the recent notes of whoever a query matches.
- An empty query shows a Recent people strip and a prompt of what you can search: names, NIP-05, npub, mints, and places.
- In the Wallet tab, an NFC action replaces the old Split Bill shortcut.
- Search-bar styling is now consistent across Contacts, Feed, Messages, and payments, with a lighter payments-tab flow in place of the old animated overlay.
Tap to pay, scan anything
One camera-and-NFC input layer resolves whatever you scan, tap, or open — a Lightning address, ecash, an npub, a mint, or a merchant terminal — and routes it to the right flow.
- Tap a merchant terminal to pay over NFC: the wallet writes an ecash token straight to the reader, built on the eNuts contactless protocol.
- A failed tap never costs you funds. If the write fails or the reader disconnects mid-send, the minted ecash is reclaimed back into your balance.
- Scan an NFC card to read its details — groundwork for showing card balances later.
- Scan a QR to pay a Lightning address, LNURL, or invoice, redeem a Cashu token, add a mint, or open an npub — the scanner detects the payload and routes accordingly.
- Large multi-part QR tokens show live capture progress as a percentage, with haptic feedback so you know a token is still being read across frames.
- Open sovran: and cashu: deeplinks straight into the app, routed through the same scan handler — and only once a profile is active, so payments land on the right identity.
- Open the scanner even with camera access off; it prompts for permission in context instead of dead-ending.
- Scan failures now show the real decode message instead of a raw error, and the Lightning scanner recognizes plain addresses, not just LNURL.
- Contactless settlement runs without intrusive popups for an uninterrupted tap-to-pay experience.
- An offline banner wraps the scan surface when connectivity drops, so you know why a payment can't go through.
A transaction timeline that explains itself
History reads as a live timeline backed by Coco's wallet-core state, where every entry carries its source and confirmation progress, and a new Wallet Health view turns raw balances into per-unit drift you can act on.
- Your history is now a live timeline backed directly by Coco's wallet-core state, so it always reflects your real balances rather than a separate app-side copy.
- Each transaction detail shows where it came from — QR, NFC, clipboard, or deep link — and the P2PK key when a token was locked.
- Lightning and onchain payments track their confirmation as a segmented progress bar that fills as the network catches up.
- Onchain transactions open their own detail view tailored to how chain payments settle, separate from the ecash layout.
- A new Wallet Health card on Explore surfaces balance drift and pending outgoing per currency, with one-tap shortcuts into the rebalance and split flows.
- Roll back a stuck transaction, and review everything you've rolled back in a dedicated list.
- Sweep consolidates your funds in one pass, and a check-status button re-verifies any transaction's state on demand.
- Your balance breakdown is now a donut chart, with cleaner handling of empty and excluded slices.
- The home screen shows a short recent list per status with a tap-through to the full timeline.
- Tap a Cashu token to jump straight to the transaction it came from.
- Pending transactions now show a live counter and a clearer label, and ghost zero-amount records from an old bug are gone.
- The Transactions screen gained a filter flow with a collapsing header, date grouping, and per-tab counts.
- Fixed the icon for received ecash and the prefix on BTC amounts.
- Proofs are no longer kept in stored transaction records, plus a batch of reliability fixes to how entries update.
A unified look: one theme, a shared component kit, and liquid glass
Sovran 0.1.0 speaks one visual language — themes resolve through a single engine, components draw from a shared kit, and liquid-glass surfaces carry the wallet, mints, and ecash screens on iOS.
- One theme switch now recolors the entire app at once — including the navigation header, which used to stay stale until reload.
- Text stays legible over any wallpaper, with luminance- and blur-aware colors that adapt to the background behind them.
- Liquid-glass surfaces run throughout the wallet, mint, and ecash screens on iOS, with crisper contrast on pills, sheet buttons, and QR actions.
- Fresh wallpapers and a tidied background set, with per-wallpaper blur, tint, and darken tuned for readability.
- Wallpaper thumbnails are more reliable: bad image URLs fall back to a generated gradient rather than rendering blank.
- The background-image option only appears on hardware that can render it, so unsupported devices no longer see a setting they can't use.
- A shared component kit unifies avatars, badges, mint and transaction icons, list rows, and a custom spinner across the app.
- Profiles without a picture get a generated beam avatar, plus a fallback banner and a settings option to pick your avatar style.
- Ecash status reads at a glance: pending proofs take a neutral tint while reserved proofs glow gold, with matching text and icons.
- Amount entry is now formatted as you type, with a shared keyboard and pill toggle driving the send, selector, and split-bill screens.
- The split-bill flow moved into its own space for smoother modals, scrolling, and keyboard behavior, sharing list rows with contacts and chat.
- Bottom sheets are dependable everywhere — they dismiss correctly and close themselves once their action finishes.
- Refreshed iconography: a coins glyph for sending ecash, a redrawn bank icon, and an updated feed header.
- Loading buttons hold their shape instead of jumping between idle and busy, and the boot animation now plays through.
- Smoother scrolling and richer haptics on the transactions and mint-select screens, with a soft fade at the edges of long lists.
- The tab bar sizes itself to its content and labels, fixing wrapped text and giving the Lifestyle tab a proper header.
- Cleaner copy in consistent sentence case, plus a sharper transaction-detail timeline.
- The merchant-map filter became a tap-to-open menu, and the home screen gained dashboard widgets and a warning card.
- A scatter of smaller polish: long-press paste in inputs, onboarding keyboard handling, lock-screen imagery, and gift-card styling.
- TestFlight builds carry a distinct logo so internal builds are easy to tell apart from production.
- Sovran 0.1.0 ships on iOS only; the cross-platform toolchain stays green behind a batch of Android-only stability fixes.
Your keys never leave the device, and never reach a log
Sovran 0.1.0 hardens what protects your funds and identity: your seed lives in the device secure enclave, your private keys stay out of every log, and recovery rebuilds the whole wallet from your mnemonic alone.
- Your seed now lives in the device secure enclave (Keychain), migrated out of general app storage on upgrade.
- Recovery words never render on screen again: the show-seed and verify-seed-phrase surfaces are gone.
- Restore rebuilds your wallet from the mnemonic alone, recovering balances across every supported unit (sat, USD, EUR, GBP) instead of sats only.
- Wallet backups are encrypted with NIP-44 before they reach a relay, so restore data is never published in the clear.
- Import an identity from an nsec or a raw hex private key; malformed input is rejected with a clear message.
- Decoded nsec and P2PK keys are treated as secrets and never previewed in logs, closing a key-leak path.
- Logs and support dumps redact embedded secrets — nsec, ecash tokens, Lightning invoices, JWTs, and any sensitively named field.
- A blunt warning on your profile: Sovran will never ask for your recovery phrase, nsec, or private key, and anyone who does is trying to rob you.
- Mock mode is forced off on upgrade, and the leaked demo identities are purged from your stored Nostr cache so they can't surface on real screens.
- Your proofs follow the mint's active keyset automatically, with live websocket subscriptions keeping mint state current.
- A new bitcoin-only mode, plus npub.cash moved to its v2 Lightning endpoints.
- A retuned passcode screen: smoother entry, a tactile ripple per digit, and a shake on the wrong code.
- Refreshed iOS permission prompts and background modes, plus a batch of NFC and stability fixes.
A faster, steadier wallet on the Coco engine
The wallet now runs on the Coco ecash engine with live websocket updates and virtualized lists, so balances, history, and payment sheets stay quick and dependable under real use.
- The wallet core is rebuilt on the Coco ecash engine, with real loading states so launch shows its progress instead of stalling on a blank screen.
- Balances, history, mint state, and prices now update over live websockets the moment they change, rather than waiting on a polling timer.
- Long transaction lists and feeds are virtualized, so scrollback stays smooth no matter how far it runs.
- Send, receive, and mint sheets now open without the visible hitch that used to precede them.
- Double-tapping to open a sheet no longer spawns duplicates or strands you in a stuck modal.
- The themed wallpaper holds steady across screen changes instead of re-rendering each time you navigate.
- Wallets preload on startup, shortening the wait before balances are usable on launch.
- Nostr key handling is faster and rerenders are trimmed across the history timeline and the wider UI, keeping scrolling and tapping responsive.
- A shared query cache backs the feed, notifications, and direct messages, so revisited screens render from cache instead of refetching.
- A simplified full-screen splash renders reliably on cold start.
- Onboarding now skips a mint that won't respond instead of letting one unreachable mint block setup.
- Fixed bottom-sheet lag that only showed up in production builds, plus a round of iOS rendering and navigation fixes.
- Deduplicated live websocket connections so updates don't arrive twice over redundant sockets.
- Fragile startup steps are wrapped in error handling, and request timing is eased to avoid relay rate-limiting.
- After an app reset the wallet reloads itself, returning to a clean, current state.
- Feed refreshes now reuse the shared server cache instead of busting it on every request, and a longer request timeout cuts failures on slow responses.
- Plus a batch of upgrade-path and stability fixes that carry older installs forward cleanly.
The finishing pass: currency, lifestyle, and onboarding
The smaller decisions that make a first release feel finished — amounts in your own currency, a rebuilt onboarding, a tighter mint-trust boundary, and lifestyle surfaces that spend ecash on eSIM, VPN, and Bitrefill credit.
- Hold and read your money in USD, EUR, or GBP, threaded through every selector and balance so amounts stop showing only in sats.
- Trimmed the currency list to the units Sovran actually supports, clearing stray and duplicate entries from the picker.
- Route your traffic through a Sovran-provisioned WireGuard VPN, with live connection status on the VPN screen.
- Buy eSIM data plans with ecash; plans refresh on their own when you switch eSIM, in a restyled modal with clearer spacing.
- Pay for Bitrefill gift cards and mobile top-ups in ecash on a reworked screen, with a new card view alongside it.
- eSIM, VPN, and Bitrefill prices stream live, so what you see is always current without a manual refresh.
- Rebuilt onboarding end to end: refreshed flow screens, restyled buttons, and a redesigned passcode screen.
- Tightened in-app navigation and fixed the wallet and VPN menu links so they open the right place.
- Smoother account deletion, and more reliable data migration when upgrading from an earlier build.
- Tightened the rebalance trust boundary: every temporarily-trusted intermediary mint is released even after a failed route, so an attacker-supplied mint can't linger in your trusted set.
- Closed twelve reported bugs alongside an iOS 26 chat pass, a reworked light theme, and a Nut Drop overhaul.
- Your Nostr posts now carry a tag identifying Sovran as the client.
- Plus a batch of stability and cleanup fixes across the app.