enricobuehler 068033a140
windows-host / pr-lint (push) Skipped
macos-host / check (push) Successful in 26s
android / gate (push) Successful in 20s
ci / changes (push) Successful in 1m12s
ci / bun-nix (push) Successful in 2m3s
ci / docs-drift (push) Successful in 1m8s
windows-host / package (arm64, a7a16b876a305fd1029c66dbd27007b4f6112ae896532f675878731a21e50cfd, bun-windows-aarch64.zip, , --no-default-features --features gamestream, -C target-feature=+crt-static -C link-arg=/INCLUDE:lrintf -C link-arg=/INCLUDE:floor, _arm64, aarc… (push) Successful in 13m6s
deb / build-publish (push) Successful in 4m13s
deb / build-publish-gamescope (push) Successful in 34s
deb / build-publish-host (push) Successful in 5m18s
deb / build-publish-client-arm64 (push) Successful in 3m44s
secret-scan / gitleaks (push) Successful in 26s
arch / build-publish (push) Successful in 13m33s
ci / rust (push) Failing after 6m4s
ci / rust-arm64 (push) Successful in 4m45s
windows-host / package (x64, 78c221c2376f79731ccf4e4af0b3bb46d81fefa3296c5abee09ad8a1b21e68c6, bun-windows-x64-baseline.zip, --features nvenc,qsv, --features nvenc,qsv, -C target-feature=+crt-static, , x86_64-pc-windows-msvc, C:\t) (push) Successful in 17m12s
windows-host / winget-source (push) Skipped
ci / web (push) Successful in 1m23s
ci / docs-site (push) Successful in 1m20s
ci / sdk-plugin-kit (push) Successful in 1m4s
ci / decky-typecheck (push) Successful in 16s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 19m42s
windows-host / canary-manifest (push) Successful in 31s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 19m24s
deb / smoke-install (push) Successful in 4m21s
android / android (push) Successful in 21m7s
Merge pull request 'fix(host/windows): walk a granted folder once, not on every start' (#1994) from fix/windows-grant-walks into main
2026-10-17 03:09:45 +00:00
2026-10-07 18:59:34 +02:00
2026-10-04 22:36:06 +00:00
2026-10-15 23:50:25 +00:00
2026-10-15 23:50:25 +00:00
2026-10-15 23:50:25 +00:00
2026-10-15 23:50:25 +00:00
2026-10-14 19:07:50 +02:00

Punktfunk

Low-latency desktop and game streaming with first-class Linux and Windows hosts.

Run the host on a Linux or Windows PC and stream your desktop or games to a Mac, PC, phone, tablet or TV. Each client gets its own virtual display at its own native resolution and refresh rate, so a laptop at 1080p60 and a TV at 4K can stream from one box at once without rearranging your real monitors.

📖 docs.punktfunk.unom.io — How it works · Quick start · Support matrix (what works where) · Roadmap

💬 Discord · r/Punktfunk

🔒 Vulnerabilities go privately to security@punktfunk.com, not to an issue — SECURITY.md.

What makes it different

  • Displays you configure, not just create. Keep a game's display alive across disconnects so a reconnect drops straight back in; make the stream your sole desktop or extend alongside your monitors; turn several devices into monitors of one desktop. Presets in the console — Virtual displays.
  • A real virtual display on Windows, too. Linux uses per-compositor virtual outputs; Windows gets the same on-the-fly display from Punktfunk's own signed IddCx driver (pf-vdisplay) — no dummy HDMI plug, no Desktop Duplication or WGC screen-scraping, and it survives the secure desktop (UAC, lock screen).
  • GPU end to end. Frames reach the encoder with no CPU copies (dmabuf → CUDA/Vulkan → NVENC on Linux; NVENC/AMF/QSV/Media Foundation on Windows). On a wired link, PyroWave — an intra-only wavelet codec run as Vulkan compute — spends bandwidth to cut codec latency by an order of magnitude, and every frame is a keyframe, so loss costs one frame instead of a recovery round-trip.
  • Two protocols, one process. punktfunk/1 is the native plane: QUIC control, a GF(2¹⁶) Leopard-RS FEC + AES-GCM data plane that breaks the ~1 Gbps FEC wall, mid-stream mode renegotiation. serve --gamestream additionally serves any Moonlight client — opt-in, trusted-LAN only, because GameStream has inherent on-path weaknesses.
  • A library that fills itself. Steam and non-Steam titles appear as a grid on every client, and plugins add their own sources — ROM Manager, Playnite, Ubisoft Connect, Battle.net, itch.io, Flatpak and more.
  • Secure by default. One-time SPAKE2 PIN pairing, then pinned-identity reconnects. No accounts, no cloud. Hosts advertise over mDNS, so clients find them without typing an IP.

Install the host

One command on Linux (preview) — it detects your distro, adds the repo, installs the host and console, opens the firewall, and tells you how to pair:

curl -fsSL https://punktfunk.unom.io/install.sh | sh

On Windows 11 22H2+ it's a signed installer (host + virtual-display and gamepad drivers):

winget source add -n punktfunk https://winget.punktfunk.unom.io -t Microsoft.Rest
winget install unom.PunktfunkHost

Prefer to add the repo yourself? Every platform has a one-page guide — apt, dnf, pacman, the Bazzite sysext, NixOS, SteamOS on-device build, and the Windows setup.exe: /docs/install. Updating, rolling back and uninstalling are /docs/updating and /docs/uninstall.

Connect a client

Streaming to… Use
Mac The Apple app — notarized DMG, or TestFlight
iPhone, iPad, Apple TV The Apple app on the App Store
Linux desktop / laptop punktfunk-client — Flatpak (any distro), or apt / rpm / pacman
Steam Deck The Decky plugin in Gaming Mode; the Flatpak in Desktop Mode
Android phone or TV The Android app on Google Play
Windows Native punktfunk-client — signed installer (portable zip and MSIX too)
LG webOS TV pf-webos, a community client in its own repo
Scripts and launchers punktfunk, the headless CLI in the Linux client packages
Anything else Moonlight over GameStream

Every client discovers hosts automatically and does a one-time PIN pairing. Per-device steps: /docs/install-client.

Develop

Building, testing and contributing are in the developer docs: Architecture (crate map and design invariants) · Build from source · Testing · Contributing.

License

Licensed under either of

at your option — SPDX-License-Identifier: MIT OR Apache-2.0.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. See CONTRIBUTING.md.

Third-party components

Punktfunk's own source is MIT/Apache-2.0. Shipped binaries additionally link third-party components under their own (permissive) licenses — see THIRD-PARTY-NOTICES.txt (regenerate with scripts/gen-third-party-notices.sh). Nothing links FFmpeg any more: host encode went native in 2026-09, and the clients decode natively.

Trademarks

Punktfunk is an independent project and is not affiliated with, endorsed by, or sponsored by NVIDIA, Microsoft, Sony, Valve, or the Moonlight project. "GameStream", "Moonlight", "Xbox", "DualSense", "DualShock", and "PlayStation" are trademarks of their respective owners and are used here only to describe interoperability.

S
Description
next gen game streaming - built using rust, back compatible with game stream clients, and supporting virtual displays for kde/kwin, gnome and gamescope.
Readme
182 MiB
1 Stars 17 Watchers 8 Forks
v0.44.1
Latest
2026-10-15 23:59:26 +00:00
Languages
Rust 70.8%
Swift 9.7%
TypeScript 7.4%
Kotlin 5.5%
Shell 2.3%
Other 4.1%