Releases: SatoshiPortal/bullbitcoin-mobile
6.10.1
6.10.1 Release Notes
New Features
Wallet & Storage
- FSS hybrid storage strategy — Flutter secure storage hybrid strategy without migration; better handling of FSS10 migration failure on Android with fallback to legacy storage
- New onboarding/startup wizard
- Ledger hardware wallet support
- Electrum timeout and retry via bdk-dart
- Increased Electrum stopGap — now allows values up to 5000
Exchange
- Colombia (COP) deposits — new COP payment link deposit flow
- SINPE receipt on tx details — reusable card on success + details screens
- Enhanced exchange settings menu — new functional screens: Recipients, Transactions, Default Bitcoin Wallets, App Settings, Secure File Upload, Statistics
- Email notifications toggle — enable/disable email notifications in App Settings
- Secure file upload — KYC document upload screen with status indicators (Upload, In Review, Accepted)
- Trading statistics dashboard — buy/sell ratio, trade volumes, trade counts, average prices, and biller statistics
- Preferred currency improvements — exchange home handles empty balance currency; deposit/withdraw/pay screens default to preferred currency
- Announcement banner improvements — truncated descriptions with ellipsis; tap to open full details in a bottom sheet
- Scam consent warning — explicit consent required before funding exchange account
Real-time & Notifications
- Real-time WebSocket notifications — balance, KYC status, and group membership updates arrive instantly instead of polling every 5 seconds
- Real-time support chat — support messages appear immediately via WebSocket push
UX
- Pull-to-refresh on wallet home — can be triggered from anywhere on the screen
- Backup warning overlay — bottom sheet hard escalation warning for backup when wallet has funds and no backup is detected
- Close button on broadcasting screen — added since the app no longer auto-progresses when autosync is disabled
Privacy & Payjoin
- Randomized OHTTP relay selection — relay randomly selected per payjoin call via
Random.secure()to prevent network fingerprinting - Payjoin self-transfer detection — detects self-spent transactions and shows a "Self-transfer" row on confirmation; self-spends bypass payjoin
Internationalization
- 11 new languages — Arabic, Bulgarian, Bengali, Czech, Greek, Persian, Hindi, Korean, Brazilian Portuguese, Thai, Turkish
- Detailed German translations — community contributions from @bsn21m
- Updated translations for new warning and wizard pages
Observability
- Opt-in error reporting — optional, self-hosted Sentry (disabled by default) - only collects error reports and stack traces, no telemetry, no IP.
- Detailed Sentry configuration to ensure user privacy
- No app restart required after providing Sentry consent
Removed / Changed
- Removed Boltz testnet support
- Removed Recoverbull sync page
- Server status page now makes more realistic calls
Bug Fixes
Wallet Core
- Address index issue — fixed via update to bdk-dart (bdk 2.0)
- Crash for unknown script transactions
- Prevent duplicate mnemonic import
- Mnemonic import freeze/crash
- Capital letters in mnemonic — no longer accepted (was causing errors)
- Correct Testnet electrum URLs
- LWK database initialization — fixed Liquid wallet database init issues
- Spam create wallet on startup
- Startup lag — fixed lag during wallet and seed loading on startup
- Startup error screen — gracefully handles and displays startup failures instead of freezing
- Always ensure both instant and secure wallet are created - Should be atomic
Swaps
- Swap watcher race condition that could cause status update issues
- MRH swap — uses transaction ID to fully resolve as a swap transaction
- Swap flow wallet autoselect — prevents self-spends or same-network sends in the transfer flow
- Amountless invoice handling — throws a more descriptive error for amountless invoices on swaps
- Background tasks cleanup — removed unnecessary background tasks causing unexpected swap states and LWK db corruption
- Autoswap notice/warning fixes
- Testnet fix for recoverbull
Send / Receive
- LN receive success screen crash fixed
- Insufficient balance navigation — Continue on send amount page with insufficient funds no longer navigates to confirm page
- Sell/Pay flow — fixed "Could not fetch fees" bug
- Route unauthenticated users to login via buy/sell/withdraw
Backup & Security
- Physical backup verification — fixed backup test status not updating after completing verification
- Backup-before-PIN safety gate
- Backup completion flow via FSS Warning — after completing a backup, the warning lands directly on the "Reinstall" title instead of flashing "Backup and Reinstall"
- Backup wallet warning on home now updates correctly after a backup is complete
- "Vault created successfully" snackbar no longer covers the "Test Recovery" button
Exchange
- Exchange statistics — linear progress indicators, integer trade counts, currency conversion, thousands separators
- CA KYC sell limit — enforced $999 CAD buy/sell limit for Canadian users with limited KYC
- Argentina recipients
- Routing to support via "Get Help"
- Support chat attachments — improved image picker with better permission handling and clearer errors
- WebSocket reconnect loop — fixed infinite reconnect loop for unauthenticated users
Pricing & DCA
- Price graph refresh — users can now manually reload Bitcoin prices if automatic loading fails
- DCA confirmation text color in dark mode
- DCA UI fixes
Labels & Persistence
- Labels feature refactor — complete architecture refactor with database migration v11→v12; fixed upsert constraint failures, SQLite concurrency, and multiple related issues
- Transaction note persistence
- SQLite migration safety — catch blocks around label migration to prevent crash on failure
Network / Connectivity
- Custom mempool server — SSL toggle (auto-detected from URL), improved URL parsing/normalization, server status indicators, dark mode fixes, and hidden service support via Orbot
- Recoverbull Orbot detection — checks if Orbot is actually running on port 9050 instead of relying on user settings, preventing Tor-over-Tor errors
Input & Keyboard
- iOS price input keyboard — fixed to show correct number pad with decimal settings
- Keyboard lag — fixed lag when importing mnemonic passphrase or typing in label input fields
Theming
- Dark theme fixes — QR code backgrounds, PSBT flow, exchange logout sheet, Recoverbull button, custom Electrum server widget, exchange home KYC status card
- PIN light theme readability
- Custom fee dark mode
- Light mode exchange banner
- Delete logs dark mode fix
- Swap fees dark/light mode and text color fixes
- Storage warning screens dark mode background now matches the wizard
- Fade-to-background gradient no longer covers the title/description above the button
- Pull to sync loader no longer lands behind the Bull logo
Wizard / Onboarding Polish
- Removed translation bottom warning sheet in wizard
- Replaced next button with inline YES / NO continue button in the wizard (reporting program)
- Transparent chrome so small screens can see there is more to scroll
6.10.0
6.10.0 Release Notes
New Features
Wallet & Storage
- FSS hybrid storage strategy — Flutter secure storage hybrid strategy without migration; better handling of FSS10 migration failure on Android with fallback to legacy storage
- New onboarding/startup wizard
- Ledger hardware wallet support
- Electrum timeout and retry via bdk-dart
- Increased Electrum stopGap — now allows values up to 5000
Exchange
- Colombia (COP) deposits — new COP payment link deposit flow
- SINPE receipt on tx details — reusable card on success + details screens
- Enhanced exchange settings menu — new functional screens: Recipients, Transactions, Default Bitcoin Wallets, App Settings, Secure File Upload, Statistics
- Email notifications toggle — enable/disable email notifications in App Settings
- Secure file upload — KYC document upload screen with status indicators (Upload, In Review, Accepted)
- Trading statistics dashboard — buy/sell ratio, trade volumes, trade counts, average prices, and biller statistics
- Preferred currency improvements — exchange home handles empty balance currency; deposit/withdraw/pay screens default to preferred currency
- Announcement banner improvements — truncated descriptions with ellipsis; tap to open full details in a bottom sheet
- Scam consent warning — explicit consent required before funding exchange account
Real-time & Notifications
- Real-time WebSocket notifications — balance, KYC status, and group membership updates arrive instantly instead of polling every 5 seconds
- Real-time support chat — support messages appear immediately via WebSocket push
UX
- Pull-to-refresh on wallet home — can be triggered from anywhere on the screen
- Backup warning overlay — bottom sheet hard escalation warning for backup when wallet has funds and no backup is detected
- Close button on broadcasting screen — added since the app no longer auto-progresses when autosync is disabled
Privacy & Payjoin
- Randomized OHTTP relay selection — relay randomly selected per payjoin call via
Random.secure()to prevent network fingerprinting - Payjoin self-transfer detection — detects self-spent transactions and shows a "Self-transfer" row on confirmation; self-spends bypass payjoin
Internationalization
- 11 new languages — Arabic, Bulgarian, Bengali, Czech, Greek, Persian, Hindi, Korean, Brazilian Portuguese, Thai, Turkish
- Detailed German translations — community contributions from @bsn21m
- Updated translations for new warning and wizard pages
Observability
- Opt-in error reporting — optional, self-hosted Sentry (disabled by default) - only collects error reports and stack traces, no telemetry, no IP.
- Detailed Sentry configuration to ensure user privacy
- No app restart required after providing Sentry consent
Removed / Changed
- Removed Boltz testnet support
- Removed Recoverbull sync page
- Server status page now makes more realistic calls
Bug Fixes
Wallet Core
- Address index issue — fixed via update to bdk-dart (bdk 2.0)
- Crash for unknown script transactions
- Prevent duplicate mnemonic import
- Mnemonic import freeze/crash
- Capital letters in mnemonic — no longer accepted (was causing errors)
- Correct Testnet electrum URLs
- LWK database initialization — fixed Liquid wallet database init issues
- Spam create wallet on startup
- Startup lag — fixed lag during wallet and seed loading on startup
- Startup error screen — gracefully handles and displays startup failures instead of freezing
Swaps
- Swap watcher race condition that could cause status update issues
- MRH swap — uses transaction ID to fully resolve as a swap transaction
- Swap flow wallet autoselect — prevents self-spends or same-network sends in the transfer flow
- Amountless invoice handling — throws a more descriptive error for amountless invoices on swaps
- Background tasks cleanup — removed unnecessary background tasks causing unexpected swap states and LWK db corruption
- Autoswap notice/warning fixes
- Testnet fix for recoverbull
Send / Receive
- LN receive success screen crash fixed
- Insufficient balance navigation — Continue on send amount page with insufficient funds no longer navigates to confirm page
- Sell/Pay flow — fixed "Could not fetch fees" bug
- Route unauthenticated users to login via buy/sell/withdraw
Backup & Security
- Physical backup verification — fixed backup test status not updating after completing verification
- Backup-before-PIN safety gate
- Backup completion flow via FSS Warning — after completing a backup, the warning lands directly on the "Reinstall" title instead of flashing "Backup and Reinstall"
- Backup wallet warning on home now updates correctly after a backup is complete
- "Vault created successfully" snackbar no longer covers the "Test Recovery" button
Exchange
- Exchange statistics — linear progress indicators, integer trade counts, currency conversion, thousands separators
- CA KYC sell limit — enforced $999 CAD buy/sell limit for Canadian users with limited KYC
- Argentina recipients
- Routing to support via "Get Help"
- Support chat attachments — improved image picker with better permission handling and clearer errors
- WebSocket reconnect loop — fixed infinite reconnect loop for unauthenticated users
Pricing & DCA
- Price graph refresh — users can now manually reload Bitcoin prices if automatic loading fails
- DCA confirmation text color in dark mode
- DCA UI fixes
Labels & Persistence
- Labels feature refactor — complete architecture refactor with database migration v11→v12; fixed upsert constraint failures, SQLite concurrency, and multiple related issues
- Transaction note persistence
- SQLite migration safety — catch blocks around label migration to prevent crash on failure
Network / Connectivity
- Custom mempool server — SSL toggle (auto-detected from URL), improved URL parsing/normalization, server status indicators, dark mode fixes, and hidden service support via Orbot
- Recoverbull Orbot detection — checks if Orbot is actually running on port 9050 instead of relying on user settings, preventing Tor-over-Tor errors
Input & Keyboard
- iOS price input keyboard — fixed to show correct number pad with decimal settings
- Keyboard lag — fixed lag when importing mnemonic passphrase or typing in label input fields
Theming
- Dark theme fixes — QR code backgrounds, PSBT flow, exchange logout sheet, Recoverbull button, custom Electrum server widget, exchange home KYC status card
- PIN light theme readability
- Custom fee dark mode
- Light mode exchange banner
- Delete logs dark mode fix
- Swap fees dark/light mode and text color fixes
- Storage warning screens dark mode background now matches the wizard
- Fade-to-background gradient no longer covers the title/description above the button
- Pull to sync loader no longer lands behind the Bull logo
Wizard / Onboarding Polish
- Removed translation bottom warning sheet in wizard
- Replaced next button with inline YES / NO continue button in the wizard (reporting program)
- Transparent chrome so small screens can see there is more to scroll
6.9.108-Internal Release
This release is only for testers. It is a proposed fix to the android migration failure issue #1879 .
It does not fix a broken storage, it only ensures that updates are safer for users.
Please reference #1879 (comment) for Test instructions
The changelog stays the same as https://github.com/SatoshiPortal/bullbitcoin-mobile/releases/tag/v6.9.1, with the addition of:
- Flutter secure storage hybrid strategy without migration
- Removal of boltz testnet support
- Prevent duplicate mnemonic import
- New onboarding wizard
- Server status page now makes more realistic calls
Update Log
29/04/26 11:31 PM IST : 6.9.102
- Fixes fss initalization for new installs
30/04/26 10:10 PM IST: 6.9.103
- Fixes mnemonic import bug causes freeze/crash
- Route unauthenticated user to login via buy/sell/withdraw
- Fixes crash for unknown script transactions
- Fixes routing to support via Get Help
- Dark mode fix for delete logs
- Dark/Light mode fix for swap fees
04/05/26 10:01 PM IST: 6.9.104
- Adds electrum timeout and retry via bdk-dart
- Text color on swap fees
- Text color on delete logs
05/05/26 10:01 PM IST: 6.9.105
- Allows electrum stopGap upto 5000
- New startup Wizard
- New Storage Warning Screens
- Pull to sync does not land loader behind bull logo
- Fix: Spam create wallet on startup
06/05/26 11:11 PM IST: 6.9.106
- Dark mode background on the storage warning screens now matches the wizard.
- Backup warning bottom sheet only shown if balance is above 0
- After completing a backup, the warning lands directly on the "Reinstall" title instead of flashing "Backup and Reinstall"
for a few seconds. - "Vault created successfully" snackbar no longer covers the "Test Recovery" button.
- Backup wallet warning on home now updates correctly after a backup is complete
- Testnet fix for recoverbull
- fixed: fade-to-background gradient covered the title/description above the button
- remove translation bottom warning sheet in wizard
- remove next button and put the YES / NO in the wizard (reporting program) as continue button
- chrome is transparent so small screen can see there is more to scroll
- updated translations for new warning and wizard pages
- updated german translations
08/05/26 11:11PM IST: 6.9.107
- Fixes Sell/Pay flow bug (Could not fetch fees)
- Detailed configuration for Sentry logs to ensure user privacy
- Sentry logs do not require restarting the app after providing consent
09/05/26 10:45 PM IST: 6.9.108
- Remove recoverbull sync page
6.9.6-fss-rescue
WARNING: This is a build that only performs secure storage rescue for users affected by a failed secure storage initialization.
Only use this release if the support team has recommended it.
6.9.1
⏺ New Features
- Better handling of FSS10 Migration failure on android via FSS hybrid storage — apps that fail to migrate will fallback to legacy storage with a warning on home to backup and reinstall the app
- Colombia (COP) deposits — new COP payment link deposit flow
- SINPE receipt on tx details — reusable card on success + details screens
- Pull-to-refresh on wallet home can be triggered from anywhere on the screen
- Reproducible builds + dev containers
- Real-time WebSocket notifications — balance, KYC status, and group membership updates arrive instantly instead of polling every 5 seconds
- Real-time support chat — support messages appear immediately via WebSocket push
- Enhanced exchange settings menu — new functional screens: Recipients, Transactions, Default Bitcoin Wallets, App Settings, Secure File Upload,
Statistics - Email notifications toggle — enable/disable email notifications in App Settings
- Secure file upload — KYC document upload screen with status indicators (Upload, In Review, Accepted)
- Trading statistics dashboard — buy/sell ratio, trade volumes, trade counts, average prices, and biller statistics
- Announcement banner improvements — truncated descriptions with ellipsis; tap to open full details in a bottom sheet
- Preferred currency improvements — exchange home handles empty balance currency; deposit/withdraw/pay screens default to preferred currency
- Backup warning overlay — bottom sheet hard warning for backup
- Scam consent warning — explicit consent required before funding exchange account
- Randomized OHTTP relay selection — relay randomly selected per payjoin call via Random.secure() to prevent network fingerprinting
- Payjoin self-transfer detection — detects self-spent transactions and shows a "Self-transfer" row on confirmation; self-spends bypass payjoin
- Close button on broadcasting screen — added since the app no longer auto-progresses when autosync is disabled
- 11 new languages — Arabic, Bulgarian, Bengali, Czech, Greek, Persian, Hindi, Korean, Brazilian Portuguese, Thai, Turkish
- Detailed German translations — community contributions from @bsn21m
- Opt-in error reporting — optional, self-hosted (disabled by default); only collects error reports and stack traces, no telemetry
- Ledger hardware wallet support
Bug Fixes
- Fix address index issue via update to bdk-dart (bdk 2.0)
- Swap watcher race condition — fixed race condition that could cause status update issues
- MRH swap — uses transaction ID to fully resolve as a swap transaction
- Swap flow wallet autoselect - prevents self-spends or same network sends in the swap/transfer flow
- Price graph refresh — users can now manually reload Bitcoin prices if automatic loading fails
- LN receive success screen crash — fixed UI crash on Lightning receive success screen
- Insufficient balance navigation — Continue on send amount page with insufficient funds no longer navigates to confirm page
- Amountless invoice handling — throws a more descriptive error for amountless invoices on swaps
- WebSocket reconnect loop — fixed infinite reconnect loop for unauthenticated users
- Exchange statistics — linear progress indicators, integer trade counts, currency conversion, thousands separators
- Correct DCA confirmation text color in dark mode
- Support chat attachments — improved image picker with better permission handling and clearer errors
- CA KYC sell limit — enforced $999 CAD buy/sell limit for Canadian users with limited KYC
- Argentina recipients fix
- Labels feature refactor — complete architecture refactor with database migration v11→v12; fixed upsert constraint failures, SQLite
concurrency, and multiple related issues fixed. - Transaction note persistence
- Physical backup verification — fixed backup test status not updating after completing verification
- Backup-before-PIN safety gate
- Keyboard input — fixed price input keyboard on iOS to show correct number pad with decimal settings
- Keyboard lag — fixed lag when importing mnemonic passphrase or typing in label input fields
- Prevent using capital letters for mnemonic that was leading to errors
- Correct Testnet electrum URLs
- Custom mempool server — SSL toggle (auto-detected from URL), improved URL parsing/normalization, server status indicators, dark mode fixes and hidden service support via Orbot
- Recoverbull Orbot detection — checks if Orbot is actually running on port 9050 instead of relying on user settings, preventing Tor-over-Tor errors
- Dark theme fixes — QR code backgrounds, PSBT flow, exchange logout sheet, Recoverbull button, custom Electrum server widget, exchange home KYC status card
- PIN light theme readability
- Custom fee dark mode fix
- DCA UI fixes
- Light mode exchange banner fix
- Startup lag fix — fixed lag during wallet and seed loading on startup
- Startup error screen — gracefully handles and displays startup failures instead of freezing
- LWK database fixes — fixed Liquid wallet database initialization issues
- SQLite migration safety — catch blocks around label migration to prevent crash on failure
- Background tasks cleanup — removed unnecessary background tasks causing unexpected swap states and lwk db corruption
- Autoswap notice/warning fixes
Acknowledgements
Special thanks to @iosifpeterfi for his contributions to flutter_secure_storage to implement a backup mechanism prior to migration on android and for general consultation on how to handle this issue regarding seed storage. With this backup mechanism we dramatically decrease the risk of data loss.
Huge effort by the rest of the team as well in handling this highly sensitive issue with seed storage and coming up with a workable solution.
6.8.2-fss-hybrid
This version uses two forks of the mainline flutter_secure_storage - one targeting v9 and the other targeting the latest v10 with migrateWithBackup that is compatible with v9
For devices that are unable to migrate to v10, the app will fallback to fss v9, recover data from v10 backup and show a warning to the user to backup their wallet and reinstall the app.
A fresh install will initialize v10.
This is a fix to #1879
This release and successive releases will not fix an app with a broken secure storage as a result of failed migration, it will only ensure that devices that have not yet updated are able to either migrate safely or fallback to deprecated storage and give them time to backup their wallet and perform a clean reinstall.
Swap Rescue Tool
WARNING: THIS IS NOT A PUBLIC RELEASE. DO NOT RUN THIS RELEASE UNLESS ADVISED TO DO SO BY THE BULL SUPPORT OR DEVELOPMENT TEAM
Secure Storage Rescue II
WARNING: THIS IS NOT A PUBLIC RELEASE. DO NOT RUN THIS RELEASE UNLESS ADVISED TO DO SO BY THE BULL SUPPORT OR DEVELOPMENT TEAM
Expires on 28th March, 2026
Swap-Rescue w/ Liquid Network Path Correction
WARNING: THIS IS NOT A PUBLIC RELEASE! ONLY USE IF ADVISED BY THE SUPPORT TEAM.
BACKUP YOUR WALLET SEED WORDS BEFORE RUNNING THIS BUILD!
This is an update to https://github.com/SatoshiPortal/bullbitcoin-mobile/releases/tag/v6.5.4-swap-rescue for a specific user who was running an older version prior to running the 6.5.4-swap-rescue apk where the liquid wallet was updated to the new network path. Additionally the version is bumped to 6.7.22 because this user had also run the secure storage rescue build and now requires a version above 6.7.21
This build checks the receive wallet ID used and udpates the path to the the correct latest network path.
Secure Storage Rescue
WARNING: THIS IS NOT A PUBLIC RELEASE. DO NOT RUN THIS RELEASE UNLESS ADVISED TO DO SO BY THE BULL SUPPORT OR DEVELOPMENT TEAM
Expires on 28th Feb, 2026