Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Serving the web client on your LAN

Extract the server bundle and run:

./run.sh              # HTTPS on port 8080
./run.sh 8443         # HTTPS on port 8443
./run.sh --no-tls     # plain HTTP on port 8080
./run.sh --no-tls 9000

(Windows: run.bat with the same arguments.)

Then open https://<host>:8080 from any browser on the LAN — for a Raspberry Pi that’s typically https://pi.local:8080 or https://<pi-ip>:8080.

Why HTTPS by default

Browsers only expose AudioWorklet (low-latency audio), WebGPU (spectrum rendering), WebMIDI (CW paddles) and getUserMedia (your microphone for TX) to pages on a secure origin. A Pi on your LAN served over plain HTTP is not one, and the web client would lose those capabilities — so the launcher enables TLS by default.

On first start the proxy generates a self-signed certificate (cert.pem / key.pem) next to the binary and reuses it afterwards. Because it’s self-signed, each browser profile shows a “connection is not private” warning once — accept it and it won’t ask again. If the certificate warning reappears on every visit, or you connect by IP address rather than hostname, see --tls-san in the command-line reference for adding the IP to the certificate.

Use --no-tls only when something else already terminates TLS in front of the proxy (a reverse proxy such as nginx or Caddy) — the secure-context requirement is then satisfied by that frontend.

Gotcha: if the proxy runs without --tls and you open https://<host>:8080 anyway, the browser reports ERR_SSL_PROTOCOL_ERROR. That’s not a certificate problem — it’s a TLS handshake hitting a plaintext socket. Either use http:// or start the proxy with TLS.

What you’ll see

The served page is the full PodSDR web client. It asks the proxy for the device list, which contains every radio the proxy can see: OpenHPSDR radios discovered on the LAN, a running podsdr-emu, plus any configured CAT radios, RTL-SDR dongles and composite radios.

Checking it works

RUST_LOG=info ./run.sh

prints discovery and connection activity to the console. From another machine, curl -k https://<host>:8080/api/devices should return the device list as JSON.