SDR--

Patch a radio together

Wire a receiver to a channel, and the channel to a speaker, a map or a recorder. SDR-- listens, decodes and records — on the computer at your desk, or on a server out at the antenna.

brew tap newspicel/tap
brew install --cask sdrminusminus

Every receiver is built like this. Nodes are radios, channels, displays and outputs; edges carry IQ, audio, events and video. Pin the controls you actually reach for to Rack view and the patch keeps running behind it.

Choose what the signal becomes

A channel takes IQ from a radio and gives back something you can use. Which output it produces is what makes one channel different from another.

AudioVoice and music

AM, NFM, SSB and CW, broadcast FM in stereo with RDS, and digital voice: DMR, FreeDV, D-STAR, System Fusion, NXDN, P25 Phase 1, dPMR and M17.

EventsMessages and positions

Aircraft over ADS-B, ACARS, VDL Mode 2 and HFDL. Ships over AIS, NAVTEX and DSC. Pagers over POCSAG, FLEX and ERMES. Amateur data — FT8, FT4, WSPR, APRS, RTTY, PSK and CW. ISM sensors and radio clocks.

VideoPictures

Slow-scan television, amateur television, and DVB-S / S2 digital television.

IQSamples to keep

Record the radio, a channel's baseband or its audio, and replay it later. SigMF in and out, and live IQ to another program over the network.

See the band

Spectrum, waterfall, constellation and map displays, with the decoded messages beside them.

Find the signal

Scanning, signal identification, coherent arrays, direction finding and passive radar.

Drive it from elsewhere

REST, WebSocket, MCP, network IQ export and event forwarding to your own tools.

Modes range from tested on air to experimental. The channel catalog says which is which, mode by mode.

What it looks like

Two views over one running receiver: build it in Patch, operate it in Rack.

A patch with a signal generator feeding a scope and three channels, wired to a speaker, a recorder and a network IQ export.
Patch view. Drag a node out, wire a port to a port. Ports only accept the signal they carry, so a patch either makes sense or will not connect.
Three receivers stacked in Rack view with their controls and readouts.
Rack view. Press p on a node to pin its face here. The canvas stays where it is; the rack is the version you hand to someone who just wants to listen.
Aircraft positions on a map beside the ADS-B decoder log.
Aircraft, live. ADS-B positions on the map, the raw decoder log beside it, and the same messages available over the API.
Decoded FT8 messages from a recorded 20 metre slot.
Weak signals. FT8 decoded from a recorded 20 m slot — the same path a recording takes when you replay it.

These captures use debug-build signal sources and the repository's IQ fixtures, so they reproduce without a radio attached.

Install it

The desktop app runs its own server on a private port. The standalone server does the same job on a machine you keep near the antenna, and any browser on your network drives it.

Desktop app

macOS .dmg, Windows .msi or .exe, Linux .deb or .AppImage.

Download the latest release

Homebrew

The cask installs the app; the formula installs the headless server.

brew tap newspicel/tap
brew install --cask sdrminusminus

or, for a server
brew install sdrmm
brew services start sdrmm

All install methods, including Nix

Container

Persists its database and recordings in a volume. Pass through the USB group that owns your radio.

git clone https://github.com/Newspicel/sdrminusminus.git
cd sdrminusminus
docker compose up -d

Container setup, auth and HTTPS

Then open http://localhost:8080, select your radio on a Device node, and tune. The server listens on every interface without authentication by default — set a token and HTTPS before you put it on an untrusted network.

Still being built

SDR-- is under active development, and the docs say plainly what is tested on air, what is only tested against fixtures, and what is experimental. Bug reports and decoder fixtures are both welcome.