-
v0.8.0
Stableapple / swift (push) Successful in 1m10saudit / cargo-audit (push) Successful in 1m23sci / web (push) Successful in 1m7sci / docs-site (push) Successful in 1m23swindows / build (aarch64-pc-windows-msvc) (push) Successful in 3m58srelease / apple (push) Successful in 9m58sci / bench (push) Successful in 4m55sci / rust (push) Successful in 8m57swindows / build (x86_64-pc-windows-msvc) (push) Successful in 4m18sapple / screenshots (push) Successful in 5m55swindows-host / package (push) Successful in 7m56swindows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 1m19swindows-msix / package (x64, C:\Users\Public\ffmpeg, x86_64-pc-windows-msvc, C:\t) (push) Successful in 1m16sandroid-screenshots / screenshots (push) Successful in 2m29sarch / build-publish (push) Successful in 5m11sdecky / build-publish (push) Successful in 19sandroid / android (push) Successful in 4m36sflatpak / build-publish (push) Successful in 5m7slinux-client-screenshots / screenshots (push) Successful in 6m15srpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 10m14sweb-screenshots / screenshots (push) Successful in 2m40srpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 9m45sdocker / deploy-docs (push) Successful in 7sdocker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 4sdocker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 5sdocker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 5sdocker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 6sdocker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 8sdeb / build-publish (push) Successful in 4m21sreleased this
2026-07-05 19:45:56 +00:00 | 2 commits to main since this releaseWire-compatible with 0.7.x — existing pairings and clients keep working.
Display management — configurable virtual displays
punktfunk gives every client a virtual output at its exact resolution and refresh. This release adds a user-configurable policy surface on top of that, editable from a new Virtual displays section in the web console (persisted to
display-settings.json). Unconfigured hosts behave exactly as before — nothing changes until you opt in.- Keep-alive displays. A virtual display can now outlive the client that created it, so a momentary disconnect no longer tears the monitor down and reshuffles your windows. Reconnect is hardened: a returning client reclaims its own display instead of spawning a second one, a deliberate quit skips the linger entirely, and the disconnect-detection timeout is tunable (
PUNKTFUNK_IDLE_TIMEOUT_MS). - Forever displays (gaming-rig). Pin a virtual display for the lifetime of the host — created once and kept, ideal for a headless streaming box that should always present the same screen. Released on demand from the console or
POST /api/v1/display/release. - Topology. Choose how the virtual output sits relative to the machine's real monitors — extend, primary (virtual becomes primary, physicals stay on), or exclusive (virtual is the sole display) — independently of everything else.
- Conflict handling. When a second client asks for a display that's already busy, decide up front: separate / join / steal / reject. Windows (single-capturer IDD) defaults to reject with a clean error; GameStream returns 503.
- Per-client identity, and scaling that sticks. Each client gets a stable display identity, so on KDE your display scale round-trips — set the virtual output to 150 % or 125 % once and it is reapplied automatically on every reconnect.
- Multi-monitor. Several clients can act as monitors of a single desktop via display groups and a layout engine, arranged in a console x/y table.
Validated live on KWin (KDE), Mutter (GNOME), and the Windows IDD host. The status tray now lists any kept virtual displays in its tooltip.
GNOME / Mutter — high refresh by default
GNOME hosts now stream above 60 Hz with no configuration. The high-refresh virtual-monitor path (the client's exact WxH@Hz via Mutter's
RecordVirtual) was previously gated behind an opt-in flag, added after an old gnome-shell teardown crash. That crash is fixed, so the flag is gone — a 120/144/240 Hz client gets its real refresh out of the box. (On a host that also has a physical monitor attached, promoting the desktop and cursor onto the streamed output still uses Topology = Exclusive orPUNKTFUNK_MUTTER_VIRTUAL_PRIMARY=1.)Performance & connectivity
- GameStream: FEC packetization moved off the encode loop into a dedicated pipeline stage, taking forward-error-correction work off the video critical path.
- Native protocol: configurable data-plane port (
--data-port) — the punktfunk/1 data plane can bind a fixed UDP port and stream directly, skipping the hole-punch (and its ~2.5 s timeout) on a firewalled host.
Clients — Wake-on-LAN and saved-host editing
- Wake a sleeping host, and wait for it. The macOS/iOS/tvOS and Android clients now send the wake-on-LAN magic packet and show a wait-until-up overlay — power the box on and watch it come online before the stream connects, instead of failing against a host that isn't ready yet.
- Edit saved hosts. Both clients gained saved-host editing with MAC prefill, so wake-on-LAN is one tap away.
- Android also gets a console-style UI refresh and TV/tablet layout polish.
- macOS drops a sandbox entitlement that the App Store rejected.
Packaging & install
- Firewall openers now ship on RPM and DEB (firewalld services, shared from
packaging/linux), alongside a web-console opener — the host's ports are opened for you on a fresh install. - CachyOS firewall handling corrected to ufw, with ufw openers.
- Arch repo setup is fish-safe, ships firewalld services, and fixes the client package label.
Release engineering
- The Rust toolchain is now pinned to an exact version (
rust-toolchain.toml, 1.96.0) instead of the floatingstablechannel. A rebuilt CI image no longer silently changes rustfmt's rules and red-lightscargo fmt --all --checkon untouched files — local development, Linux CI, and the Windows runner all format identically now.
Install
Per-platform install and upgrade instructions: https://punktfunk.unom.io/docs/install — channel details: https://punktfunk.unom.io/docs/channels
The app-store builds (Apple TestFlight, Google Play alpha) are uploaded to their testing tracks and promoted manually.
Downloads
- Keep-alive displays. A virtual display can now outlive the client that created it, so a momentary disconnect no longer tears the monitor down and reshuffles your windows. Reconnect is hardened: a returning client reclaims its own display instead of spawning a second one, a deliberate quit skips the linger entirely, and the disconnect-detection timeout is tunable (