← Home

2026 · personal · private

RemoteDesk

Control a Windows PC from a phone over WebRTC

Role
Design and implementation
Period
2026.07 – 2026.08
Status
M3 complete
Stack
C#, .NET 9, WebRTC, H.264, Kotlin, Node.js
Links

Why

I wanted to drive the PC in my room from the sofa with a phone. Existing remote desktops come with accounts, relay servers and heavy installs, so I built the minimum needed between my PC and my phone.

What I built

  • Host: A .NET 9 library (RemoteDesk.Core), a WPF tray app, and a console CLI with diagnostic probes.
  • Signaling: A Node.js WebSocket relay that also serves the browser viewer on the same port.
  • Viewers: A Kotlin Android app and a browser viewer (the reference implementation).
  • Input: Direct touch (click where you press) and trackpad (relative movement). Tap is left click, long-press is right click, two fingers scroll, drag moves with the button held. Ctrl, Alt, Shift and Win stay latched until the next input.

Decisions

  • Hardware H.264 + WebRTC: GPU encoding instead of software to keep latency down; video over the WebRTC media channel, input over the data channel.
  • One pipeline: Capture and encoding run once regardless of viewers, start when the first viewer connects and stop when the last leaves. An idle host uses no GPU.
  • Settings live in %APPDATA%\RemoteDesk\config.json; command-line flags override them. Closing the window leaves the host in the tray.

Measured

Local network, 2560×1440 source: 1920×1080 at 30fps, about 2.1 Mbps, zero packet loss, RTT 15–31 ms.

Status

M3: open a browser, enter a host id, see the PC and control it by touch. The browser viewer is the reference implementation; the Android viewer speaks the same protocol.