Mobile & PWA¶
BamDude's frontend is fully responsive and ships as an installable Progressive Web App (PWA). There is no native iOS/Android app — the web app is the app, and on Chromium / iOS Safari it can be added to your home screen for a fullscreen, app-like experience.
This page covers what works on a phone, how to install the PWA, browser compatibility, and the gotchas around HTTPS, push, and remote access.
What works on mobile¶
The whole UI is touch-friendly and responsive — there are no "desktop-only" pages.
| Area | Mobile support |
|---|---|
| Printer cards & live status | Yes — cards collapse to compact mode below 768px |
| Camera streams (MJPEG / snapshot) | Yes — same endpoints as desktop |
| Print queue management | Yes — drag-and-drop works with touch |
| Archive browser & detail view | Yes — long-press for context menu |
| Library / file manager | Yes |
| Stats dashboards | Yes — charts reflow to a single column |
| Notifications setup | Yes |
| Settings | Yes |
Bottom-nav bar in portrait
On phone-sized portrait viewports a compact nav bar replaces the desktop sidebar. The hamburger / drawer expands the full menu.
Installing the PWA¶
BamDude's manifest.json declares display: standalone, theme color, icons, and four launch shortcuts (Printers, Archives, Queue, Projects) so installed app shortcuts appear on long-press of the home-screen icon (Android).
iOS Safari (Add to Home Screen)¶
- Open BamDude in Safari (other iOS browsers can't install PWAs).
- Tap the Share button (square with up-arrow).
- Scroll down and tap Add to Home Screen.
- Edit the name if you want, then tap Add.
The app launches fullscreen with no browser chrome.
Android Chrome / Edge (Install app)¶
- Open BamDude in Chrome or Edge.
- Tap the three-dot menu.
- Tap Install app (or Add to Home Screen on older Chromium).
- Confirm with Install.
Desktop (Chrome / Edge)¶
Look for the install icon (small computer with down-arrow) in the address bar, or use Menu → Install BamDude…. The installed app behaves like any other desktop app — pinnable, alt-tab-able, and with its own window.
HTTPS prerequisite¶
PWA features (install prompt on Chromium, service worker, offline cache) require HTTPS or localhost. If you only access BamDude over plain HTTP at e.g. http://192.168.1.50:8000:
- The Chrome / Edge install prompt will not appear (Safari iOS is more permissive — Add to Home Screen still works over HTTP).
- The service worker still registers on
localhost, but not on plain-HTTP LAN IPs in newer Chromium.
For LAN deployments you have two clean options:
- Reverse proxy with TLS — put nginx, Caddy, or Traefik in front of BamDude and let it terminate HTTPS. See Reverse proxy & HTTPS.
- Tailscale — reach BamDude (and its virtual printers) over your tailnet with no port-forward. BamDude can show a VP's tailnet address to paste into a slicer; the slicer's own CA import is still required. See Tailscale.
Both paths give you a real https://… URL that satisfies the PWA install requirement and unlocks every modern browser feature.
Browser compatibility¶
| Browser | Install | Offline cache | Web Push |
|---|---|---|---|
| Chrome / Edge (Android) | Yes (HTTPS) | Yes | Yes |
| Chrome / Edge (Desktop) | Yes (HTTPS) | Yes | Yes |
| Safari (iOS 16.4+) | Yes | Yes | Yes (limited) |
| Safari (iOS < 16.4) | Yes | Yes | No |
| Safari (macOS 16.4+) | Yes | Yes | Yes |
| Firefox (Android / Desktop) | No | Yes | No (no Web Push) |
Firefox doesn't ship Web Push for sites
Firefox's "install" UX is also gone on desktop. The site still works fine in Firefox — you just won't get an icon on the home screen / dock.
Push notifications¶
BamDude supports several notification channels — most users on mobile run one of the always-online ones rather than relying on browser Web Push:
- Telegram — most popular for mobile; the bot pushes through Telegram's app, no PWA install needed.
- ntfy — install the ntfy app, subscribe to your topic.
- Pushover
- Discord, Email, Home Assistant, WhatsApp (via CallMeBot).
Configure them in Settings → Notifications. See Notifications for per-channel setup.
Why Telegram beats browser push for printers
Browser Web Push depends on the device + browser staying registered. Telegram is a separate background service and survives reboots, browser cache wipes, and PWA reinstalls without re-subscribing.
Camera streams on mobile¶
The same MJPEG / snapshot URLs that work on desktop work on mobile. Streams render inside <img> tags with short-lived stream tokens that the frontend rotates automatically.
Some platform quirks to know about:
- iOS Safari pauses background tabs after roughly 60 seconds — when you bring the tab back to the foreground the stream reconnects automatically (the stream-token sync hook re-runs on focus).
- Cellular data — MJPEG streams burn roughly 5 MB/min depending on resolution and FPS. Consider lowering FPS in Settings → Camera or using the snapshot view if you're on a metered connection.
- Service worker intentionally does not cache
/camera/streamor/camera/snapshot— Safari's SW had streaming-response bugs, so these go straight to the network.
Remote access (away from your LAN)¶
To use BamDude from outside your home network you need one of:
| Approach | Setup effort | Best for |
|---|---|---|
| VPN home (WireGuard / OpenVPN) | Medium | Self-hosters who already run a VPN gateway |
| Tailscale | Easy | Most users — zero firewall config, automatic HTTPS via MagicDNS |
| Public reverse proxy + TLS | Medium | Users with a real domain who want browser-direct access |
See:
- Tailscale — recommended path; gives every device on your tailnet HTTPS access without exposing anything to the public internet.
- Reverse proxy & HTTPS — for users who want a public
https://printer.example.comURL.
Don't expose plain HTTP to the internet
BamDude's auth is robust, but plain HTTP leaks every login over the wire. If you go public, terminate TLS at a proxy or use Tailscale.
Offline cache¶
The service worker (/sw.js) caches the app shell — HTML, JS, CSS, icons — using a network-first strategy for HTML/JS/CSS and cache-first for images. When the network drops:
- The UI loads from cache, so you can still navigate the app shell.
- Live data (printer status, queue, archives list) is read-only and stale — the WebSocket reconnects automatically when the network comes back.
- API calls return a
503 {"error": "offline"}response so the UI can show offline placeholders.
This is enough to glance at "what was on screen last" without internet, but it isn't an offline mode for actual operations.
Battery & data tips¶
- Close camera streams when you aren't actively monitoring — they're the single biggest battery + data drain.
- Lower stream FPS in Settings → Camera if you don't need 30 fps for casual checking.
- Use Wi-Fi for live monitoring; switch to snapshot-only view on cellular.
- Telegram > browser tab for "did the print finish?" alerts — keeps the BamDude tab from sitting open burning battery.
Limitations¶
- No native iOS/Android app — there is only the PWA. The Bambu Handy app is unrelated to BamDude.
- iOS Web Push has tighter background limits than desktop and only works on iOS 16.4+ with the PWA installed (not from a regular Safari tab).
- Private / incognito mode in some browsers disables service-worker registration, which means no install prompt and no offline cache.
- No native share-target upload yet — you can't "Share to BamDude" a 3MF from another app today. Upload via the in-app file manager or virtual printer FTP instead. See File manager.
Troubleshooting¶
Add to Home Screen / Install option missing
- On Chrome / Edge make sure you're on HTTPS — see HTTPS prerequisite above.
- Make sure you're on the BamDude origin itself, not a docs preview at
docs.bamdude.top. - Reload the page so the manifest and service worker register before triggering install.
- On Android in private mode the install option is suppressed by Chrome.
Push notifications never arrive
- Browser permission must be Allowed for the site (check site settings).
- Check the browser version — iOS < 16.4 has no Web Push at all.
- Easier path: use Telegram or ntfy instead — they don't depend on browser push subscriptions surviving cache clears.
Camera shows a black box on mobile after returning from background
- The stream token in the cached service worker may have expired. Pull-to-refresh once and the new token is fetched.
- On iOS Safari this is normal behaviour after a long background pause — the stream auto-reconnects.
Login redirects in a loop after installing the PWA
- Clear the PWA's site data: long-press the icon → App info → Storage → Clear, then reopen.
- This is almost always a stale refresh-token cookie from before you installed.