Configuration file
Everything the proxy can do is configurable in one TOML file:
- Linux:
~/.config/podsdr/proxy.toml - macOS:
~/Library/Application Support/podsdr/proxy.toml - Anywhere: pass
--config <path>
Three ways to edit it:
- The web client’s config panel — browse to the proxy on the LAN and open the configuration UI. It edits CAT radios (with dropdowns of detected serial ports and audio devices), composite radios, discovery options and cloud settings, and applies changes live — connected sessions on an edited radio are reconnected automatically. For safety this panel only works from the proxy’s own LAN origin, never through the cloud broker.
- The terminal wizard —
podsdr-proxy configure(works over SSH). - A text editor — the schema below.
Every field is optional. Command-line flags override their config counterparts for that run. If the file has a syntax error the proxy still starts, with defaults, and prints a prominent warning.
Full example
[server]
port = 8080
bind = "0.0.0.0"
static_dir = "/opt/podsdr/web"
max_sessions = 32
tls = true
tls_sans = ["pi.local", "192.168.1.10"]
# origins = ["https://pi.local:8080"] # restrict CORS; default: allow all
# tls_cert = "/etc/ssl/my-cert.pem" # bring your own cert (with tls_key)
# tls_key = "/etc/ssl/my-key.pem"
[cloud]
broker_url = "wss://podsdr-broker.fly.dev"
proxy_name = "My Shack"
hub_public_key = "<64 hex chars>"
# identity_file = "proxy_ed25519.key" # this proxy's identity keypair
# Station-wide receive-only ranges (Hz) — TX is blocked on EVERY radio here.
rx_only_bands = [[144000000, 148000000]]
# ---- Traditional (CAT) radios — one [[traditional]] block per radio ----
[[traditional]]
id = "shack-qmx" # stable id (used by composites); optional
name = "Shack QMX" # label shown in clients
port = "/dev/cu.usbmodem1101" # CAT serial port
radio = "qmx" # model, see the supported list
audio_in = "QMX" # capture device = the rig's USB-audio OUT
audio_out = "QMX" # playback device = the rig's USB-audio IN
force_data_mode = true # default true
baud = 9600 # override the model default
tx_audio_gain_db = 12.0 # −40…+40 dB makeup gain into the rig
rx_audio_gain_db = -6.0 # −40…+40 dB makeup gain from the rig
cw_key_line = "dtr" # "dtr" or "rts"; CW keying line
# cw_key_port = "/dev/cu.usbserial-KEY" # separate keying port, if any
# rx_only_bands = [[7000000, 7200000]] # per-radio receive-only ranges
[[traditional]]
name = "Shack IC-7300"
port = "/dev/cu.usbserial-IC7300"
radio = "ic7300"
baud = 115200
cat_spectrum = true # use the rig's own CI-V scope as panadapter
[[traditional]]
name = "IC-705 (WLAN)" # a NETWORK Icom: set host, no serial port
host = "192.168.1.50"
# control_port = 50001 # default
username = "operator"
password = "secret"
cat_spectrum = true
# ---- Composite radios — combine two radios into one ----
[[composite]]
name = "FTDX + Hermes panadapter"
[composite.roles]
tx = "shack-ic-7300" # who transmits
rx_audio = "shack-ic-7300" # who you listen to
spectrum = "remote-hermes" # who draws the panadapter
# control = ... # defaults to the tx radio
[composite.tracking]
spectrum_follows = "rx" # "rx", "tx" or "fixed"
# rx_offset_hz / rx_cal_ppm / spectrum_offset_hz / spectrum_cal_ppm
[composite.tx_sequencing]
# pre_tx_delay_ms / hang_ms
# rx_mute_on_tx = true
# spectrum_freeze_on_tx = true
# ---- Discovery: control what shows in the device list ----
[discovery]
disabled = ["AA:BB:CC:DD:EE:FF"] # hide these Hermes radios (by MAC)
[discovery.names] # rename radios in the picker
"11:22:33:44:55:66" = "Shack Hermes"
[discovery.rx_only] # receive-only ranges per Hermes MAC
"11:22:33:44:55:66" = [[144000000, 148000000]]
[[discovery.hosts]] # manual host: reach a Hermes that
id = "remote-hermes" # broadcast discovery can't see
addr = "10.8.0.5" # (VPN / routed subnet)
name = "Remote Hermes"
Section notes
[server] mirrors the CLI flags of the same names — see the
command-line reference.
[cloud] — see Remote access through the cloud broker. The
proxy’s identity keypair normally lives in proxy_ed25519.key next to the
config; keep it — its public key is the proxy’s permanent ID and what your
account’s claim is attached to.
[[traditional]] — see Traditional (CAT) radios
for models, audio wiring and feature details.
[[composite]] — see Composite radios.
Receive-only bands exist at three levels: station-wide
(rx_only_bands at the top of the file), per CAT radio
(rx_only_bands inside a [[traditional]] block), and per Hermes radio
([discovery.rx_only]). They merge. While tuned inside a receive-only range,
the proxy refuses PTT, TUNE, CW and keyer macros server-side, and clients grey
out their PTT button (it reads “RX ONLY”).
Manual hosts ([[discovery.hosts]]) are also an allow-list: the proxy
only relays to radios it discovered on the LAN or that you listed here, so
this is how you attach a Hermes reachable over a VPN or another subnet.