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

Web client

The web client is the same radio experience in a browser — spectrum, waterfall, RX/TX, CW keyer — with nothing to install at the operating position. It is served by podsdr-proxy (see Serving the web client on your LAN) or directly by the cloud broker, and talks to radios over WebRTC.

Opening it

Browse to the proxy, e.g. https://pi.local:8080. On first visit per browser profile you’ll accept the self-signed-certificate warning (see why HTTPS).

The landing page (“PodSDR Discovery”) shows:

  • Connection tabs: Local proxy (radios offered by the proxy that served the page, or any proxy URL you enter) and Cloud (the broker). There is no “Direct” tab — browsers can’t do LAN UDP, so the proxy always brokers.
  • An Emulator (Off/On) toggle and a Hermes (Embedded) entry that is always in the device list — a complete virtual radio running inside the browser tab (browser-side DSP, no proxy or hardware involved). Ideal for a first look; once connected, an Emu Settings window sets its noise level.
  • ⚙ Proxy config (only when browsing the proxy on the LAN) — the web editor for the proxy’s configuration: CAT radios, composites, discovery, cloud settings.
  • Wipe all settings (with confirmation).

Each real radio row offers two connect buttons: Server DSP (demodulation runs on the proxy — lowest browser load, required for CAT and composite radios) and Client DSP (raw IQ streams to the browser and DSP runs locally). If the connection drops, the client shows Connection lost and reconnects automatically with backoff; Disconnect stops that.

Cloud tab

Sign in with callsign/email + password (hub URL and manual token under Advanced; the session token — never your password — is stored in the browser). Enter a proxy’s pairing code and Claim proxy to attach it to your account, then Refresh proxies and Connect to any online radio. When the page is served by the broker itself, links to the Account and Proxies pages appear here. Cloud connections always use server DSP and include TURN relaying (even over 443) for restrictive networks.

Browser requirements

Any modern browser works. The page must be a secure context (HTTPS, or http://localhost) — otherwise the browser withholds low-latency audio (AudioWorklet), the GPU spectrum, mic capture and MIDI. Spectrum rendering uses WebGPU when available and falls back to WebGL2. MIDI paddles/keybindings need a browser with WebMIDI (Chrome and derivatives; Firefox behind a flag). On phones/tablets the layout adapts below ~700 px width.

Permission prompts you’ll see: microphone the first time you transmit, and MIDI on startup if the browser supports it.

Feature set

Operating the web client matches the desktop GUI almost one-for-one — the two share their control panels:

  • Spectrum + waterfall with click-to-tune, drag tuning (Fast/Slow toggle) and filter-edge dragging; palettes/smoothing/gamma in Display.
  • Full mode list, band buttons with per-band memories, VFO A/B, split, RIT/XIT, dual watch (stereo, capability-gated).
  • The complete DSP-RX set: NB, NR (including the RNNoise neural models), ANF, AGC, superhet emulation — real DSP in the browser in client mode, mirrored to the proxy in server mode.
  • TX with mic capture (echo cancellation and browser AGC deliberately off), CESSB/compressor/EQ/leveler/VOX, TUNE, TX meters.
  • Voice keyer (4 slots + Repeat) and RX recording — recordings download as rx-<n>.wav (60 s max per file); voice messages persist in the browser’s local storage.
  • Keybindings editor (keyboard + MIDI) and the band editor.
  • Theming: ☀ Light / 🌙 Dark / 🖥 System.
  • A CW reader decodes received CW in every connection mode.

CW keying in the browser deserves a note: the keyer engine runs inside the audio thread (an AudioWorklet), so sidetone and element timing are sample-accurate even when the browser throttles the page. Paddle sources: keyboard, WebMIDI, WebSerial. Macros M1–M8, <MYCALL>/<CALL> variables and the free-text send field all match the desktop.

Backgrounded tabs keep working. Audio, keyer, TX and the connection keepalive are driven from the audio thread’s heartbeat, which browsers don’t throttle — you can switch tabs mid-QSO. Returning to the tab resumes instantly (mobile browsers suspend audio more aggressively; the client re-arms itself when you come back).

Settings → Web Settings (server-DSP connections):

  • Audio codec: PCM (~770 kbps), µ-law (~385 kbps), Opus 32 kbps, Opus 64 kbps, or the default Adaptive PCM — sized to the current filter, so CW/SSB stay lossless at a fraction of the rate.
  • Waterfall stream off saves ~400 kbps; otherwise choose bins (512–4096) and rate (3/6/12 Hz).
  • A 24-bit IQ option exists for high-fidelity client-DSP use.

Status pills show the active codec, round-trip time, and DSP load.

Quirks worth knowing

  • Audio starts on your Connect click (browsers require a user gesture to start sound) — there is no separate “enable audio” step.
  • If browser storage is corrupted, settings are moved aside and the client starts fresh with a notice.