Files

3.4 KiB

Windows support

Current milestone

PixelPass on Windows is a viewer, not a screen-share host. It preserves the same viewer-side architecture used on Linux:

  1. parse an iroh endpoint ticket;
  2. connect to the Linux host over the existing pixelpass/0 ALPN;
  3. expose the tunneled MPEG-TS stream on a random loopback HTTP port;
  4. emit {"event":"connected","url":"http://127.0.0.1:..."} when --output json is enabled;
  5. let PeerSpeak launch VLC/mpv, or launch one from PixelPass's interactive viewer prompt.

No codec, container, ticket, ALPN, or JSON protocol fork was introduced for Windows.

Support matrix

Capability Linux Windows 10
View a share Yes Yes
Headless --output json viewer Yes Yes
Interactive viewer/player launch Yes Yes
Host Wayland/X11 capture Yes No
Host desktop/system audio PipeWire/Pulse No
PeerSpeak voice exclusion Yes No
PixelPass GUI Yes (feature build) No

Unsupported host operations fail with an explicit viewer-only error. On Windows, --capabilities reports both host-audio capability flags as false, so parent integrations cannot mistake this milestone for full hosting parity.

Build

From Linux with Rust 1.95+ and MinGW-w64 installed:

rustup target add x86_64-pc-windows-gnu
cargo build --release --target x86_64-pc-windows-gnu

The artifact is:

target/x86_64-pc-windows-gnu/release/pixelpass.exe

The Windows target does not compile or link PipeWire, PulseAudio, Wayland, X11, or the Linux GUI stack. Keep the build headless; --gui is intentionally rejected on Windows.

Validation gates

Before bundling a Windows binary with PeerSpeak:

cargo fmt -- --check
cargo clippy --target x86_64-pc-windows-gnu -- -D warnings
cargo test -- --test-threads=1
cargo build --release --target x86_64-pc-windows-gnu

Then on an actual Windows 10 build 19045 VM:

  1. verify the transferred SHA-256;
  2. run pixelpass.exe --version and pixelpass.exe --capabilities;
  3. run pixelpass.exe --doctor with VLC or mpv installed;
  4. start a real Linux host, pass its fresh ticket to the Windows executable with --output json, and verify the connected event;
  5. open the emitted loopback URL in the player and confirm moving video and audio;
  6. stop the player/viewer and confirm both sides terminate cleanly.

Verified baseline

On 2026-08-22 this gate passed on Windows 10 Enterprise Evaluation build 19045 against a Wayland Linux host using software x264 at the Low preset. The Windows viewer emitted a loopback URL, VLC 3.0.23 rendered the live desktop, closing VLC terminated the viewer, and the host emitted viewer_left followed by capture: stopped. The final release artifact was 13,165,056 bytes with SHA-256:

3eabd9f0dcd8565136a5c87a79470eceedd426cea5708904d7492a6fa37b3c49

The run deliberately declined Windows Defender's one-off public-network allow prompt; relay viewing succeeded without it. A packaged application should own an explicit, idempotent firewall rule for the final installed path instead of depending on that prompt.

Next Windows phases

Windows hosting should be added behind a native capture boundary rather than by weakening the Linux implementation:

  1. desktop/window video capture and H.264 encode;
  2. WASAPI system-audio capture;
  3. PeerSpeak-owned voice/AEC exclusion with a fail-closed contract;
  4. dependency packaging, firewall rules, and installer upgrade coverage.