From 0eedfb3c1f29eb348a87c6b684d7d0c820f38afd Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Fri, 26 Jun 2026 11:53:02 +0000 Subject: [PATCH] docs: first-class Linux + Windows positioning + IDD-push differentiator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the "Linux-first" framing across the README and docs site in favor of first-class Linux AND Windows hosts, and surface the Windows IDD-push virtual-display path as a distinct differentiator (punktfunk's own indirect display driver the host pushes frames into โ€” a real virtual display, no physical monitor or dummy plug, even on the secure desktop). Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 11 ++++++++--- docs-site/content/docs/how-it-works.md | 12 ++++++++++-- docs-site/content/docs/index.mdx | 16 +++++++++------- docs-site/content/docs/running-as-a-service.md | 7 ++++--- docs-site/content/docs/status.md | 6 +++--- docs-site/content/docs/windows-host.md | 14 ++++++++------ docs-site/src/routes/index.tsx | 4 ++-- 7 files changed, 44 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index e5ef8f1..ebd890f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # punktfunk -**Low-latency desktop and game streaming, Linux-first.** Run the host on a Linux machine โ€” or a -Windows PC โ€” with an NVIDIA GPU, connect from a Mac, PC, phone, tablet, or TV, and stream your desktop +**Low-latency desktop and game streaming with first-class Linux and Windows hosts.** Run the host on +a Linux machine or a Windows PC, connect from a Mac, PC, phone, tablet, or TV, and stream your desktop or games โ€” each device at its **own native resolution and refresh rate**, over your local network. ๐Ÿ“– **Documentation: [docs.punktfunk.unom.io](https://docs.punktfunk.unom.io)** โ€” start with @@ -19,6 +19,11 @@ protocol, FEC, and crypto, linked into the host and every client over a stable C - **Your device's exact mode.** For each client that connects, the host spins up a virtual display sized to that device โ€” 1080p60 to a laptop, 1440p120 to a desktop, 4K to a TV, all at once. No letterboxing, no scaling, no rearranging your real monitors. +- **A real virtual display on Windows, too.** On Linux the host uses per-compositor virtual outputs; + on Windows you get the same on-the-fly virtual display โ€” at the client's exact mode, no physical + monitor or dummy HDMI plug, even on the secure desktop (UAC / lock screen). It also has **its own + indirect display driver (IDD)** the host pushes finished frames straight into, rather than scraping + a screen โ€” tight, push-based integration that's unusual for a Windows streaming host. - **Low latency, GPU end to end.** Frames go straight from the compositor to the NVENC encoder with zero CPU copies (dmabuf โ†’ CUDA/Vulkan โ†’ NVENC), over a transport tuned for responsiveness rather than throughput. Stable 240 fps at 5120ร—1440; sub-millisecond capture-to-reassembly on a LAN. @@ -124,7 +129,7 @@ clients/ web/ web console (TanStack) over the management API โ€” status ยท devices ยท pairing packaging/ apt ยท rpm / COPR ยท Arch ยท Flatpak ยท Bazzite bootc image docs-site/ public documentation site (Fumadocs) โ€” https://docs.punktfunk.unom.io -docs/ design notes & deep-dive plans +design/ design notes & deep-dive plans include/punktfunk_core.h cbindgen-generated C header (checked in) tools/ latency-probe ยท loss-harness (measurement) ``` diff --git a/docs-site/content/docs/how-it-works.md b/docs-site/content/docs/how-it-works.md index a155e9f..e03882d 100644 --- a/docs-site/content/docs/how-it-works.md +++ b/docs-site/content/docs/how-it-works.md @@ -16,14 +16,22 @@ monitor. When the client disconnects, the virtual display goes away. That's why a 1080p60 laptop and a 1440p120 desktop can stream from the same host **at the same time**, each at its own mode โ€” they each get their own virtual display. -How the virtual display is created depends on your desktop: +How the virtual display is created depends on your host: -| Desktop | How | +| Host | How | |---|---| | **GNOME** (Mutter) | A virtual monitor via the screen-cast API | | **KDE Plasma** (KWin) | A virtual output via KWin's screencast | | **Bazzite / Steam** (gamescope) | A nested gamescope session launched at the client's mode | | **Sway** (wlroots) | A headless output added to the running session | +| **Windows** | A virtual-display driver โ€” including punktfunk's own **indirect display driver** the host pushes frames straight into โ€” a real virtual display, no physical monitor, even on the secure desktop | + +That last one is the distinctive part on Windows: rather than only capturing an existing screen, +punktfunk has **its own indirect display driver (IDD)**, and the host can push finished frames +**straight into the driver**. You get the same on-the-fly virtual display the Linux compositors give +you โ€” at the client's exact mode, with no physical monitor or dummy HDMI dongle, and even on the +secure desktop (UAC / lock screen). That tight, push-based integration is unusual among Windows +streaming hosts. ## From screen to GPU to wire diff --git a/docs-site/content/docs/index.mdx b/docs-site/content/docs/index.mdx index 8968ffe..af4eecb 100644 --- a/docs-site/content/docs/index.mdx +++ b/docs-site/content/docs/index.mdx @@ -1,19 +1,21 @@ --- title: Introduction -description: Low-latency desktop and game streaming from a Linux host to any of your devices. +description: Low-latency desktop and game streaming from a Linux or Windows host to any of your devices. --- import { Cards, Card } from 'fumadocs-ui/components/card' -**punktfunk** streams your Linux desktop or games to your other devices โ€” a laptop, a Mac, a tablet, +**punktfunk** streams your desktop or games to your other devices โ€” a laptop, a Mac, a tablet, a TV โ€” at low latency and at **each device's own resolution and refresh rate**. Run the host on a -Linux machine with an NVIDIA GPU, connect a client, and you're streaming. +Linux machine or a Windows PC, connect a client, and you're streaming. It's built for the things that make streaming feel native: - **Your device's exact mode.** The host spins up a virtual display sized to the client that's connecting โ€” 1080p60 to your laptop, 1440p120 to your desktop, 4K to your TV โ€” at the same time. - No letterboxing, no scaling, no juggling your real monitors. + No letterboxing, no scaling, no juggling your real monitors. On Windows that's punktfunk's own + indirect display driver, frames pushed straight in โ€” so there's no physical monitor or dummy HDMI + plug to deal with, even on the secure desktop. - **Low latency, GPU end to end.** Frames go straight from the compositor to the GPU encoder (NVENC) with zero CPU copies, and over a transport tuned for responsiveness rather than throughput. - **Works with the apps you already have.** punktfunk speaks the GameStream protocol, so any @@ -34,9 +36,9 @@ It's built for the things that make streaming feel native: ## What you need -- A **Linux host** with an **NVIDIA GPU** (for the NVENC hardware encoder) running one of the - [supported setups](/docs/requirements): **Ubuntu** (GNOME or KDE), **Fedora** (KDE), or **Bazzite**. - A native [**Windows host**](/docs/windows-host) (NVIDIA-only) is also available. +- A **host** with a supported GPU โ€” either a **Linux** machine running one of the + [supported setups](/docs/requirements) (**Ubuntu** GNOME or KDE, **Fedora** KDE, or **Bazzite**), or + a **[Windows](/docs/windows-host) PC**. - A **client device** to stream to โ€” there are native apps for **macOS, iOS/iPadOS, tvOS, Linux, Windows, and Android**, plus any device that runs **Moonlight**. - Both on the **same network** (LAN or VPN). punktfunk is designed for a trusted local network. diff --git a/docs-site/content/docs/running-as-a-service.md b/docs-site/content/docs/running-as-a-service.md index cf232ea..85c5cc1 100644 --- a/docs-site/content/docs/running-as-a-service.md +++ b/docs-site/content/docs/running-as-a-service.md @@ -84,9 +84,10 @@ session unit โ€” see [Bazzite](/docs/bazzite). ## Windows -> punktfunk is Linux-first, but a native **Windows host** also ships โ€” a signed installer with an SCM -> service and a bundled virtual-display driver. It's **NVIDIA-only** (NVENC) and newer than the Linux -> host. (Not to be confused with the Windows *client*, which streams *to* a Windows PC.) +> punktfunk has first-class **Linux and Windows** hosts. On Windows it ships as a signed installer +> with an SCM service and a virtual-display driver โ€” including punktfunk's own **indirect display +> driver** the host pushes frames straight into. The Windows host is newer than the Linux host. (Not +> to be confused with the Windows *client*, which streams *to* a Windows PC.) On Windows the host runs as a `LocalSystem` service that launches into the interactive session, so it captures the secure desktop (UAC / lock screen) and survives reboots with nobody logged in โ€” the same diff --git a/docs-site/content/docs/status.md b/docs-site/content/docs/status.md index 510b999..7b80ed2 100644 --- a/docs-site/content/docs/status.md +++ b/docs-site/content/docs/status.md @@ -23,9 +23,9 @@ A high-level view of where punktfunk stands. The ordered plan of work is on the ## What works today -punktfunk is a low-latency desktop and game streaming **host** โ€” Linux-first (Linux + NVIDIA, NVENC), -with a newer **NVIDIA-only Windows host** too โ€” and native **clients** on macOS, iOS/iPadOS/tvOS, -Linux, Windows, and Android. +punktfunk is a low-latency desktop and game streaming **host** with first-class **Linux and Windows** +support โ€” and native **clients** on macOS, iOS/iPadOS/tvOS, Linux, Windows, and Android. (The Windows +host is newer than the Linux host.) - **Two protocols.** The host speaks the **GameStream** protocol, so any **Moonlight** client works out of the box, plus its own lower-latency **`punktfunk/1`** protocol diff --git a/docs-site/content/docs/windows-host.md b/docs-site/content/docs/windows-host.md index 5795201..e2b0768 100644 --- a/docs-site/content/docs/windows-host.md +++ b/docs-site/content/docs/windows-host.md @@ -1,15 +1,17 @@ --- title: "Windows Host" -description: "Run the punktfunk streaming host on a Windows PC with an NVIDIA GPU." +description: "Run the punktfunk streaming host on a Windows PC โ€” a first-class, virtual-display host." --- -**Status: implemented and shipping โ€” NVIDIA-only, x64-only.** punktfunk is Linux-first, but it also -runs as a native **Windows host**: a signed installer registers a `LocalSystem` service that streams +**Status: implemented and shipping โ€” x64-only.** Alongside the Linux host, punktfunk runs as a +first-class native **Windows host**: a signed installer registers a `LocalSystem` service that streams your Windows desktop or games to any punktfunk or Moonlight client, at the client's exact resolution -via a virtual display โ€” including **HDR10** (10-bit BT.2020 PQ) when your Windows desktop is in HDR -mode. It's newer and less battle-tested than the Linux host, and it is built specifically around -NVIDIA hardware. (The Linux host is 8-bit only โ€” HDR there is blocked upstream.) +via a **virtual display** โ€” including **HDR10** (10-bit BT.2020 PQ) when your Windows desktop is in HDR +mode. punktfunk has its own **indirect display driver (IDD)** that the host pushes finished frames +straight into, so you get a real on-the-fly virtual display with no physical monitor or dummy HDMI +plug โ€” even on the secure desktop (UAC / lock screen). The Windows host is newer and less +battle-tested than the Linux host. (The Linux host is 8-bit only โ€” HDR there is blocked upstream.) > This page is about the Windows **host** (streaming *from* a Windows PC). To stream *to* a Windows > PC, see the [Windows client](/docs/clients#windows-desktop-client). diff --git a/docs-site/src/routes/index.tsx b/docs-site/src/routes/index.tsx index d0b8f93..cb35351 100644 --- a/docs-site/src/routes/index.tsx +++ b/docs-site/src/routes/index.tsx @@ -13,8 +13,8 @@ function Home() {

- Linux-first, low-latency desktop and game streaming โ€” a shared Rust protocol - core with native clients per platform. + Low-latency desktop and game streaming with first-class Linux and Windows + hosts โ€” a shared Rust protocol core with native clients on every platform.