Virtual display streaming system for Windows. Create virtual monitors, capture their output, and stream over LAN with hardware-accelerated H.265 encoding.
Before running Juxtens, you need to install the following dependencies:
- Microsoft Visual C++ Redistributable (latest) - vc_redist.x64.exe
- .NET 9 Windows Desktop Runtime - windowsdesktop-runtime-9.0.13-win-x64.exe
Download the following ZIP files from the Releases page:
- virtual-display-driver.zip - VDD driver files
- gstreamer-hevc-265.zip - GStreamer runtime with H.265 support
Extract both ZIP files into the same folder where you'll place the application executables.
After extraction, your application directory should contain:
Juxtens.Daemon.exe
Juxtens.Client.exe
vdd/ (from virtual-display-driver.zip)
gstreamer/ (from gstreamer-hevc-265.zip)
The VDD driver will be installed when you first run the Daemon and click "Install VDD Driver".
Server component - Manages virtual displays and streams content to clients.
- Requires Administrator privileges (virtual display driver management)
- Creates/destroys virtual displays on demand
- Captures display output via GStreamer (NVENC H.265)
- Streams over UDP to connected clients
- WebSocket control interface (0.0.0.0:5021)
- WPF UI with connection status and logs
Usage: Run as Administrator on the machine where you want to create virtual displays.
Client component - Connects to daemon and displays streamed content.
- No elevation required
- Connect to daemon by IP address
- Request streams, display in separate windows
- GStreamer receiver (hardware-accelerated decode)
- WPF UI with connection controls
Usage: Run on any machine on the same network, connect to daemon IP.
Legacy WinForms testing UI with direct access to all components. Superseded by Daemon/Client split in production but useful for development/debugging.
- Requires Administrator privileges
- Direct device management controls
- Manual stream testing
| Library | Purpose |
|---|---|
| Juxtens.Logger | File-based logging abstraction |
| Juxtens.DeviceManager | Windows device management via cfgmgr32/SetupAPI |
| Juxtens.VDDControl | Virtual Display Driver configuration |
| Juxtens.GStreamer | GStreamer process wrapper (sender/receiver pipelines) |
- .NET 9.0 (C# with nullable reference types)
- WPF (Daemon, Client) / WinForms (Server)
- GStreamer 1.28.0 (NVENC H.265 encoding/decoding)
- WebSockets (Fleck library for control channel)
- Virtual Display Driver (third-party VDD, XML configuration)
- Windows APIs (cfgmgr32.dll, SetupAPI for device management)
graph LR
Client["Juxtens.Client<br/>- WS Client<br/>- GStreamer Receiver<br/>- d3d11videosink"]
Daemon["Juxtens.Daemon (Admin)<br/>- WS Server<br/>- Orchestrator<br/>- VDD Control<br/>- GStreamer Sender<br/>- d3d11screencapture"]
VDD["Virtual Display<br/>Driver (VDD)"]
Client <-->|"WebSocket (5021)<br/>Control Channel"| Daemon
Daemon -->|"StreamStarted(port)"| Client
Daemon -->|"UDP Stream (5000-5019)<br/>H.265 Video"| Client
Daemon -->|"Manage Devices"| VDD
- Client connects to Daemon via WebSocket
- User requests stream (Add Stream button)
- Daemon creates virtual display, starts GStreamer sender
- Daemon responds with port and monitor info
- Client starts GStreamer receiver on specified port
- Stream displayed in separate window on Client
- User closes window → Client notifies Daemon → cleanup
- Windows 10/11 (x64)
- Administrator privileges (Daemon/Server only)
- GStreamer 1.28.0 with NVENC/NVDEC support
- Virtual Display Driver installed and configured
- NVIDIA GPU (for hardware-accelerated encoding/decoding)
dotnet buildBuild output:
Juxtens.Daemon/bin/Debug/net9.0-windows/Juxtens.Daemon.exe(Run as Admin)Juxtens.Client/bin/Debug/net9.0-windows/Juxtens.Client.exeJuxtens.Server/bin/Debug/net9.0-windows/Juxtens.Server.exe(Run as Admin)
© 2026 DeeJayy. License: MIT.
