A bench instrument for software defined radios, living in your terminal.
Spectrum, waterfall, and the measurements a plot cannot give you.
This project is supported by
Airspy · SDRplay
Via SoapySDR
Grey means written from the API, not from owning one. It should work. Nobody has told me either way yet, which is exactly as reassuring as it sounds. The honest version.
Install · Hardware · Full guide · Changelog
Hey there! This is my take on a terminal monitor for SDR hardware. Raw, real-time diagnostics from your radio, with a spectrum, a waterfall and a set of bench instruments, in a tmux pane, an SSH session, or the postage-stamp screen of a cyberdeck. I set out to print a few numbers. There is now a Friis noise figure model in here. I'm not entirely sure how that happened.
It's a hobby project, and honestly, I made it for you ❤️. Beat on it, open issues, send ideas and pull requests. This is an open table, not my private garage.
demo.mp4
It's a terminal app, so brace yourself for the visual spectacle of monospace text in color. The only special effects are honest dBFS numbers.
Important
Early development. New features keep coming, each one measured against the specification and then polished until it reads at a glance. Known issues: plenty 😄 If something looks broken, it's either a bug or an undocumented feature. Flip a coin, then open an issue.
Piconet follow · classic Bluetooth
One piconet, found by the access code at the start of every packet and read packet by packet. How it works
piconet_follow.mp4
RDS demodulation · FM broadcast
Station name, programme type and RadioText, read off the 57 kHz subcarrier. No audio, on purpose. How it works
lab_rds_demod.mp4
- Spectrum and waterfall, plus the Command Rail cockpit: frequency, S-meter, SNR, noise figure and saturation on live traces.
- Four lab benches for what a plot can't answer: quadrature, front-end staging, timing, and what is that signal. Details
- A demodulator that reads radios instead of playing them: FM deviation, pilot, stereo, CTCSS, AM depth, RDS. No audio, on purpose. Details
- NET: the 2.4 GHz band, measured. Bluetooth (BLE, LE Coded, classic) and Wi-Fi, decoded and held against the specification. Never transmits, never joins. Details
- IQ correction, band sweeps, SigMF recording, observer mode for a radio another app holds, and every lab panel marked [STALE] the moment its data stops being live.
Because the only thing worse than no data is confidently wrong data.
Everything else, every key and every config field, is in the full user guide.
curl -fsSL https://raw.githubusercontent.com/musithang/sdrtop/main/packaging/install.sh | shThe installer takes the prebuilt binary, or compiles from source when that can't run on your machine. Add your radio's runtime with sh -s -- --hackrf, --rtlsdr, --airspy, --airspyhf or --soapy; --sdrplay checks SDRplay's API and service. Piping a script into sh means running code you haven't read, so read it first: packaging/install.sh. I'd want to.
On Arch, from the AUR:
yay -S sdrtop-bin # or sdrtop, or sdrtop-gitWith cargo, anywhere with Rust 1.88+ and a C compiler:
cargo install sdrtop --lockedNo SDR library is needed to build; each radio's library is loaded at runtime, and a missing one disables only its own backend. Every flag, every distribution and the tarball by hand: Getting started.
First run: sdrtop opens on its menu. Enter takes a layout, Space starts receiving, Esc brings the menu back, q quits and saves. Every key: Keyboard shortcuts.
| Device | Status |
|---|---|
| HackRF One, PortaPack H4M | ✅ Tested |
| RTL-SDR | ✅ Tested |
| Airspy R2 | ✅ Tested |
| Airspy HF+ Discovery | ✅ Tested |
| SDRplay RSP1B | ✅ Tested |
| tinySA / Ultra / Ultra+ | ✅ Spectrum (ZS405 tested) |
| Anything with a SoapySDR driver | 🧪 Beta, written from the API |
Native support lands only after testing on a real radio. The RSP1B came from SDRplay, the R2 and the HF+ Discovery from Airspy. Thank you both. How the radios differ: Supported hardware.
📡 (pst… you scrolled this far, might as well)
.
/=\
( |#| )
(( |#| ))
((( |#| )))
(( |#| ))
( |#| )
|#|
/|#|\
/ |#| \
/ |#| \
/___|#|___\
/ |#| \
'''''''''''''''
Yep, it's a radio tower. I'm a simple man, I see free time, I make ASCII art.
73 de sdrtop: ham-speak for "catch you later." 📻
Credits · Contributing · License: GPL-3.0-or-later

