[Media] sdrtop: A terminal SDR monitor built with ratatui, tokio

108 points mustang6139 16 comments
[Media] sdrtop: A terminal SDR monitor built with ratatui, tokio

Hey everyone!

I wanted to share sdrtop, an open-source terminal SDR monitor I've been working on for the HackRF One and RTL-SDR. It's built entirely in Rust using ratatui and tokio to be a lightweight, keyboard-driven alternative to heavy GUI apps.

Note: You'll need an RTL-SDR or HackRF to actually use it, so unfortunately it's pretty niche!

Rather than wrapping existing DSP frameworks or GNU Radio blocks, I decided to write the demodulation and analysis pipeline natively in Rust to actually understand the math behind it.

Currently, the native DSP chain handles:

  • AM: Demodulation with separate positive and negative peak depth measurements.
  • FM / NFM: Frequency deviation tracking and CTCSS tone detection.
  • MPX & RDS: 19 kHz stereo pilot detection and full 57 kHz RDS subcarrier decoding.
  • Analysis: Live IQ constellation, signal characterization, and bandwidth measurements.

The FM/RDS path in particular became quite the rabbit hole 😅. Crunching raw high-throughput IQ streams from the USB bus and doing phase discrimination without blocking the ratatui render loop was a great concurrency exercise.

The TUI itself is fully modular and driven by TOML configuration files. You can preset and bind any analysis panel component to any position, and color themes are completely customizable via TOML as well.

It's still in active development, but if you're into Rust, TUI architecture, or SDRs, I'd love any code reviews, PRs, or feedback!

I used AI tools to assist during development.

👉 Repo: https://github.com/mustang6139/sdrtop