Stream your Windows PC to your other screens.
AetherStream captures the Windows desktop with DXGI Desktop Duplication, encodes it to H.264 with the GPU's Media Foundation hardware encoder (software fallback included) and sends it over UDP to Windows and Android clients, with keyboard, mouse and controller input sent back to the host. This is an alpha. Below is exactly what works today and what does not.
- No encryption or authentication in v0.1.0. While the host is running, any device on the same network can view the stream and send keyboard and mouse input to the host PC. Use it only on a network you fully trust, and quit the host when you are not streaming. Encrypted, PIN-paired protocol v2 is in progress.
- Firewall rule. The v0.1.0 installer allows inbound UDP 47998–47999 on all network profiles, and its uninstaller does not remove the rule. To remove it, run in an administrator terminal:
netsh advfirewall firewall delete rule name="zerodoc AetherStream UDP" - Local PIN exposure. While the v0.1.0 desktop app is running, a local endpoint may expose the host PIN to web pages opened on the same PC. A fix is in progress.
- Unsigned builds. The Windows installer is not code-signed (Windows SmartScreen will warn) and the Android APK is signed with a development key. Download only from the official links on this page.
What works today
Based on the internal code audit of 2026-11-03. "In progress" means the work is underway, not done. This table changes only when a change has been run and verified.
| AREA | STATUS | DETAIL |
|---|---|---|
| Screen capture | Implemented | DXGI Desktop Duplication, frames stay on the GPU. Mouse cursor is not yet drawn into the stream. |
| Video encoding | Partial | H.264 through the Media Foundation hardware encoder, OpenH264 software fallback. Compatibility per GPU vendor is not yet verified. A direct NVIDIA encoder path is under evaluation. |
| Encrypted transport (protocol v2) | In progress | PIN pairing with SPAKE2, ChaCha20-Poly1305 on every packet, one UDP port (47998). v0.1.0 sends everything unencrypted. |
| Windows client | Partial | H.264 decoding works in a test harness (1080p frames). Colour conversion runs on the CPU; moving decoding off the UI thread is in progress. End-to-end streaming has not been re-verified. |
| Audio | Partial | Host captures system audio (WASAPI loopback). Playback in the Windows client is not implemented. |
| Keyboard and mouse | In progress | Host injects input with Win32 SendInput. The input wire format is being unified across clients (key up/down and relative mouse movement are wrong in v0.1.0). |
| Game controller | Partial | Virtual Xbox 360 controller on the host via the ViGEmBus driver. Button mapping differs between clients until the shared core lands. |
| Packet-loss recovery | Not implemented | Parity (FEC) code exists but is not used by the live stream. Roadmap M5. |
| Connecting over the internet | In progress | 8-character room codes (XXXX-XXXX) resolved through a rendezvous service, with STUN. v0.1.0 works on a local network only. |
| Android client | Partial | MediaCodec hardware decoding path. Not yet verified on devices in the audit. |
| iOS / iPadOS client | Roadmap | Decoder and renderer code exists, but there is no buildable app yet. Roadmap M8. |
| Latency measurement | Roadmap | No end-to-end latency has been measured. A glass-to-glass measurement harness is roadmap M1. |
Details: Architecture · Claims registry
How it works
No per-stage timings are shown here on purpose: they will be published after the baseline measurement (roadmap M1), with hardware, resolution and frame rate stated.
- 01 HOSTCaptureDXGI Desktop Duplication
- 02 HOSTEncodeH.264, Media Foundation hardware encoder or OpenH264
- 03 HOSTEncryptChaCha20-Poly1305 (v2, in progress)
- 04 NETWORKSendUDP, one port: 47998
- 05 CLIENTDecodeMedia Foundation (Windows), MediaCodec (Android)
- 06 CLIENTDisplay + inputInput is sent back to the host
Security design
Remote input is equivalent to sitting at the host PC, so protocol v2 authenticates and encrypts everything. All three points below are in progress and do not apply to v0.1.0.
6-digit PIN, once
The host shows a PIN. The client proves it knows the PIN with SPAKE2, so an eavesdropper cannot test PIN guesses offline. Repeated failures lock the sender out.
Every packet encrypted
Video, audio, input and clipboard travel inside a ChaCha20-Poly1305 envelope with per-direction keys and replay protection. Unencrypted packets are dropped.
One port, local subnet
A single UDP port (47998). The new installer limits the firewall rule to private networks and the local subnet and removes it on uninstall.
Specification: Protocol v2
Download
Binaries are hosted on GitHub Releases. Read the v0.1.0 warning at the top of this page before installing.
Windows desktop app
- Hosts this PC or views another host
- Installer is not code-signed
Android client
- APK for sideloading, signed with a development key
- Not yet verified on devices
Not available
- No buildable app yet (roadmap M8)
- No TestFlight build exists
All releases and notes: github.com/pqowp90/AetherStream-Release/releases.
SHA-256 as reported by GitHub for the v0.1.0 assets — installer: 2d028a0fae3c27a97dc9e21d42961d5f9ca967545157f4119d28e3b360d02354,
APK: d82ad289c5200f4ac7faf0f4a3f8af9cf413455a829d34f007ffc32d27a95851.
Verify with Get-FileHash -Algorithm SHA256 <file>.