trx-rs logo
# trx-rs `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 backends - `trx-client`: connects to the server and exposes frontends such as the web UI ## Web UI Demo > GIF placeholder: add an animated walkthrough of the website here. ## What It Does - 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 ## Architecture At a high level: 1. `trx-server` owns the radio hardware and DSP pipeline. 2. `trx-client` connects to the server over TCP for control and audio. 3. 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. ## Workspace Layout - `src/trx-core`: shared types, rig state, controller logic - `src/trx-protocol`: client/server protocol types and codecs - `src/trx-app`: shared app bootstrapping, config, logging, plugins - `src/trx-server`: server binary and backend integration - `src/trx-client`: client binary and remote connection handling - `src/trx-client/trx-frontend`: frontend abstraction - `src/decoders`: protocol-specific decoder crates - `examples/trx-plugin-example`: minimal plugin example ## Supported Pieces ### Backends - Yaesu FT-817 - Yaesu FT-450D - SoapySDR-based SDR backend ### Frontends - HTTP web frontend - rigctl-compatible TCP frontend - JSON-over-TCP frontend ### Decoders - AIS - APRS - CW - FT8 - RDS - VDES - WSPR ## Build Requirements You will need Rust plus a few system libraries. ### Common dependencies - `libopus` - `pkg-config` or `pkgconf` - `cmake` ### SDR builds - `libsoapysdr` ### Audio builds - Core Audio on macOS, or ALSA development packages on Linux ## Configuration 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 ` to point at an explicit config file - Use `--print-config` to print an example combined config Start from [`trx-rs.toml.example`](trx-rs.toml.example). ## Quick Start ### 1. Build ```bash cargo build ``` ### 2. Create a config file ```bash cp trx-rs.toml.example trx-rs.toml ``` Adjust backend, frontend, audio, and auth settings for your environment. ### 3. Run the server ```bash cargo run -p trx-server ``` ### 4. Run the client ```bash cargo run -p trx-client ``` ### 5. Open the web UI Open the configured HTTP frontend address in a browser. ## Web Frontend Highlights - 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 ## Authentication The HTTP frontend supports optional passphrase-based authentication. - `rx`: read-only access - `control`: 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 Audio is transported as Opus between server, client, and browser. - `trx-server` captures and encodes audio - `trx-client` relays audio to the HTTP frontend - Browsers connect over `/audio` ## Documentation - [User Manual](docs/User-Manual.md): configuration, features, and usage - [Architecture](docs/Architecture.md): system design, crate layout, data flow, and internals - [`CONTRIBUTING.md`](CONTRIBUTING.md): contribution and commit rules ## Project Status This is an active project with evolving APIs and frontend behavior. Expect some rough edges and ongoing refactors. ## License Licensed under BSD-2-Clause. See [`LICENSES`](LICENSES) for bundled third-party license files.