grdpwasm runs RDP in the browser via a Go WASM binary and a lightweight WebSocket-to-TCP proxy, with no plugins required.
Key Takeaways
Architecture: browser runs a Go WASM binary; a Go proxy bridges WebSocket to TCP port 3389 on the RDP host.
The proxy is a local fork of grdp with one patch: a Dialer field on RdpClient that lets WASM inject a WebSocket net.Conn instead of raw TCP.
Build produces two artifacts: static/main.wasm (browser logic) and proxy/proxy (WebSocket+static file server); make serve starts everything on :8080.
Audio works via RDPSND streamed through Web Audio API at PCM 44100 Hz stereo 16-bit; keyboard input uses RDP scan codes forwarded from browser events.
Security gap: the proxy accepts any origin and transmits credentials in plaintext over WebSocket – requires TLS termination (nginx/Caddy) and network isolation before any non-local use.
Hacker News Comment Review
Clipboard is the dominant practical blocker: the browser Clipboard API requires user-gesture permission for writes and prompts on reads, so paste-out-of-RDP needs a click each time – a fundamental browser constraint, not a grdpwasm bug.
Commenters see a real gap in the open-source remote-desktop space following HP’s shutdown of Anyware/Teradici/PCoIP, and are tracking alternatives like RustDesk alongside this project for high-res multi-monitor workloads.
Alt-Tab key capture and SSO/session-recording support were flagged as the two missing features needed before this could serve as a proper RDP jumphost, comparable to Azure Bastion.
Notable Comments
@the_data_nerd: detailed breakdown of why clipboard paste-out requires a user click every time due to browser Clipboard API permission gating.
@notepad0x90: outlines the session-recording + SSO path that would make this a viable self-hosted RDP jumphost, citing Azure Bastion as the reference implementation.
@mcoliver: frames the market context – HP Anyware/Teradici shutdown leaves a gap; names RustDesk, Parsec, and DCV as the current open/paid landscape.