Channels and DMs
Public and private channels, direct messages and group DMs. Presence, typing, unread counts and drafts that follow you between devices.
Open source · Windows, macOS, Linux & Docker · one binary
Channels, DMs, files and alerts for the whole LAN, from one server and no internet connection.
Run bubbles on any computer that stays on. Phones, laptops and desktops join in the browser over HTTPS, signed by a certificate authority bubbles creates for you. netdiag and your own scripts post alerts that everyone sees.
Free · Apache-2.0 · Works offline · No cloud account · Self sign-up
For everyone
People join from a laptop or a phone in under a minute. No admin needed while sign-up is open.
For the host
One file to run, one password to read, and your people can join. No wizard, no token to copy.
bubbles v0.3.0 is running
Open: https://192.168.1.20:28225/
Onboarding: http://192.168.1.20:28226/
CA fingerprint (SHA-256), compare it on each device:
A29F 73CA 36DA C90A 6905 A6D5 64AC E368 BF74 3EAD E54B 9A0B E449 0278 25CA 3A24
Sign in as: admin
Password: k7mq-x4pz-9vbd-h2nc
(also saved in C:\Users\you\AppData\Local\bubbles\admin-password.txt; deleted when you change the password)Sign-up
Sign-up closes by itself. Reopen it for the next party or add people yourself.
Sign in
While sign-up is open, the login page shows a Create an account link, so nobody has to wait for an invite.
What it does
Without an account on someone else's server: messages, files and people all live on one computer on your network.
Public and private channels, direct messages and group DMs. Presence, typing, unread counts and drafts that follow you between devices.
Reply in a thread without derailing the channel, react with any emoji, pin what everyone needs, and edit or delete your own messages.
A full emoji picker plus autocomplete for :emoji:, @people and #channels. @channel and @here reach everyone.
Upload by button, drag and drop or paste. Images, video and audio show inline, and GPS location is stripped from photos.
Full-text search across the channels and DMs you can see, narrowed with from:, in: and has:image.
An installable web app for phones and computers, opt-in push notifications, and a desktop tray app for Windows, macOS and Linux.
Sign-up is open for a day after the first start, then closes by itself. After that the admin makes an invite with a role, people scan the QR code, pick a name and they are in.
Settings, roles, an audit log, encrypted backups, certificate management and a reset for starting over.
Alerts
bubbles is the companion to netdiag. When netdiag sees a printer drop off, an IP conflict or a failed health check, it posts an alert, and everyone on the local network sees it in one channel. Any other tool can do the same.
info, warning and critical. Each person chooses which levels notify them, per channel.
A repeat with the same dedupe key updates the existing alert instead of flooding the channel. Optional re-notify for anything left open.
People acknowledge in the app; the sender resolves when the problem clears. Each app can only touch its own alerts.
The Go SDK queues alerts and retries through server restarts and rate limits, so a flapping network does not lose the message.
A tour
Captured from a running server by the same browser test harness that checks bubbles' layout and accessibility.
Threads
Open a thread from any message and reply there. The channel shows one reply count instead of the whole back-and-forth.
Emoji
The picker is built into bubbles and works offline, with search, categories and skin tones. Type : in the composer for quick autocomplete.
Files and photos
Paste or drag images, video, audio and documents into any channel or DM. Pictures open full size, and location data is removed from JPEG, PNG and WebP before anyone else sees them.
Search
Full-text search across everything you can see. Narrow it down with from:, in:#channel and has:file, has:image or has:link, then jump straight to the message.
On the phone
The same app on a phone, laid out for one hand. Add it to the home screen to install it, and turn on push notifications if you want alerts while it is closed.
Invites
The admin creates an invite with a role and an expiry. bubbles shows a link and a QR code, drawn in the browser so the secret never travels in a request URL. Point a phone camera at it and pick a name.
Administration
People, open connections, storage and free disk space, and the addresses to share, each with a QR code. Settings, roles, apps, webhooks, the audit log and encrypted backups are one click away.
Integrations
Four ways in, from a one-line curl to a full two-way bot. Every app gets its own token with only the scopes it needs, and each can be revoked on its own.
A URL per channel. Native JSON alerts, or point anything that posts to Slack at it: text, attachments and blocks work.
Messages, alerts, files and slash commands with a scoped app token, plus a realtime WebSocket event stream for two-way bots.
pkg/bubblesclient finds the server over mDNS, pairs with admin approval and pins the CA. The alert queue retries for you.
Claude and other agents can read channels, search, post messages and raise or resolve alerts through eight MCP tools.
$ curl --cacert bubbles-ca.pem https://192.168.1.20:28225/hooks/bwh_XXXX \
-H 'Content-Type: application/json' \
-d '{"alert": {"severity": "warning", "title": "Backup is late",
"text": "Last success 3 days ago", "dedupe_key": "backup:nas"}}'ok$ claude mcp add bubbles -e BUBBLES_CONN="bubbles://192.168.1.20:28225/?token=bub_XXXX&fp=sha256:AB12…" -- bubbles mcp> Summarise what happened in #netdiag-alerts today and resolve anything that has cleared.Webhook posts never mention anyone, and every app is rate limited. Full reference: integrations, MCP and OpenAPI.
list_channels Channels the token can seeread_messages Recent messages in a channelsearch_messages Full-text searchpost_message Say somethingpost_alert Raise or update an alertack_alert Acknowledge itresolve_alert Clear itlist_alerts What is still openSecurity
Browsers only give a web app notifications, offline mode and camera access over HTTPS. bubbles makes that work on a LAN without a public domain or a cloud service.
bubbles.local.Open sign-up, honestly: for the first day anyone on the network can create an account, and any password works. That suits a trusted LAN. Close sign-up, or switch to invites, at any time from the admin settings.
What it does not do: there is no end-to-end encryption. Whoever runs the server can read the messages on it. The full threat model is in docs/security.md.
Reset
bubbles travels. Bring it to a LAN party, a workshop or an event, then wipe it clean for the next one, from the admin Danger zone or the console.
Same crew, fresh start: the next session begins with empty channels.
Back to a fresh start: bubbles creates a new admin account with a new password, as if just installed.
Danger zone
Both resets need the admin password and the instance name typed exactly, show a preview of what will go, and can save an encrypted backup first. Web resets are limited to three tries an hour and written to the audit log; admins can turn them off and keep reset console-only.
Download
One server binary per platform, no installer and no runtime to add. First time? HOW-TO-OPEN.txt in the zip covers the SmartScreen (Windows) and Gatekeeper (macOS) warnings for unsigned programs.
SHA256SUMS$ docker run -d --network host -v bubbles-data:/data ghcr.io/donaldsteele/bubblesMulti-arch, distroless, runs as non-root. Host networking keeps bubbles.local working.
Optional desktop companion: sign in once, get notifications and open bubbles from the tray.
Default ports: 28225 for the app (BUBBL on a phone keypad) and 28226 for onboarding, picked to stay clear of other servers and games. All releases: github.com/donaldsteele/bubbles/releases · Build from source: bash scripts/build.sh · Guides: onboarding, admin