Punktfunk vs Sunshine + Moonlight: an honest comparison
Sunshine + Moonlight is the beloved open-source self-hosted streaming stack. An honest look at where Punktfunk actually differs — its own protocol, Linux-native virtual displays, sessions that survive disconnects, its own Windows display driver — and where Sunshine still wins.
Sunshine (the host) and Moonlight (the client) are the de-facto open-source self-hosted game streaming stack: mature, free, and genuinely loved. So why build Punktfunk at all? This is an honest, specific comparison for anyone weighing a switch — no bashing, because that stack is excellent.
What Sunshine + Moonlight get right
- A huge, active community and years of battle-testing.
- Moonlight clients on nearly everything — phones, TVs, consoles, browsers, old devices.
- A solid, well-understood protocol (NVIDIA's GameStream, reverse-engineered).
- Free, open source, and — once set up — it just works for most people.
If your setup already runs great on Sunshine and Moonlight, there's no urgency to change anything.
Where Punktfunk is different
Its own protocol, not just GameStream
Everything in the Sunshine + Moonlight world runs over GameStream — NVIDIA's streaming protocol, reverse-engineered and kept alive by the community after NVIDIA walked away. It works, but its transport sets the ceiling: the forward error correction tops out around 1 Gbps of usable video, and the wire format can't express things like changing the stream's mode mid-session. Punktfunk speaks GameStream too, so stock Moonlight clients connect on day one — but its native clients use punktfunk/1, a protocol designed from scratch: a QUIC control plane, an AES-GCM-encrypted data plane with GF(2¹⁶) forward error correction that clears that 1 Gbps wall, resolution and refresh changes mid-stream without a reconnect, and built-in bandwidth probing so the client picks a bitrate based on your actual link.
Virtual displays on Linux, without the hacks
Sunshine has no first-class virtual display on Linux, so a headless or resolution-mismatched host means dummy plugs, EDID overrides, and hand-written modelines. Punktfunk creates a real virtual display on demand, per compositor (KWin, GNOME, gamescope, Sway), at the client's exact resolution and refresh — and on a Linux host, several clients can stream at once, each on its own display at its own mode. It also installs cleanly on atomic distros like Bazzite, as a systemd extension with no layering and no reboot. See virtual displays and headless streaming on Linux.
Displays with a policy: your session survives a disconnect
When a Moonlight client drops, Sunshine keeps the launched app alive — but the stream itself is renegotiated from scratch when you come back, and display changes are unwound in between. Punktfunk makes what happens after a disconnect a policy you set: keep the virtual display (and, on a gamescope host, the game itself) alive for a grace window — or forever, for a dedicated couch box — so reconnecting drops you straight back in, with no renegotiation and no desktop reshuffle. One-click presets cover the real setups (gaming rig, shared desktop, hot-desk, workstation), several devices can be arranged as monitors of one desktop, and each client's display scaling sticks across reconnects on Windows, KDE, and GNOME. It's all configured from the web console.
On Windows: its own display driver, not screen scraping
On Windows, Sunshine captures the desktop through the OS's capture APIs — a mature approach, but always downstream of whatever the OS decides to show. Punktfunk ships its own signed, all-Rust indirect display driver and pushes finished frames straight into it. That means a true virtual display at your client's exact mode with no dummy plug, capture that keeps working on the secure desktop (UAC prompts, the lock screen), and one less layer between the game and the encoder. The host encodes in hardware on NVIDIA, AMD, and Intel — with a software fallback when there's no GPU — and bundles its own virtual-gamepad drivers instead of depending on the discontinued ViGEmBus. The full story is in IDD push vs Desktop Duplication and WGC.
HDR
Let's be fair here: HDR over Sunshine + Moonlight works, and on a Windows host with an HDR-capable display it looks the way it should. The real differences are at the edges. Because Punktfunk's virtual display is its own driver, a headless box can advertise HDR without an HDR-capable dummy plug, and each client's HDR capability is negotiated up front. For Vulkan games, Punktfunk carries a small driver layer written for the cases the GPU drivers didn't cover. Linux-host HDR is still in progress — for us and for everyone else. See HDR that actually looks like HDR.
Native clients vs one cross-platform client
Moonlight is a single cross-platform client — great reach, but a lowest-common-denominator UX. Punktfunk ships a native client per platform: iPhone/iPad/Apple TV/macOS (Swift + VideoToolbox), Linux (GTK4), Windows (WinUI 3), Android, and the Steam Deck via a Decky plugin — each integrating native controllers, HDR, and suspend/resume.
Codecs and resolution
Both stacks do H.264, HEVC, and AV1 — there's no codec edge here. Where Punktfunk pulls ahead is the display itself: validated, arbitrary resolutions up to 5120×1440 at 240 fps, built per session to match your client exactly — see streaming ultrawide and 32:9.
Security and pairing
Sunshine pairs over the legacy GameStream ceremony. Punktfunk's native protocol uses SPAKE2 PIN pairing, so the PIN itself never crosses the wire; devices then reconnect on a pinned cryptographic identity, and every stream is encrypted with AES-GCM. Just as important is the default: a bare Punktfunk host runs only the native protocol and its management API — the GameStream-compatible plane, whose legacy weaknesses are a property of the protocol on any host, is something you enable explicitly for a trusted LAN. Neither stack needs an account or a cloud; Punktfunk just makes the safer posture the default.
Numbers you can check
Every Punktfunk client ships a stats overlay — three tiers, from a compact readout to full diagnostics — using the same vocabulary on every platform, and the web console graphs host performance live and streams host logs. Cross-machine latency is corrected for the clock skew between host and client, so a figure like ~1.3 ms capture-to-received over a LAN is a real measurement, not marketing. Whatever we claim, you can watch on your own hardware.
Nice extras
A few quality-of-life touches: your installed Steam games are detected straight from local files — no API key — with artwork and ready to launch; a built-in speed test bursts filler over the data plane so the client can pick a sensible bitrate; you can pass your microphone through to a virtual mic on the host for voice chat; and every client carries a full gamepad-driven console UI — host list, pairing, settings, an on-screen keyboard — built for the couch.
Where Sunshine + Moonlight still win
- Reach. Moonlight runs on nearly everything ever made — smart TVs, consoles, browsers, single-board computers. Punktfunk's native clients cover eight platforms; for the rest, a Punktfunk host still accepts Moonlight clients.
- Maturity. Years of hardening across millions of setups. Edge cases you haven't hit yet, someone has already reported and fixed.
- Streaming over the internet. Sunshine can open the way itself via UPnP; reaching a Punktfunk host across the internet means manual port forwarding today.
- Surround sound. Sunshine does 5.1 and 7.1; Punktfunk is clean, in-sync stereo today, with surround on the roadmap.
- Windows desktop polish. Sunshine has a system tray and an in-app config editor; Punktfunk is managed through its web console instead.
Who should try Punktfunk
If you stream from a Linux box and are tired of dummy-plug hacks; if you run a couch PC and want your game exactly where you left it when you reconnect; if you want HDR from a headless Windows host; if you want a truly native client on the Apple TV or Steam Deck; or if you want a transport with headroom past GameStream's ceiling — Punktfunk is built for exactly those cases. And because a Punktfunk host speaks GameStream, trying it doesn't mean replacing anything: point the Moonlight clients you already have at it and switch at your own pace. Otherwise, Sunshine + Moonlight remain a great default — and we mean that.