SDR–; open source SDR with a patchable signal graph, Rust DSP, web UI

newspicel · Sep 14, 2026 · via RSS

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

  1. Attach an antenna and plug the RTL-SDR into the computer running SDR--.
  2. Select it on the Device node. Set the sample rate to 2.4 MS/s and tune to a local FM station.
  3. Add a WFM channel from + Node and set it to the station's frequency.
  4. Connect Device IQ to WFM IQ, then WFM audio to Speaker audio.
  5. Start playback on the Speaker. Select a node and press p to 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/docs on a running server
  • OpenAPI: /api/openapi.json or 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.

Comments

Sign in to join the discussion.