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.