podsdr-proxy command-line reference
podsdr-proxy [OPTIONS]
podsdr-proxy configure [--config <PATH>]
The run.sh / run-cloud.sh launchers are thin wrappers over these flags —
use them directly when you need a non-default setup.
Precedence: the configuration file is the base; any flag you pass explicitly on the command line overrides the matching config value for that run.
Subcommand: configure
podsdr-proxy configure
An interactive terminal wizard that edits the config file: add/remove CAT
radios (with serial-port autodetection), hide discovered OpenHPSDR radios,
and so on. It writes the same proxy.toml described in
Configuration file and exits. The same settings can also be
edited from the web client’s config panel when browsing the proxy on the LAN.
Server options
| Flag | Default | Meaning |
|---|---|---|
--config <path> | <config-dir>/podsdr/proxy.toml | Config file to load (~/.config/podsdr/proxy.toml on Linux, ~/Library/Application Support/podsdr/proxy.toml on macOS). |
--port <n> | 8080 | HTTP(S) listen port. |
--bind <addr> | 0.0.0.0 | Listen address. |
--static-dir <path> | (none) | Directory with the web client to serve (the bundle’s web/). Without it the proxy only offers the API/WebRTC endpoints. |
--origin <url> | (all allowed) | Allowed CORS origin; repeatable. |
--max-sessions <n> | 32 | Maximum concurrent client (WebRTC) sessions. |
TLS options
| Flag | Default | Meaning |
|---|---|---|
--tls | off | Serve HTTPS. With no cert flags, a self-signed cert.pem/key.pem is generated next to the binary (or in ~/.podsdr if that isn’t writable) on first run and reused for 10 years, so the browser warning appears once per profile. |
--tls-cert <path> / --tls-key <path> | (auto-generate) | Use your own certificate/key PEM pair (must be given together). |
--tls-san <name-or-ip> | (none) | Extra SubjectAltName baked into the auto-generated certificate; repeatable. The certificate always includes localhost, pi.local, 127.0.0.1 and ::1 — add your host’s LAN IP or hostname here so browsers don’t report a name mismatch. |
Changing SANs after the certificate exists has no effect — delete
cert.pem/key.pemto force regeneration.
Cloud uplink options
| Flag | Default | Meaning |
|---|---|---|
--broker-url <url> | (none — uplink off) | Broker to uplink to, e.g. wss://podsdr-broker.fly.dev. |
--proxy-name <name> | (none) | Human-friendly name shown to your clients (e.g. home, shack). |
--hub-public-key <hex> | (none) | The broker’s Ed25519 public key. Required for any non-localhost broker — the proxy uses it to verify the broker’s signed session tokens. |
--identity-file <path> | <config-dir>/podsdr/proxy_ed25519.key | This proxy’s identity keypair; generated on first use. The public key is the proxy’s permanent ID — keep the file to keep the identity (and the claim on your account). |
--insecure-open-mode | off | Allow a non-localhost broker without a hub key. Every relayed client then gets full TX rights. Development only. |
Traditional-radio quick flags
These exist for the simple one-radio case; for anything more (several radios,
network Icoms, per-radio options) use the configuration file.
--cat-port replaces the config file’s [[traditional]] list for that
run.
| Flag | Default | Meaning |
|---|---|---|
--cat-port <path> | (none) | Serial device of the CAT radio, e.g. /dev/ttyUSB0, /dev/cu.usbmodem1101, COM5. |
--radio <model> | x6100 | Which radio is on that port: x6100, qmx, ic7300, ic705, ftdx10, ftdx3000, ft991a, g90, fx4cr-v1, fx4cr-v2. |
--audio-in <name> | (system default) | Audio capture device = the radio’s USB-audio output (RX audio). |
--audio-out <name> | (system default) | Audio playback device = the radio’s USB-audio input (TX audio). |
--force-data-mode <bool> | true | Switch the radio to its DATA mode on TX so its mic processing stays out of the audio path. |
--baud <rate> | (model default) | CAT serial baud override. |
--tx-audio-gain-db <dB> | 0 | TX audio makeup gain (−40…+40 dB) into the rig; also adjustable live from clients. |
Logging
RUST_LOG=info ./podsdr-proxy ...
Without RUST_LOG the proxy logs warnings globally and info-level messages
from its own components (discovery, sessions, audio, CAT). Set
RUST_LOG=debug for protocol-level detail.