The winit-commit docs claimed "Reactor rejected, no SwapChainPanel hatch" — that was wrong. windows-rs PR #4499 added the SwapChainPanel widget; the client now uses WinUI 3 via windows-reactor. Update CLAUDE.md M4, the bootstrap-doc status banner (reactor integration: pinned git dep, CARGO_WORKSPACE_DIR, App-SDK build.rs, LL-hook stream input), and the docs-site clients page (WinUI 3, launch-and-pick-a-host). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.6 KiB
title, description
| title | description |
|---|---|
| Clients | The ways to connect to a punktfunk host — the Apple app, Moonlight, or the Linux client. |
A punktfunk host accepts clients over its own punktfunk/1 protocol (the Apple and Linux apps) and
over GameStream (Moonlight). Pick whichever fits the device you're streaming to.
Apple app (Mac, iPhone, iPad, Apple TV)
The native app for Apple devices speaks punktfunk's own punktfunk/1
protocol — the lowest-latency, most resilient path, with the full feature set:
- Automatic host discovery — hosts on your network appear under On this network; no IP typing.
- PIN pairing built in, and pinned reconnects after that.
- Controllers, including DualSense — rumble, adaptive triggers, lightbar, motion, and touchpad.
- A live stats overlay (resolution, fps, bitrate, latency) and a built-in network speed test to pick a bitrate for your link.
Open the app, pick your host, pair once, and stream. It builds from the
clients/apple directory in the repo (Swift / VideoToolbox / Metal).
Moonlight (anything else)
punktfunk also speaks the GameStream protocol, so any Moonlight client — Windows, Android, Steam Deck, a browser, an old phone — connects with no punktfunk-specific software. See Connect with Moonlight.
This is the broadest-compatibility option and great for couch gaming. It doesn't use the native protocol's FEC/encryption extensions, but for a healthy LAN that rarely matters.
Linux desktop client (GTK4)
punktfunk-client is the native graphical Linux client — a GTK4 / libadwaita app that speaks
punktfunk/1 directly, with hardware decode (VAAPI → dmabuf on Intel/AMD, software fallback),
PipeWire audio, and SDL3 controllers (rumble, lightbar, DualSense touchpad/motion). Like the Apple
app it discovers hosts on your network automatically, does PIN pairing, and pins reconnects.
It ships as a real package, not just a source build:
- Ubuntu / Debian —
apt install punktfunk-clientfrom the punktfunk apt registry (seepackaging/debian/README.md). - Fedora / Bazzite —
rpm-ostree install punktfunk-clientfrom the Gitea RPM registry (seepackaging/rpm/README.md). - Arch / SteamOS — the
punktfunk-clientsplit package from thePKGBUILD(seepackaging/arch/README.md). - Steam Deck / any Flatpak distro — the
io.unom.PunktfunkFlatpak bundle (seepackaging/flatpak/README.md); this is what the Decky plugin launches.
Launch it, pick your host from the list, and stream. For scripting you can skip the host list and connect straight away:
punktfunk-client --connect <host>:9777 # skip the picker, start a session immediately
Windows desktop client (in development)
punktfunk-client for Windows (crates/punktfunk-client-windows) is the native graphical client
for Windows — pure Rust, the same punktfunk/1 core as the Apple and Linux apps, with a WinUI 3
UI (host list, settings, PIN pairing) and the video on a SwapChainPanel, plus WASAPI audio, FFmpeg
decode, SDL3 controllers, network discovery, and PIN pairing. Launch it and pick a host from the
list, just like the Apple and Linux apps. It builds on x86_64-pc-windows-msvc; hardware (D3D11VA)
decode, 10-bit/HDR present, and packaging are in progress, so it is not yet shipped. A headless CLI
path exists for scripting/measurement:
punktfunk-client # open the WinUI 3 window (host list / settings)
punktfunk-client --discover # list hosts on the network
punktfunk-client --headless --connect <host>:9777 # no window: connect, count frames, print stats
Until it ships, Moonlight remains the recommended way to stream to Windows (see below).
Linux reference client (headless)
punktfunk-client-rs (in the repo) is a command-line client for the native protocol, used for
testing, development, and latency measurement — not an everyday client. It connects, streams to a
file, runs the speed test, and can discover hosts:
punktfunk-client-rs --discover # list hosts on the network
punktfunk-client-rs --connect <host>:9777 --pin <fp> # connect to one
Which should I use?
| You're streaming to… | Use |
|---|---|
| A Mac, iPhone, iPad, or Apple TV | The Apple app |
| A Linux desktop or laptop, or a Steam Deck | punktfunk-client (GTK4) |
| Windows, Android, a browser, a TV | Moonlight |
| Automated tests / latency measurement | punktfunk-client-rs (headless) |
Whichever you choose, the first connection needs a one-time pairing.