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

A web-based RDP client built with Go WebAssembly and grdp. Connect to a Windows Remote Desktop server directly from your browser — no plugins required.
A web-based RDP client built with Go WebAssembly and grdp. Connect to a Windows Remote Desktop server directly from your browser — no plugins required.
Browser (WASM) ──WebSocket──► proxy (Go) ──TCP──► RDP Server
Because browsers cannot open raw TCP sockets, a lightweight Go proxy server bridges WebSocket connections from the browser to the RDP server's TCP port.
- Go 1.24 or later
- A reachable RDP server (Windows or any RDP-compatible host)
git clone https://github.com/nakagami/grdpwasm.git
cd grdpwasm
make all
make all produces:
| Output | Description |
|---|---|
| static/main.wasm | Go WASM binary (runs in the browser) |
| static/wasm_exec.js | Go runtime JS support file |
| proxy/proxy | WebSocket-to-TCP proxy + static file server |
make serve
# or equivalently:
./proxy/proxy -listen :8080 -static static
Then open http://localhost:8080 in your browser.
| Flag | Default | Description |
|---|---|---|
| -listen | :8080 | Address and port to listen on |
| -static | static | Directory to serve static files from |
- Open
http://localhost:8080in a browser. - Fill in the connection form: Host, Port, Domain, User, Password, Width / Height.
- Click Connect. The remote desktop appears in the canvas.
- Click Disconnect to end the session.
All standard keyboard input is forwarded to the remote desktop via RDP scan codes. Mouse move, button clicks, and scroll wheel are fully supported.
Remote audio is streamed via RDPSND and played through the browser's Web Audio API (PCM 44100 Hz, stereo, 16-bit signed little-endian).
- The proxy accepts connections from any origin. Run it only on a trusted network.
- Use HTTPS/WSS (put the proxy behind a TLS-terminating reverse proxy such as nginx or Caddy) when accessing it over an untrusted network.
make wasm # rebuild only the WASM binary
make proxy # rebuild only the proxy server
make wasm_exec # refresh wasm_exec.js from the local Go toolchain
make clean # remove all build artifacts
GPLv3 — see grdp LICENSE.
Source: Hacker News














