trx-rs is a modular amateur radio control stack written in Rust.
It splits radio hardware access from user-facing interfaces so you can run
rig control, SDR DSP, decoding, audio streaming, and web access as separate,
composable pieces.
The project is built around two primary binaries:
trx-server: talks to radios and SDR backendstrx-client: connects to the server and exposes frontends such as the web UI
GIF placeholder: add an animated walkthrough of the website here.
- Controls supported radios over networked client/server boundaries
- Exposes a browser UI, a rigctl-compatible frontend, and JSON-based control
- Supports SDR workflows with live spectrum, waterfall, demodulation, and decode
- Streams Opus audio between server, client, and browser
- Runs multiple decoders including AIS, APRS, CW, FT8, RDS, VDES, and WSPR
- Supports multi-rig deployments and SDR virtual channels
- Loads backends and frontends via plugins
At a high level:
trx-serverowns the radio hardware and DSP pipeline.trx-clientconnects to the server over TCP for control and audio.- Frontends hang off
trx-client, including the HTTP web UI.
This separation is intentional: it keeps hardware access local to one host while making control and monitoring available elsewhere on the network.
src/trx-core: shared types, rig state, controller logicsrc/trx-protocol: client/server protocol types and codecssrc/trx-app: shared app bootstrapping, config, logging, pluginssrc/trx-server: server binary and backend integrationsrc/trx-client: client binary and remote connection handlingsrc/trx-client/trx-frontend: frontend abstractionsrc/decoders: protocol-specific decoder cratesexamples/trx-plugin-example: minimal plugin example
- Yaesu FT-817
- Yaesu FT-450D
- SoapySDR-based SDR backend
- HTTP web frontend
- rigctl-compatible TCP frontend
- JSON-over-TCP frontend
- AIS
- APRS
- CW
- FT8
- RDS
- VDES
- WSPR
You will need Rust plus a few system libraries.
libopuspkg-configorpkgconfcmake
libsoapysdr
- Core Audio on macOS, or ALSA development packages on Linux
Both trx-server and trx-client read from a shared trx-rs.toml.
- Default lookup order: current directory,
~/.config/trx-rs,/etc/trx-rs - Use
--config <FILE>to point at an explicit config file - Use
--print-configto print an example combined config
Start from trx-rs.toml.example.
cargo buildcp trx-rs.toml.example trx-rs.tomlAdjust backend, frontend, audio, and auth settings for your environment.
cargo run -p trx-servercargo run -p trx-clientOpen the configured HTTP frontend address in a browser.
- Real-time spectrum and waterfall
- Frequency, mode, and bandwidth control
- Decoder dashboards and history
- SDR virtual channels
- Browser RX/TX audio
- Optional authentication with read-only and control roles
The HTTP frontend supports optional passphrase-based authentication.
rx: read-only accesscontrol: full control access
When exposing the web UI beyond a trusted LAN, run it behind HTTPS and enable secure cookie settings in the config.
Audio is transported as Opus between server, client, and browser.
trx-servercaptures and encodes audiotrx-clientrelays audio to the HTTP frontend- Browsers connect over
/audio
- User Manual: configuration, features, and usage
- Architecture: system design, crate layout, data flow, and internals
CONTRIBUTING.md: contribution and commit rules
This is an active project with evolving APIs and frontend behavior. Expect some rough edges and ongoing refactors.
Licensed under BSD-2-Clause.
See LICENSES for bundled third-party license files.
