Skip to content

feat(network): add Wi-Fi hotspot (access point) settings#2178

Draft
ptrinh wants to merge 1 commit into
getumbrel:masterfrom
ptrinh:feat/wifi-hotspot
Draft

feat(network): add Wi-Fi hotspot (access point) settings#2178
ptrinh wants to merge 1 commit into
getumbrel:masterfrom
ptrinh:feat/wifi-hotspot

Conversation

@ptrinh

@ptrinh ptrinh commented Jun 26, 2026

Copy link
Copy Markdown

What

Adds a Wi-Fi Hotspot feature: an Umbrel with a capable Wi-Fi adapter can broadcast its own Wi-Fi network for other devices to join, configurable from Settings → Wi-Fi Hotspot.

It's built on NetworkManager — the same stack already used for Wi-Fi client mode (system.wifi.*) — so no new system packages are added to the OS image.

Why

Umbrel already supports joining a Wi-Fi network as a client, but not hosting one. Running the device as an access point is useful for extending coverage (e.g. an Umbrel in another room acting as a second AP) or providing a network where there isn't one. This mirrors a setup I run at home with a small box bridged onto the LAN so devices roam between APs without dropping connections.

How it works

Backend (umbreld) — new functions in modules/system/system.ts, exposed via modules/system/wifi-hotspot-routes.ts:

Procedure Purpose
wifiHotspot.supported Device has a Wi-Fi adapter that advertises AP mode (iw list, with a safe fallback)
wifiHotspot.status Current saved config + whether the AP is live
wifiHotspot.enable Create/bring up the AP via nmcli; rolls back to the previous working config on failure
wifiHotspot.disable Tear down the AP (keeps the saved config)

Config is persisted under settings.wifiHotspot and re-applied on boot/OTA via restoreWifiHotspot(), exactly like restoreWiFi().

Two modes:

  • Shared (default): NetworkManager runs DHCP + NAT for clients (ipv4.method shared). Safe and self-contained.
  • Bridge to LAN (advanced, experimental): bridges the AP onto the wired LAN so clients share the main subnet — this is what makes roaming between the main router and this AP seamless. Clearly flagged in the UI as experimental since it reconfigures the wired connection.

UI (packages/ui) — new Settings → Wi-Fi Hotspot page (drawer/dialog, mirroring the existing Wi-Fi page):

  • Enable toggle, SSID, password
  • Advanced section: frequency band (2.4/5 GHz), channel, country code, hidden network, and the bridge-to-LAN toggle
  • The row only appears when wifiHotspot.supported is true

Files

  • packages/umbreld/source/modules/system/system.ts — hotspot functions
  • packages/umbreld/source/modules/system/wifi-hotspot-routes.ts — tRPC router (new)
  • packages/umbreld/source/modules/server/trpc/index.ts — register router
  • packages/umbreld/source/index.tssettings.wifiHotspot schema + boot restore
  • packages/ui/src/modules/wifi-hotspot/wifi-hotspot-drawer-or-dialog.tsx — UI (new)
  • packages/ui/src/routes/settings/wifi-hotspot.tsx — page entry (new)
  • packages/ui/src/routes/settings/index.tsx, .../settings-content.tsx — route + list row
  • packages/ui/public/locales/en.json — strings

Status / testing

Opening as a draft — the code mirrors existing umbreld/NetworkManager patterns but I don't have umbrelOS Wi-Fi hardware to validate the nmcli AP flows end-to-end. Specifically wanting maintainer eyes on:

  1. Build/typecheck/lint in CI (I couldn't run the monorepo toolchain locally).
  2. The nmcli AP commands across supported adapters (band/channel/country handling, and whether iw reg set is the right place for the regulatory domain).
  3. The experimental bridge mode — the eth0-into-bridge path is the riskiest part and should be hardened (and possibly gated/feature-flagged) before it ships, to avoid lock-out scenarios.

Happy to iterate on scope — e.g. land shared/NAT mode first and defer bridging.

🤖 Generated with Claude Code

Adds a WiFi Hotspot feature so an Umbrel with a capable WiFi adapter can
broadcast its own network for other devices to join. Built on NetworkManager
(same stack as the existing WiFi client support) so no new system packages are
required.

Backend (umbreld):
- system.ts: supportsWifiHotspot/startWifiHotspot/stopWifiHotspot/
  getWifiHotspotStatus/restoreWifiHotspot via nmcli AP-mode connection
- wifi-hotspot-routes.ts: supported/status/enable/disable tRPC procedures
  with rollback to the previous config on failure
- persisted under settings.wifiHotspot; restored on boot/OTA

UI:
- Settings > Wi-Fi Hotspot page (enable toggle, SSID, password) with an
  Advanced section: band, channel, country code, hidden SSID, and an
  experimental 'bridge to LAN' option for seamless roaming
- shown only when the device reports hotspot support

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant