Claude 4eac4458bf [fix](trx-frontend-http): add NOAA APT and Meteor LRPT to bookmark decode checkboxes
The Add Bookmark popup was missing NOAA APT (wxsat) and Meteor LRPT
decoder checkboxes. Added them to the HTML form, the read/write
functions, and the decoder toggle logic when applying bookmarks.

https://claude.ai/code/session_01FMcYoHGy5K21maudnntueB
Signed-off-by: Claude <noreply@anthropic.com>
2026-03-28 20:53:38 +01:00
2025-11-30 23:54:05 +01:00
2025-11-30 23:54:05 +01:00

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 <FILE> to point at an explicit config file
  • Use --print-config to print an example combined config

Start from trx-rs.toml.example.

Quick Start

1. Build

cargo build

2. Create a config file

cp trx-rs.toml.example trx-rs.toml

Adjust backend, frontend, audio, and auth settings for your environment.

3. Run the server

cargo run -p trx-server

4. Run the client

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

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 for bundled third-party license files.

S
Description
Experimental ham rig and SDR controller written in Rust
Readme 31 MiB
Languages
Rust 68.2%
JavaScript 24.1%
CSS 4.6%
HTML 3.1%