Files
punktfunk/docs-site/content/docs/pairing.md
enricobuehlerandClaude Fable 5 dfcc530ee7
ci / docs-drift (pull_request) Successful in 48s
ci / docs-site (pull_request) Successful in 1m30s
ci / web (pull_request) Successful in 2m8s
apple / swift (pull_request) Successful in 2m16s
apple / distribute (pull_request) Skipped
installer-smoke / smoke (debian-13) (pull_request) Successful in 58s
apple / screenshots (pull_request) Skipped
installer-smoke / smoke (fedora-44) (pull_request) Successful in 43s
ci / bun-nix (pull_request) Successful in 30s
ci / rust-arm64 (pull_request) Successful in 3m6s
installer-smoke / smoke (arch) (pull_request) Successful in 1m34s
ci / rust (pull_request) Successful in 7m54s
android / android (pull_request) Successful in 8m7s
installer bedding-in: --uninstall, NVIDIA silent-failure checks, the detection matrix as CI gate 7 — and the get-started track gets its screenshots
Phase 2 of the docs-and-onboarding overhaul (items 1-partial, 2 and 4 of the handoff):

install.sh: --uninstall reverses step 1 + step 6 per family (user units off first, only the
punktfunk packages actually installed, then the repo; config/groups/firewall stay, as
/docs/uninstall states) — smoke-tested as a new installer-smoke step on all three families.
The end-of-run check now catches the two NVIDIA silent failures on every family: no driver at
all, and a module the kernel refused to load (Secure Boot) via an nvidia-smi probe pointing at
the troubleshooting anchor; the Fedora ffmpeg-libs/NVENC warning folds into the same block.

check-docs-drift.sh gate 7: the manual 16-file os-release matrix PR #345 was verified with,
committed — every family's detection, its install line, its removal line and the four
unsupported pointers run through the real script under --dry-run on every push (docs-drift's
container gains curl, the script's own prerequisite).

Screenshots (RFC: "screenshots over prose"): four console shots captured from the same
storybook-fixture pipeline web-screenshots.yml runs — login and the armed Pairing page into
quickstart.md, the Approve dialog (access level + expiry + guest fast-path) into pairing.md
replacing the prose that described it, live status into web-console.md. Files under
docs-site/public/img/, dark-theme, bundled+preloaded by the docs build (verified served).
Still missing: a client host-list shot — linux-client-screenshots run 19546 built it, but its
artifact isn't API-downloadable; add it when a browser session can fetch the zip.

WP5 rider: the release-flow docs-freshness step now includes the website content look-over.

NOT flipped: installer stays preview — the handoff gates the default flip on real-box mileage
(Bazzite above all), which a Mac can't provide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 23:56:19 +02:00

3.7 KiB

title, description
title description
Pairing & Trust Admit a new device once — approve it from the web console or type a PIN — and it reconnects on its own from then on.

Punktfunk has no accounts and no cloud. A new device is let in once, by you, on your network; after that it reconnects automatically on a pinned identity, and the host lists it until you remove it. There are two ways to let a device in.

Approve it from the console (no PIN)

The fastest way: just connect from the new device. The attempt shows up in the web console under Pairing → Waiting for approval, with the device's name and fingerprint. Click Approve — optionally give it a label like "Living Room TV" — and it's paired on the spot; its next connect goes straight through.

Deny only dismisses the request (it can knock again; it isn't a blocklist). Requests expire on their own after 10 minutes.

Pair with a PIN

When you're at the device and the console isn't handy, or for the very first device: in the console open Pairing and click Pair a device. The host shows a 4-digit PIN and counts down a 2-minute window — type the PIN into the client:

  • Native apps (Apple, Linux, Windows, Android): select the host, or Pair with PIN… from its menu, and enter it.
  • Steam Deck (Decky plugin): pick the host in the Quick Access panel — an unpaired one offers Request access (the console approval above) or Use a PIN instead.
  • Moonlight: it runs the other way round — Moonlight shows a PIN, and you type it into the console's Moonlight (GameStream) pairing card. Arming doesn't apply. (Moonlight needs GameStream compat on first.)

If the window lapses, arm it again. A punktfunk:// link can't pair for you — it only starts a stream on a host this device already trusts.

Choosing access when you admit a device

Approving and deciding what the device may do are one dialog:

Approve this device: name, access level, expiry, and the one-click Approve as guest

The levels are Full control, Controller only and View only (Advanced opens the individual toggles — Access levels); expiry is Never or 1 h / 4 h / 8 h / custom. The defaults are right for your own new laptop; Approve as guest is for a friend's device — Controller only, for 4 hours, then it expires on its own. The same two controls sit on the Pair a device card, and apply to whichever device completes the PIN.

Managing paired devices

The console lists every paired device with its access (and a live countdown for temporary grants). From there you can change the level, extend or cut the expiry, or remove the device — removing revokes it immediately, even mid-session. Re-pairing a removed device is just the PIN ceremony again.

Can't pair at all? Troubleshooting → Pairing is rejected.

How it works, briefly

Each host has a stable identity (a certificate); clients pin its fingerprint, the host stores the client's. The PIN ceremony is SPAKE2, so someone who doesn't know the PIN gets one online guess and no offline attack. A host whose fingerprint changes is treated as an impostor — the client forces a fresh PIN ceremony rather than re-trusting it. Pairing is required by default; the reduced-security alternatives (serve --open, trust-on-first-use) exist for fully trusted single-user networks and are covered in Security & Safe Use. Scripts can pair from a terminal — the punktfunk CLI.