SDR--
A software-defined radio application for listening, decoding, and recording. Connect radios, channels, and displays in Patch view, then pin your everyday controls to Rack view.
Run the desktop app with a local SDR, or place the server near your antenna and connect through a browser. Both use the same receiver engine and interface.
Install
Download a desktop installer or portable server from GitHub Releases. The installation guide covers macOS, Windows, Linux, Homebrew, Nix, and Docker.
On macOS:
brew tap newspicel/tap brew install --cask sdrminusminus
For a headless server on macOS or Linux, install sdrmm from the same tap:
brew install sdrmm brew services start sdrmm
Open http://localhost:8080. For remote access, configure authentication and HTTPS.
Start with an RTL-SDR
- Attach an antenna and plug the RTL-SDR into the computer running SDR--.
- Select it on the Device node. Set the sample rate to 2.4 MS/s and tune to a local FM station.
- Add a WFM channel from + Node and set it to the station's frequency.
- Connect Device
IQto WFMIQ, then WFMaudioto Speakeraudio. - Start playback on the Speaker. Select a node and press
pto pin it to the Rack.
Your first receiver walks through tuning, gain, audio, and RDS. See the hardware guide for other receivers and package-specific driver requirements.
What it supports
- Listening: AM, NFM, broadcast FM with stereo and RDS, SSB, and digital voice.
- Decoding: aircraft, ships, amateur radio, pagers, sensors, images, and more.
- Displays: spectrum, waterfalls, maps, decoded messages, and video.
- Recording: device IQ, channel baseband, and audio, with SigMF playback.
- Radio tools: scanning, signal identification, coherent arrays, direction finding, and passive radar.
- Automation: REST, WebSocket, MCP, network IQ export, and event forwarding.
SDR-- is under active development. The channel catalog lists each mode's test coverage and limitations, including partial experimental decoders.
Screenshots
These captures use debug-build signal sources and repository IQ fixtures. Regenerate them with
cargo xtask screenshots.
| Spectrum and waterfall | Rack view |
|---|
| FT8 decoding | Signal identification |
|---|
| Aircraft positions | Ship positions |
|---|
| Slow-scan television | Amateur television |
|---|
| Pager messages | Broadcast FM |
|---|
Build and contribute
Use the repository's pinned Rust toolchain, a C/C++ compiler, Clang/libclang, CMake, Python 3.12+, GNU Make, Node 26, and pnpm 11.
git clone https://github.com/Newspicel/sdrminusminus.git cd sdrminusminus python3 scripts/build-media.py export FFMPEG_DIR="$(python3 scripts/build-media.py --print-prefix)" pnpm --dir web install --frozen-lockfile pnpm --dir web build cargo run -p sdrmm
Open http://localhost:8080. For frontend hot reload and backend watching, run
cargo xtask dev --watch and open http://localhost:5173.
The signal generator and synthetic test radios are available in debug builds. Release builds support real receivers and recording playback.
| Command | Purpose |
|---|---|
cargo xtask check |
Format, lint, type-check, build, and check generated files |
cargo xtask test |
Rust and frontend tests without hardware |
cargo xtask smoke |
Browser tests against the server |
cargo xtask codegen |
Generate OpenAPI and TypeScript types |
cargo xtask audit |
Dependency checks |
Read Contributing, the build guide, and architecture for prerequisites, crate boundaries, and tests.
Documentation and API
- User and developer guide
- Swagger UI:
/api/docson a running server - OpenAPI:
/api/openapi.jsonor openapi.json
License
Copyright (C) 2026 SDR-- contributors.
Licensed under the GNU General Public License, version 3 or later. Third-party notices and license texts are also available in the app's About panel.