• v0.6.0 af13f0b749

    v0.6.0
    windows / build (aarch64-pc-windows-msvc) (push) Has been cancelled
    windows / build (x86_64-pc-windows-msvc) (push) Has been cancelled
    apple / swift (push) Has been cancelled
    apple / screenshots (push) Has been cancelled
    audit / cargo-audit (push) Has been cancelled
    android-screenshots / screenshots (push) Successful in 2m18s
    android / android (push) Successful in 4m13s
    decky / build-publish (push) Successful in 26s
    windows-host / package (push) Successful in 6m36s
    windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 1m10s
    docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 2m50s
    docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 35s
    release / apple (push) Successful in 7m53s
    windows-msix / package (x64, C:\Users\Public\ffmpeg, x86_64-pc-windows-msvc, C:\t) (push) Successful in 1m10s
    docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 2m32s
    deb / build-publish (push) Successful in 9m52s
    docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 2m21s
    docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 53s
    web-screenshots / screenshots (push) Successful in 2m38s
    ci / web (push) Successful in 48s
    ci / rust (push) Successful in 11m43s
    linux-client-screenshots / screenshots (push) Successful in 1m33s
    flatpak / build-publish (push) Successful in 4m8s
    rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 10m10s
    rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 9m49s
    docker / deploy-docs (push) Successful in 25s
    ci / docs-site (push) Successful in 57s
    ci / bench (push) Successful in 5m9s
    Stable

    enricobuehler released this 2026-07-03 12:19:18 +00:00 | 13 commits to main since this release

    ⚠️ Changed

    • The Windows host now requires Windows 11 22H2 (build 22621) or newer. Its virtual display driver is built against the IddCx 1.10 framework, which older Windows doesn't ship — on Windows 10 (including LTSC) and Windows 11 21H2 previous installers appeared to work but the display device failed with Code 10. The installer now refuses up front with an explanation instead.
    • Windows host and its bundled drivers upgrade together. The host↔driver channels moved to a sealed v2 protocol (below); mixed old/new combinations fail closed with a diagnosis in the log rather than misbehaving. The installer handles this automatically — just don't hand-mix a new punktfunk-host.exe with old drivers.
    • Fully wire-compatible with 0.5.x clients — no protocol change; existing pairings keep working.

    New: status tray icon (Windows + Linux hosts)

    No more digging through logs or opening a terminal to check whether the host survived a reboot or an update. punktfunk-tray sits in the notification area and shows the service state at a glance — running / stopped / starting / degraded / failed, with the live session in the tooltip ("streaming 2560×1440@120") — and one right-click offers:

    • Open web console (also the left-click action) — shown only when a console is actually answering on this machine (detected live, works for package and repo-run consoles alike)
    • Approve pairing request… — appears when a device is waiting for approval
    • Start / Stop / Restart the host — one UAC prompt per action on Windows, plain systemctl --user on Linux
    • Open logs folder and Exit tray

    Windows: installed by the new "status icon" installer task (on by default), one icon per signed-in session, survives Explorer restarts. Linux: ships in the host packages with an autostart entry that only activates for users who actually run a host; KDE renders it natively (GNOME needs the AppIndicator extension). Status is read from the service manager first plus a new loopback-only GET /api/v1/local/summary (non-sensitive counts/booleans — no PINs or fingerprints), and punktfunk-host service restart is a new subcommand.

    Security — Windows host↔driver channels sealed

    The frame ring (host → virtual display) and the virtual-gamepad channels no longer use named shared objects that a sibling service account could open by name. All shared sections/events are now unnamed, and their handles are duplicated directly into the driver's host process with least access — only the two endpoint processes can reach a frame or a pad's input, matching Desktop Duplication's isolation in user mode. The drivers verify what they're handed (pad index + magic), and the denial of the old sibling-service vector was verified empirically. The gamepad drivers' logic is now 100 % safe Rust over a small audited unsafe layer (pf-umdf-util).

    If you host on Windows, upgrade — older host builds with the named channels have been pulled from the package registry.

    Windows host reliability

    • One binary for every GPU vendor, for real this time: NVENC entry points are resolved at runtime from the driver's DLL, so punktfunk-host.exe no longer crashes at service start on AMD/Intel-only machines — it just falls through to AMF/QSV/software.
    • Gamepad driver upgrades actually take effect: leftover virtual-pad device nodes from a crashed or stopped host used to keep the old driver bound after an upgrade (pads silently played dead). driver install --gamepad now sweeps them; fresh pads bind the new driver.
    • Installer text and upgrade/uninstall cleanups now reference the web console's real port (:47992, moved in 0.5.0) — old :3000 leftovers from early installs are cleaned up too.

    Web console

    • The sidebar stays pinned at viewport height on long pages (the language switcher no longer scrolls out below the fold).
    Downloads