Highlights
- A much better Spark wallet. Spark now runs on the Breez SDK, bringing a stronger foundation for everyday payments. Every Spark wallet also gets its own personal Lightning address at btc.mybuho.de, which you can rename.
- One QR code for almost everything. Receive now gives you one unified QR code for Lightning, on-chain, Spark and Arkade. The paying wallet can choose the best available way to reach you automatically. Between BuhoGO users, Spark payments can settle for free.
- Backups finally have one home. Bitcoin and identity backups now live together in Security. A new guided flow helps you prepare, write down and verify your recovery words without jumping between different parts of the app.
- A new home menu. Settings, Security, Profile, Spend, Payees and About are now available from one simple menu, making the app much easier to navigate.
- Copy an invoice. Come back. Pay. On Android and iOS, BuhoGO can notice when you return with a payable address or invoice in your clipboard and offer to use it. Nothing happens automatically and nothing is paid without your confirmation.
- Send money to Ghanaian phone numbers. MTN Ghana joins our existing phone-number payments for Kenya, Zambia and Tanzania.
- Export your transaction history. Create a transaction report across all your wallets as PDF, CSV or XML, including reports for your tax year.
- Bitrefill is coming to Spend. Gift cards and mobile top-ups are getting their own place inside BuhoGO. The old online merchant directory has been retired to make room for it.
UI/UX
- Receive is a true bottom sheet built for a thumb. Rails show as badges, actions sit in one row, and the sheet leads with your Lightning address. Copy asks which format you want; Share hands out the full unified code.
- Send leads with the number. The note field takes the place the chips used to hold, the glass back arrow replaces every X, the confirm sheet no longer shows the address twice, and limits are stated in the unit you typed.
- The payment confirmation leaves on its own after six seconds.
- Your card got slimmer. The code button joins the pencil in the corner, the footer row is gone, and the line under your name is your public code with a copy icon. The card is about half its previous height.
- The profile is a simple profile. Card, three actions and one Identities row. The backup row and the "Back up your card" setup step moved to Security, so setup is username plus name or photo.
- The address book is now Payees. Rows pay on tap, the info button opens a profile page with the history between you, and quick pay became a recents shelf. Every placeless avatar is a grey silhouette.
- Your shared page is the payment. Profile links lead with the key, and the sheet can open your page directly.
- About is its own page with the mission, support, source and community, and a version pill that is the update checker. The onboarding guide lives there now; Settings is pure configuration. Creating or restoring a wallet lands you straight in the wallet.
- Wallet switcher and Manage Wallets are native sheets in the app's own ink, with rows you can scan and a detail you can act in. With a Spark wallet active, Settings shows the one active wallet instead of the whole pair.
- LNbits and NWC connect as full-height sheets with a brand hero and a pinned button.
- The home keyring is the backup reminder. It shows what is still unchecked, opens Security, and disappears once every set of words is checked.
- Restore from backup asks whether you are bringing back your bitcoin, your identity or a Google Drive copy, and reuses the existing journeys. Android gains a Restore from Google Drive path.
- Screen Privacy moved to Preferences and is off by default. Turning it on is an explicit choice. App lock stays where it was.
- Lightning addresses show the wallet they live at. Coinsnap and two community domains join the brand list, and the logo appears everywhere an address is shown.
- Balances wait for the truth. The home balance keeps its skeleton until a real figure has loaded.
- Arkade Lightning is paused, and the app says so. Every screen states it instead of failing late, and unified codes still pay over the ark rail.
- eSIM orders you paid for but have not received are listed and can be retried, the Spend row shows how many are waiting, and there is no longer a spinner without an exit.
- Kiosk round-up works without tipping, rounds to the next convenient amount rather than the next whole unit, and the Back button is fixed.
- Silent Payment addresses are recognized and explained instead of being treated as gibberish.
- The eSIM & VPN row wears the nadanada mark, and the Bitrefill row its own.
Bug Fixes
- Fixed the Paste button doing nothing on Android because the clipboard plugin was never registered in the app project.
- Fixed Lightning amounts in unified codes being decoded wrongly on networks other than mainnet.
- Fixed the transaction report on NWC wallets: paging asked for the wrong window, every row showed as pending, and every send was typed as a receive.
- Fixed the report printing a confident 0.00 for a rate nobody knew and "free" for a fee nobody measured; such fields are now left empty.
- Fixed the report dropping a real Arkade transaction and reading Arkade's history twenty times.
- Fixed a cached zero balance showing before the wallet had loaded.
- Fixed an eSIM purchase being lost when the sheet was closed mid-payment: orders are recorded before any money moves.
- Fixed Settings calling four methods an earlier cleanup had deleted.
- Fixed the send sheet's confirm step losing its midsection.
- Fixed the home menu's close button being unreachable underneath the doors.
- Fixed the identity screens reading wallet state before it loaded on a cold start.
- Fixed the wallet words card doing nothing once the words were already saved.
- Fixed Back on the kiosk round-up screen.
Code Quality
- Spark runs through one provider behind an instance registry; acquire and release share a per-wallet chain, so a disconnect can no longer leave a zombie engine, and a failed module load retries on the next connect.
- Added an in-repo Spark address codec with frozen byte-exact fixtures.
- Made the "what can this wallet pay" rule the single gate for the Send sheet, contacts, confirm sheets, batch send, internal transfers and Social Bucket sweeps.
- One shared helper decides what the clipboard can offer, used by the home strip and the Send sheet's chip alike.
- Backup state comes from one helper for the home keyring and the Security rows; phrase reveal, timed concealment and verification live in one composable and one dialog for both subjects.
- Swept the dead Arkade swap-era code: swap-layer init, reverse-swap bookkeeping, the swap-bounds plumbing and ten error translations.
- The transaction report reads each wallet through the shared normalizer, so amounts mean the same thing across Spark, LNbits, NWC and Arkade.
- Removed the standalone online-shops route; the page and service stay in the repository unrouted.
- Added 20 test files covering the Breez payment mapping, fee quotes, provider contract and zero-fee guard, the SDK registry, backup status, the recovery phrase lifecycle, clipboard suggestions, Lightning address names, invoice decoding, kiosk rounding, nadanada orders and recovery, and the tax report pipeline.
Technical Updates
- Spark moved to @breeztech/breez-sdk-spark 0.24.1; the direct Spark SDK is removed. A release build needs VITE_BREEZ_API_KEY, or no Spark wallet can connect.
- The new engine assigns new IDs to Spark payments. Per-transaction notes, tags and fiat-at-settlement stamps recorded before the update are left on disk rather than guessed onto the wrong rows; contact links, the claimed-deposit registry and the tax report's historical-rate fallback keep working.
- Arkade moved to @arkade-os/sdk 0.4.69; @arkade-os/boltz-swap is removed.
- Added pdfkit for the PDF report.
- Node 22 or newer.
- The Capacitor project registers the clipboard plugin on Android and iOS.
- Old backup links redirect: /identity/words and both Settings backup queries land on /security, and the required-update gate yields to that route.
- Ghana payouts go through BitSpenda's documented MTN prefixes. They work in the app only; BitSpenda sends no CORS headers, so the web build says why.
- Android version metadata updated for this release.
- German and Spanish translations kept in sync with everything above.
Contributors
Thanks to everyone who shipped this release:
Community
- Telegram: https://telegram.me/+cpmyopRYnKRlOTRi
- Nostr: Join the BuhoGO community
Download




Comments0
No comments yet. Start the conversation.