Cross-platform remote desktop agent.
Screen capture, 5 live-switchable codecs, WASAPI audio, multi-monitor, bidirectional chat and full input control — streamed to any browser over WebSocket. Windows, macOS and Linux.
Streaming pipeline
Video codecs
The viewer sends a set_codec message at any time — the agent switches encoder and resumes without reconnecting. Adaptive bitrate adjusts every 500 ms based on send time (1–100 Mbps range). DLLs loaded dynamically via LoadLibrary — bundled with the MSI.
Platforms
One Go codebase with platform-specific CGo backends for capture, input and audio. Each platform uses the native screen capture API.
Features
Full interactive remote session with audio, chat, multi-monitor and granular input control.
DXGI output enumeration (Windows), XRandr (Linux), CGGetActiveDisplayList (macOS). Viewer shows a mini monitor layout — click to switch live via set_monitor. Mouse coordinates remapped per monitor offset.
WASAPI loopback on Windows captures all system audio. Sent as PCM 16-bit mono LE via frame type 0x06, decoded via browser AudioContext. Mute toggle in viewer toolbar.
Separate helper process spawns a WebView2 window in the target user session. Operator avatar from Obliance profile. "Request Remote Control" with Accept/Deny buttons. i18n FR/EN. Auto-minimizes after 30s without unread messages.
Keyboard via VkKeyScanW — layout-aware (AZERTY, QWERTZ…). Mouse with MOUSEEVENTF_VIRTUALDESK. Clipboard sync bidirectionnel. BlockInput to lock the remote keyboard/mouse during sensitive operations.
Helper spawned with SYSTEM token in the target user session — bypasses UIPI for admin windows. TCP pipe relays frames and audio to the session-0 service → Obliance WS → browser. 10 min inactivity timeout with 30s warning.
Custom Win32 borderless toast — slide-in bottom-right, auto-close. "REC" watermark overlay injected in the target session as a visible indicator during active recording.
Protocol
Binary frames with a 1-byte type prefix. The viewer reads the first byte to route to the correct decoder. Codec switch: viewer sends JSON {"type":"set_codec","codec":"h265"} — agent switches encoder and resumes without reconnecting.
| Byte | Type | Content |
|---|---|---|
| 0x01 | JPEG | Raw JPEG at quality 15 — auto-fallback |
| 0x02 | H.264 | Annex B NAL units (OpenH264 or WMF) |
| 0x03 | VP9 | libvpx VP9 bitstream |
| 0x04 | H.265 / HEVC | x265 HEVC bitstream |
| 0x05 | AV1 | SVT-AV1 bitstream |
| 0x06 | Audio | PCM 16-bit mono LE → browser AudioContext |
Chat & consent
The operator opens a chat before or during the session. The end-user sees a WebView2 popup with the operator's avatar and a "Request Remote Control" prompt.
Tech stack