Files
punktfunk/docs-site/content/docs/steam-deck.md
T
enricobuehler 7f639f7cf5
apple / swift (push) Successful in 1m16s
apple / screenshots (push) Successful in 6m29s
ci / web (push) Successful in 1m11s
ci / docs-site (push) Successful in 56s
android / android (push) Successful in 13m53s
arch / build-publish (push) Successful in 12m20s
decky / build-publish (push) Successful in 19s
ci / bench (push) Successful in 5m50s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 10s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 9s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 34s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 59s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 5m45s
docker / deploy-docs (push) Successful in 29s
deb / build-publish (push) Successful in 11m25s
ci / rust (push) Successful in 24m23s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 18m16s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 18m8s
docs: link every client in the clients-page chooser + correctness sweep
The "Which should I use?" table on the clients page listed most client
names as bold text, not links — only the Decky plugin and pf-webos were
clickable — so the client references appeared broken. Link each client to
its section (or dedicated page), and fix a stale Windows headless command.

Repo-wide docs correctness/staleness pass against the code:
- steam-deck: client-not-found -> flatpak-not-found (the real backend code)
- install: host cert is punktfunk-host-windows_<ver>.cer, not ..._setup.cer
- configuration: GPU_PRIORITY_CLASS default is auto; 10BIT/444 are default-on
- how-it-works/index: GameStream/Moonlight is opt-in (--gamestream)
- roadmap: clipboard sync is shipped, not planned
- install-client: MSIX/cert artifacts are arch-suffixed (_x64/_arm64)
- requirements: fix garbled 22H2/IddCx sentence
- status: Linux encode also covers AMD/Intel (VAAPI/Vulkan Video)
- automation: add the plugins.changed event
- windows-host: note the optional bundled VB-CABLE virtual mic
- sway: PUNKTFUNK_COMPOSITOR=hyprland is a wlroots-family alias
- running-as-a-service: punktfunk-probe is a source-build-only dev tool

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-18 09:50:29 +02:00

6.1 KiB

title, description
title description
Steam Deck (Decky) Install the punktfunk Decky plugin to discover, pair, and stream from the Steam Deck's Gaming Mode — no drop to Desktop.

The Decky plugin adds a punktfunk panel to the Steam Deck's Quick Access Menu (the button), so you can find a host, pair, and start streaming without leaving Gaming Mode. It's the couch-friendly front end for the Steam Deck — built from real Steam UI, gamepad-navigable end to end.

Under the hood the plugin doesn't decode video itself: it discovers hosts, runs the PIN pairing, and launches the regular Linux client (the io.unom.Punktfunk Flatpak) the way gamescope needs so it fullscreens correctly. So the Deck has two ways to stream, and they share one client + one paired identity:

  • Gaming Mode → the Decky plugin (this page).
  • Desktop Mode → run the Flatpak directly, like any Linux app.

Before you start

You need three things on the Deck:

  1. Decky Loader — the plugin loader. Install it from decky.xyz if you haven't already.

  2. The punktfunk client Flatpak — the plugin launches it, so install it once in Desktop Mode:

    flatpak install --user https://flatpak.unom.io/io.unom.Punktfunk.flatpakref
    

    (Full options: Install a Client → Steam Deck. Without it, the panel's Stream button reports flatpak-not-found.)

  3. A punktfunk host running on your LAN — see Install the Host. The Deck finds it automatically over mDNS, so nothing to configure here.

Install the plugin

The plugin is published as a ready-to-install zip on every build. You don't need the Decky CLI or a developer toolchain — just paste a URL into Decky:

  1. On the Deck, open the Quick Access Menu () → the plug icon (Decky) → the gear (Settings) → enable Developer Mode.

  2. Open the new Developer tab and choose Install Plugin from URL.

  3. Paste the stable link and confirm:

    https://unom.io/pf-decky
    

The punktfunk panel appears in the Quick Access Menu right away — no Deck restart needed.

Channels. https://unom.io/pf-decky is a short link to the stable channel (moves on vX.Y.Z releases), currently https://git.unom.io/api/packages/unom/generic/punktfunk-decky/latest/punktfunk.zip. For the latest main build use the canary zip — https://git.unom.io/api/packages/unom/generic/punktfunk-decky/canary/punktfunk.zip — or pin an exact version with https://git.unom.io/api/packages/unom/generic/punktfunk-decky/<version>/punktfunk.zip. See Release Channels.

Use it

Open the punktfunk panel from the Quick Access Menu, or Open punktfunk for the full-screen page (host list + stream settings).

  • Discover — hosts on your network appear automatically (mDNS). Tap Refresh to rescan. A lock icon means the host requires pairing.
  • Pair — for a locked host, arm pairing on the host (its console or web console shows a 4-digit PIN), then enter that PIN on the Deck's keypad. Pairing persists, so the next connection is silent.
  • Stream — pick a host and the stream launches fullscreen in Gaming Mode (as a "Punktfunk" Steam shortcut, so gamescope focuses it — it shows up in your library with its own artwork, and relaunching it from there streams to the last host).
  • Settings — resolution, refresh, bitrate, gamepad type, and mic, written to the client the plugin launches. Leave Resolution / Refresh on Native to get the Deck's own mode. With Gamepad type on Automatic the Deck's built-in controller is forwarded as a Steam Deck pad (paddles, both trackpads, gyro) — that needs Steam Input set to Off for Punktfunk (game page → ⚙ → Controller Settings), else Steam keeps those controls and only sticks + buttons reach the host.

To leave a stream: hold L1 + R1 + Start + Select for about two seconds, or close the "game" from the Steam overlay. Either ends the session and drops you straight back to Gaming Mode.

Updating

The plugin checks for updates itself — no Decky store needed. It covers both the plugin and the streaming client (they version independently), so when either has a newer build the panel shows an Update button (in the Quick Access Menu and on the full page). Tap it: the client updates in place, and if the plugin itself changed it downloads, verifies, replaces itself, and reloads — all without leaving Gaming Mode.

The plugin check follows the channel you installed from: a plugin installed from the stable link tracks stable releases; one installed from the canary link tracks main builds.

Updating the client from the terminal? The client is a per-user Flatpak, so run flatpak update --user io.unom.Punktfunkwithout sudo. sudo flatpak update only touches the system installation and silently skips the client. (Un-sudo'd flatpak update updates both scopes, so it's the safe default.)

If the plugin Update button never appears (an older Decky Loader, or no network), update the plugin manually: Decky → DeveloperInstall Plugin from URL, and paste the same channel link again. Decky replaces the installed copy in place.

Troubleshooting

Symptom Fix
Stream shows flatpak-not-found Install the client Flatpak in Desktop Mode (see Before you start).
No hosts listed Make sure the host is running and on the same LAN; the Deck needs avahi (shipped on SteamOS). Tap Refresh.
Pairing fails / "not armed" The PIN is shown only after you arm pairing on the host. Arm it, then enter the PIN within the window.
Stream launches but doesn't focus Start it from the panel (not by launching the Flatpak by hand) so Steam/gamescope focuses it.

The plugin source lives in clients/decky.