A web-based RDP client built with Go WebAssembly and grdp

· web devtools · Source ↗

TLDR

  • grdpwasm runs a Go WASM binary in the browser and routes RDP through a WebSocket-to-TCP proxy, requiring no plugins.

Key Takeaways

  • Architecture: browser runs static/main.wasm, connects via WebSocket to a Go proxy (proxy/proxy), which opens a raw TCP connection to port 3389.
  • The proxy also serves static files; a single make all produces the WASM binary, wasm_exec.js, and the proxy binary.
  • grdp is forked locally under ./grdp/ with a Dialer field added to RdpClient, letting the WASM build inject a WebSocket-backed net.Conn instead of TCP.
  • Audio works via RDPSND streamed through the Web Audio API at PCM 44100 Hz stereo 16-bit; keyboard and mouse input are fully forwarded via RDP scan codes.
  • Security is explicitly unfinished: the proxy accepts any origin, credentials travel over plain WebSocket, and TLS termination via nginx or Caddy is the recommended mitigation.

Hacker News Comment Review

  • Clipboard sharing – a table-stakes feature for RDP workflows – is absent from the README, which is the first thing an evaluator would check before considering adoption.
  • The practical case for a browser-based client is contested: native RDP clients ship on every major OS, so the utility depends on locked-down or shared environments where installing software is not an option.

Original | Discuss on HN