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.