-
v0.12.0
Stableci / docs-site (push) Successful in 50sci / web (push) Successful in 54sci / bench (push) Successful in 6m1sci / rust (push) Successful in 24m53sapple / swift (push) Successful in 1m13sapple / screenshots (push) Successful in 4m49sdocker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 12sdocker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 11sdecky / build-publish (push) Successful in 25sdocker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 11sdocker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 11sandroid-screenshots / screenshots (push) Successful in 3m17sdocker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 7m39swindows-host / package (push) Successful in 8m42srelease / apple (push) Successful in 9m30slinux-client-screenshots / screenshots (push) Successful in 9m1sdocker / deploy-docs (push) Successful in 24sweb-screenshots / screenshots (push) Successful in 2m52sdeb / build-publish (push) Successful in 12m52swindows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 4m4sarch / build-publish (push) Successful in 13m47sandroid / android (push) Successful in 14m35swindows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Successful in 4m10srpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 13m52srpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 13m0sflatpak / build-publish (push) Successful in 6m35sreleased this
2026-07-15 21:30:20 +00:00 | 2 commits to main since this releaseWire-compatible with 0.11.x and 0.10.x — no protocol change (
WIRE_VERSIONstays 2), so existing pairings and clients keep working with no re-pairing. This is a codec + controllers release: PyroWave, a new intra-only low-latency LAN codec, ships in every default build with native decode on every client including a hand-written Apple Metal path; the Steam Controller 2 can be used from an Android client (experimental); and pairing, Automatic bitrate, the gamescope cursor, the web console, and a new launch-script hook all improve. PyroWave is opt-in per session, so nothing changes for existing H.264/HEVC/AV1 streams.PyroWave — a low-latency LAN codec
PyroWave is an intra-only wavelet codec built for the LAN: there is no inter-frame reference chain, so a lost packet costs blocks in a single frame instead of a stall, and every frame is independently decodable.
- Ships in every default build. NVIDIA hosts advertise it via a per-session CPU-RGB capture fallback, so it's available with zero configuration.
- Native decode everywhere — Windows, Linux, Android, and now Apple: a hand-written Metal decoder on Mac, Apple TV, and iPad (no MoltenVK), PSNR 77–88 dB.
- Datagram-aligned packets with partial-frame delivery, so a lost datagram costs blocks, not a frame.
- Follows a mid-stream resolution change without a reconnect (the HUD tracks the switch).
- Opt-in per session — existing H.264/HEVC/AV1 sessions are untouched.
Steam Controller 2 — experimental (Android clients)
You can now use a Steam Controller 2 while streaming from an Android client to a Linux host: connect the controller to your Android device — wired, or over the wireless Puck dongle — and it's forwarded to your games as a real Steam Controller 2, with working sticks and menu navigation. This is early and experimental, so expect rough edges — please report anything you run into. For now, capturing the controller only works on the Android client; the other clients can't forward one yet.
Also in this release
- Typed pairing rejections — every client now surfaces why pairing failed (not armed, bound to another device, wrong ABI, …) instead of a generic "not accepted."
- Decode-aware Automatic bitrate — Automatic reads the client's decode-stage latency and caps at the real decode limit, so a fast link no longer pins a rate the decoder can't keep up with. Decode latency is now reported by the Apple, Windows, and Linux clients too, not just Android.
- gamescope pointer in-stream — the cursor shows up in gamescope streams (captured as metadata and composited on the GPU) with no forced compositor composite, so there's no capture performance hit.
- Stream-active runtime marker — while a client is streaming, the host maintains
$XDG_RUNTIME_DIR/punktfunk/stream(a shell-sourceable file with the negotiated mode). A per-title launch script can branch on it — run the game as-is when streaming, or fall back to a local multi-monitor layout otherwise — for streaming-aware game launching on multi-head hosts. - Web console pass — native (default-plane) sessions now appear and are controllable on the console (they read as "Idle" while actively streaming before); the codec list follows what the GPU can actually encode; plus a sweep across pairing, displays, library, stats, logs, auth, and localization.
Fixes
- Windows — lid-closed virtual-display targets now activate (explicit CCD path-commit fallback) instead of never coming up on a clamshell laptop.
- Android — the gamepad exit chord is usable again (shorter hold + an on-screen "hold to quit" hint).
- Apple — export-compliance metadata corrected (unblocks TestFlight/App Store uploads).
- Docs — the community pf-webos client for LG TVs is now documented.
Downloads