Files
punktfunk/docs-site/content/docs/clients.md
T
enricobuehler 3b3940dc8c
apple / swift (push) Successful in 54s
android / android (push) Failing after 1m41s
ci / rust (push) Failing after 56s
ci / web (push) Successful in 28s
ci / docs-site (push) Successful in 28s
deb / build-publish (push) Successful in 2m26s
decky / build-publish (push) Successful in 12s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 6s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 30s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 4s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 20s
ci / bench (push) Successful in 4m37s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 8m33s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 8m24s
docker / deploy-docs (push) Successful in 6s
docs(windows-client): correct the WinUI 3 record — reactor IS used (PR #4499)
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>
2026-06-15 23:07:05 +00:00

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 / Debianapt install punktfunk-client from the punktfunk apt registry (see packaging/debian/README.md).
  • Fedora / Bazziterpm-ostree install punktfunk-client from the Gitea RPM registry (see packaging/rpm/README.md).
  • Arch / SteamOS — the punktfunk-client split package from the PKGBUILD (see packaging/arch/README.md).
  • Steam Deck / any Flatpak distro — the io.unom.Punktfunk Flatpak bundle (see packaging/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.