Uplink Docs
Desktop App & Web UI
Documentation

Desktop App & Web UI

The desktop app and the CLI are two front-ends over the same uplink-core crate, so they share one login profile, local state, tunnel set, request inspector, edge registry, and rule registries. Anything you do in one shows up in the other.

Desktop app

A Tauri macOS app that hosts the shared React/TypeScript UI. Run it from the uplink repo root with:

pnpm install --frozen-lockfile
pnpm -C app/desktop tauri dev

The UI covers tunnel management and add/detail flows — including each app’s access (choose a personal or organization owner, invite people, set a token, or restrict access by source IP) and firewall settings (a base request limit and reusable rules). Tunnel fields save automatically. Each tunnel’s address segment opens a publish menu (“Choose where this tunnel is published”): pin a managed region or self-hosted edge, “Select closest” to measure and pin the fastest, or assign/clear a verified managed-account custom-domain alias. Standalone aliases are configured by the edge operator and do not appear in this picker. The UI also includes settings, email-code sign-in, the traffic inspector, the edge registry, and reusable firewall-rule registries. Inline firewall_rules: from uplink.yaml sync into the same registry the desktop app reads.

View YAML emits portable configuration rather than internal state: personal ownership is omitted, organizations are written by stable slug, and a managed plan’s maximum bandwidth is omitted unless you selected a genuine lower cap.

Background serving

The desktop dashboard and the local serving agent have separate lifecycles. Closing the dashboard window leaves enabled tunnels serving and keeps Uplink in the system menu bar or tray, where its current tunnel count remains visible. Use Stop All Tunnels there or the main serving switch to take every public URL on the device offline.

An explicit Quit Uplink while tunnels are live asks whether to keep serving or stop all tunnels first. The default can be changed under Settings → Background serving. That section can also start Uplink at login; login launches it directly into the menu bar and resumes tunnels that were left enabled.

The agent is shared with the CLI, so Stop All Tunnels means the whole device, including tunnels started from uplink serve or uplink up. Closing only the dashboard never interrupts that shared formation.

Because the app already supervises that shared agent, don’t also install the system service on the same machine — uplink service install refuses the combination. That command belongs on headless, CLI-only hosts; see uplink service.

uplink ui serves the same UI over HTTP — useful on a server or in a container with no desktop.

uplink ui                                   # binds 127.0.0.1:4800
uplink ui --port 4801
uplink ui --tunnel                          # publish the UI through an Uplink tunnel
uplink ui --tunnel --auth s3cr3t -d         # tokened, detached in the background

The local server always binds 127.0.0.1 and does no authentication of its own — like the desktop app, whoever can reach the port is trusted. Remote access goes through --tunnel, which publishes the UI as an edge-gated Uplink tunnel: your account sign-in admits you, and --auth/--auth-file adds an access token — required on a self-hosted edge, which cannot verify account sign-ins. --tunnel-name sets the tunnel’s app name (default uplink-ui). Without -d, the tunnel is removed on Ctrl-C; with -d/--detach (requires --tunnel) a background process keeps serving until uplink stop <name>, uplink stop --all, or uplink down.

Search across 15 pages.
↑↓ navigate openEsc close