Skip to content
HN On Hacker News ↗

GitHub - nakagami/grdpwasm

▲ 145 points 49 comments by mariuz 2mo ago HN discussion ↗

Pangram verdict · v3.3

We believe that this document is fully human-written

39 %

AI likelihood · overall

Human
100% human-written 0% AI-generated
SEGMENTS · HUMAN 0 of 2
SEGMENTS · AI 0 of 2
WORD COUNT 424
PEAK AI % 43% · §1
Analyzed
Apr 25
backend: pangram/v3.3
Segments scanned
2 windows
avg 212 words each
Distribution
100 / 0%
human / AI fraction
Verdict
Human
Pangram v3.3

Article text · 424 words · 2 segments analyzed

Human AI-generated
§1 Mixed · 43%

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. Architecture 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. Requirements

Go 1.24 or later A reachable RDP server (Windows or any RDP-compatible host)

Build 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

Run make serve # or equivalently: ./proxy/proxy -listen :8080 -static static Then open http://localhost:8080 in your browser. Proxy options

Flag Default Description

-listen :8080 Address and port to listen on

-static static Directory to serve static files from

Usage

Open http://localhost:8080 in a browser. Fill in the connection form:

Host — hostname or IP address of the RDP server Port — RDP port (default 3389) Domain — Windows domain (leave blank for local accounts) User — username Password — password Width / Height — initial desktop resolution

Click Connect. The remote desktop appears in the canvas. Click the canvas to capture keyboard focus. Click Disconnect to end the session.

Keyboard & Mouse All standard keyboard input is forwarded to the remote desktop via RDP scan codes. Mouse move, button clicks, and scroll wheel are fully supported.

Note: The browser tab must have focus for keyboard events to be forwarded. Click inside the canvas area if keys stop responding.

Audio Remote audio is streamed via RDPSND and played through the browser's Web Audio API (PCM 44100 Hz, stereo, 16-bit signed little-endian). Security notes

The proxy accepts connections from any origin.

§2 Mixed · 30%

Run it only on a trusted network or add authentication before exposing it to the internet. Credentials are transmitted from the browser to the proxy over WebSocket. Use HTTPS/WSS (put the proxy behind a TLS-terminating reverse proxy such as nginx or Caddy) when accessing it over an untrusted network.

Development The repository contains a local fork of grdp under ./grdp/ with one addition: a Dialer field on RdpClient that lets callers inject a custom net.Conn factory. This is what allows the WASM build to connect via WebSocket instead of TCP. 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

License GPLv3 — see grdp LICENSE.