Releases: blue-archon/bluebubbles-app
Release list
Chat-List Reliability dnd.4 (v2.0.0+85 + upstream 2026-06-25)
9 commits over dnd.3.
What's better than dnd.3 (in plain terms)
- Your active conversations stay put. In dnd.3, a chat you were actively messaging — especially a busy group — could drop out of the chat list and only reappear when a new message arrived, then vanish again. Fixed: the chat now holds its place at the top.
- Busy group chats are lighter on your phone. dnd.3 could re-download a group's member list from the server on almost every incoming message; now it does that at most once every few minutes — less battery and data on active groups.
- Fewer random crashes. Fixed a crash that could hit when a message arrived at the same moment a conversation was opening.
- Better under-the-hood crash reporting. If the app ever closes on its own, it can now record the reason — invisible day to day, but it helps chase down the rare random close.
Fixes (technical)
- Active chat vanishing from the list.
updateChatLatestMessagehad no forward-only guard, so incremental sync could feed it an older delta message (an edit / read-receipt / backfill on a days-old message) and rewind the chat's sort key, burying an actively-messaged chat. The latest-message pointer now only advances in time, with a 2s tolerance for temp→real send swaps. This is an upstream ordering bug (still live indevelopment) — PR candidate. - Group participant refetch storm. A busy group whose sender handles carried a null/mismatched
originalROWIDre-fetched participants on nearly every inbound message. Rate-limited to once per 5 min per chat; genuine membership changes still refresh immediately. - Crash when a message lands before the messages view finishes loading.
Diagnostics (silent unless something fails)
- Android exit-reason capture now reports on every path, runs off the main thread, and no longer false-alarms on desktop.
- Log file no longer loses lines to concurrent isolate writes.
Assets
bluebubbles-v2.0.0.85-dnd.4-android.apk— Android (prod flavor)bluebubbles-desktop-2.0.0-13-x86_64.pkg.tar.zst— Arch / pacmanbluebubbles-linux-x64-v2.0.0.85-dnd.4.tar.gz— raw Linux x64 bundle (extract, runbundle/bluebubbles)
Heavy-Use Reliability dnd.3 (v2.0.0+85 + upstream 2026-06-25)
Heavy-use reliability, continued — 11 commits over dnd.2 (v2.0.0+85, upstream 2026-06-25 baseline).
Fixes
- Tapbacks no longer crash. Sending Ha Ha / emphasize / any in-app reaction hit a null-check on the reaction's missing temp GUID and was silently dropped (Android + desktop). Also filed upstream as BlueBubblesApp#3086.
- Same-chat re-entry via a share/notification intent no longer guts the open conversation ("Error loading message at index N"). Replaced the ownership-epoch approach with a mounted-view guard in
openChat. (BlueBubblesApp#3084) - MMS/group participants de-duplicated by address+service; pre-existing duplicates collapsed.
- Unknown sender in group notifications + the infinite loading spinner resolved. (BlueBubblesApp#3062)
- Outbound messages are never silently dropped when the prep phase fails — bounded retry, then a visible/retryable failure. (BlueBubblesApp#3074)
- New chats appear in the list at runtime, gated on
findChatByGuid. (BlueBubblesApp#3078) - Contact sync debounced/deferred while backgrounded to avoid cached-process binder kills.
- Latest-message linking moved onto the guarded sync path.
Diagnostics (silent unless something fails)
- Android process exit-reason capture on an unclean restart (ApplicationExitInfo).
- Startup / white-screen / native-kill breadcrumb instrument — routine logging quieted.
Assets
bluebubbles-v2.0.0.85-dnd.3-android.apk— Android (prod flavor)bluebubbles-desktop-2.0.0-11-x86_64.pkg.tar.zst— Arch / pacmanbluebubbles-linux-x64-v2.0.0.85-dnd.3.tar.gz— raw Linux x64 bundle
Heavy-Use Reliability dnd.2 (v2.0.0+85 + upstream 2026-06-25)
An unofficial community fork of BlueBubbles. dnd.2 is a heavy-use reliability pass on top of dnd.1 (same upstream development baseline, merged through 2026-06-25, 8bcf15cf). Not affiliated with or endorsed by the BlueBubbles project.
New in dnd.2 (over dnd.1)
Fixes found while soaking dnd.1 on desktop and Android:
- Background isolate no longer wedges around app pause/resume. Platform-channel calls were removed from background isolates (they could hang around the pause that arms the isolate drain), plus a DB write-lock and a drain watchdog. Fixes intermittent stalls and stuck sends under active use.
- The open conversation no longer gets gutted by a same-chat re-entry. A
MessagesServiceownership race could blank the thread or fill it with error tiles when the same chat was reopened quickly; ownership is now epoch-guarded. - A crash-poisoned image self-heals. A truncated file left by a mid-download crash used to show "Failed to display image" forever; a decode failure now triggers a one-time re-download.
- Native tapbacks work again on Android. Notification reactions (Like, etc.) failed with "No server URL configured" because native code read the legacy prefs store the Dart app had stopped writing; the ten native-read keys are now mirrored back to it.
- A message from an unknown number appears in the list immediately with its correct preview — no missing tile, and no blank subtitle line that only filled in after opening the chat.
- Hardened socket / method-channel payload parsing so a single null field can no longer abort a
Chat/Attachmentparse and drop the event.
Everything from dnd.1 (messaging-reliability + desktop-hardening tracks, the DND/ntfy feature tracks, and assorted bugfixes) is included — see the dnd.1 notes and the README for full detail.
Installing
- Android (
bluebubbles-v2.0.0.85-dnd.2-android.apk): signed with this fork's key — cannot install over the official app; uninstall it first (messages re-sync from your server). Package id is the standardcom.bluebubbles.messaging. Upgrades in place over dnd.1. - Linux (
bluebubbles-desktop-2.0.0-8-x86_64.pkg.tar.zst): Arch/pacman package —sudo pacman -U <file>. Installs to/opt/bluebubbles, menu entry included; per-user data in~/.local/share/app.bluebubbles.BlueBubbles/. Other distros: usebluebubbles-linux-x64-v2.0.0.85-dnd.2.tar.gz(extract and runbundle/bluebubbles). - Windows / macOS: build from source; the desktop changes compile for all three platforms but were runtime-validated on Linux only.
Hardened Baseline dnd.1 (v2.0.0+85 + upstream 2026-06-25)
An unofficial community fork of BlueBubbles — a hardened baseline on top of upstream development (merged through 2026-06-25, 8bcf15cf), with reliability fixes and desktop improvements. Not affiliated with or endorsed by the BlueBubbles project.
What this has that the upstream baseline doesn't
Messaging reliability (Android-focused, benefits all platforms)
- No more silently lost outbound messages. Two independent defects could make a sent message vanish with no error bubble (typically after backgrounding the app; worst in group chats):
- The background isolate's shutdown ("drain"), armed when the app is backgrounded, was never disarmed on resume — it killed the isolate at the first quiet moment under active use. New activity or resuming now cancels it. (Upstream's
d63131e52accepts sends during a drain; this fork additionally disarms the shutdown.) - The outgoing queue's prep phase (temp DB write) had zero failure recovery — a throw there dropped the message silently. It now retries while safe and otherwise surfaces a failed/retryable bubble.
- The background isolate's shutdown ("drain"), armed when the app is backgrounded, was never disarmed on resume — it killed the isolate at the first quiet moment under active use. New activity or resuming now cancels it. (Upstream's
Desktop (Linux-validated; also offered upstream as PRs #3068–#3072)
- Linux window can actually be closed (
secure_applicationbypassed on Linux, where it never worked). - Notifications de-forked onto
flutter_local_notifications(drops the stagnantlocal_notifierfork) — and click-to-open now works from any chat, not just the active one. - "Notification Sound" toggle: system sound / custom sound file / silent popup.
- Notifications work in the narrow single-pane window layout (previously silently dropped).
- Tray consolidated onto
tray_manager(removes duplicatesystem_traydependency). - Dead Tenor GIF button removed (Google sunset the public Tenor API on 2026-06-30).
From the fork's base (see README for full detail)
- Per-contact DND bypass via Android starred contacts (instead of the whole app bypassing DND), user-controlled toggle.
- UnifiedPush / ntfy reliability overhaul (method-channel type normalization, WorkManager payload spill for large attachments).
- Group-chat handle linking fixes (no more "Unknown" senders / silently dropped group notifications), plus assorted upstream bugfixes documented in the README.
Installing
- Android (
app-prod-release.apk): signed with this fork's key — cannot install over the official app; uninstall it first (messages re-sync from your server). Package id is the standardcom.bluebubbles.messaging. - Linux (
bluebubbles-desktop-*.pkg.tar.zst): Arch/pacman package —sudo pacman -U <file>. Installs to/opt/bluebubbles, menu entry included; per-user data in~/.local/share/app.bluebubbles.BlueBubbles/. - Windows / macOS: build from source (
flutter build windows|macos --release); the desktop changes compile for all three platforms but were runtime-validated on Linux only.
Validation status
Android APK validated in daily use on a physical device; Linux desktop validated in daily use. Windows/macOS: compile-verified only.
BlueBubbles v2.0.0+85 — Starred Contact DND Fork
What is this?
A fork of BlueBubbles v2.0.0+85 (Beta 8) that adds an opt-in Do Not Disturb bypass for starred/favorite Android contacts. Additionally incorporates general notification pipeline bug fixes. See README.md for specific details. The intention of this fork is to facilitate some quality of life improvements and allow any stakeholders to leverage this in the interest of the overall BlueBubbles project (e.g., pull from here into master, use this apk for personal use, etc.).
Changes from v2.0.0+85
Bug fixes
Unknown sender in group chat notifications — A second message arriving rapidly in a group chat showed "Unknown" as the sender name. The handle lookup raced with ObjectBox relation loading; the fix checks the in-memory transient field before falling back to the DB query.
Broken quick-reaction Like button — The native Like button on notifications was silently failing to send reactions due to a missing key prefix in SettingsHelper.kt, which caused the HTTP call to never be made.
New feature: starred-contact DND bypass
Instead of bypassing Do Not Disturb for all BlueBubbles notifications (the upstream default), this fork bypasses DND only for senders who are starred/favorited in your Android contacts app.
How it works: When a message arrives, the sender's native Android contact is looked up. If they are starred, the notification Person is built with a contact URI and marked important — Android's DND system then grants the exception automatically.
The feature is off by default. Enable it under:
Settings → Application Settings → Notification Settings → Override DND for Favorites
One-time Android setup (after enabling the toggle):
- Open Android Settings → Notifications → Do Not Disturb → Allowed during DND
- Enable Starred contacts (label varies by Android version)
- Star the contacts you want to reach you during DND in your contacts app
- Do not add BlueBubbles to the "Apps" override list
Install
- Download
bluebubbles-v2.0.0+85-dnd-prod-release.apkbelow - On your Android device: Settings → Apps → Install unknown apps → allow your browser or file manager
- Open the APK file and install
Note: This is a release build signed with a local key, not the upstream BlueBubbles key. You cannot update directly from the Play Store version — you must uninstall first if switching from Play Store, or build from source with your own key if you prefer.
For developers
The three commits on this fork are self-contained and independently cherry-pickable:
fix: resolve unknown sender in group notifications and infinite loading spinnerfeat: add starred-contact DND bypass with user-controlled settings toggledocs: add fork README documenting changes from v2.0.0+85
See README.md for a detailed change inventory, implementation notes (including the SharedPreferencesAsync/DataStore storage caveat for Kotlin-side setting reads), and a per-file change table.