Leyline SDR for macOS

Software defined radio, made for the Mac.

Plug in an RTL-SDR or HackRF and listen. Record each transmission, organize memories by band, and add your own AI key for an assistant and speech-to-text.

Free · macOS 26 or later · signed and notarized · receive only
Radios
RTL-SDR, HackRF, rtl_tcp
Modes
NFM WFM AM USB LSB CW
Tones
CTCSS and DCS
Decoders
APRS, SAME, AIS
AI
Assistant, speech-to-text · your key
Imports
CHIRP CSV

Launch it, click a signal, hear it.

The spectrum and waterfall appear as soon as a radio is connected. Click to tune; mode, bandwidth and squelch come from the band you’re in. Pan and zoom the band rail to explore the capture. The inspector shows the signal, tuning, deviation and the tone it hears, and the Library holds your recordings and their speech text.

The Leyline window on the 2 m band: a voice transmission on 146.520 MHz with PL 100.0 in the inspector, the stations around it on the waterfall from 146.430 to 146.640 MHz, and the 2 m bookmarks in the sidebar. Simulated signals.
The assistant · new in 0.2

Ask it to put on the weather radio.

An assistant beside the inspector tunes, scans, sets the squelch, records and keeps bookmarks from plain requests. Open any step to see what it did. It asks before taking the radio from another listener, deleting a recording or starting paid transcription, and Stop ends a turn. Conversations stay with you across restarts.

The Leyline window with the assistant beside the inspector: a request to put on the weather radio, the two steps it ran, listing the presets and tuning WX2, and its reply naming the channel, which the window has moved to. Simulated signals.
Recording and speech

Every over, its own clip. Now with the words.

Record each transmission with half a second of audio before it starts. Add speech-to-text to search the words, play the matching clip, or export text and SRT. Watch a live channel for phrases such as “net control”. Speech sends each over’s audio to your OpenAI or OpenAI-compatible provider; it doesn’t run on the Mac.

The Leyline Library on a net recorded on 147.180 MHz and transcribed: the words of each over under its part, and one part selected. Simulated signals.
AI on your own key

Choose the provider. See what it uses.

Add an Anthropic, OpenAI or OpenAI-compatible key in Settings → AI. Choose a model for the assistant and a supported provider for speech. Keys stay in the Mac’s login keychain. Settings shows what each feature sends, where it goes, and your usage: conversation and tool results for the assistant, audio for speech. Listening and recording need no AI key.

Leyline's Settings, AI: an OpenAI key, shown by its last four characters, the models the assistant and speech use with what each sends to api.openai.com, and the requests and tokens the assistant used today. Simulated signals.
Memories by band

Your CHIRP memories, organized by band.

Import a CHIRP export and your memories become bookmarks with their tones, offsets and notes, filed by band. Memories on the same frequency share a row and keep their own details. Sort by frequency or name, or tune straight to the built-in NOAA weather, GMRS, MURS and marine channels.

The Leyline sidebar after importing a CHIRP export of 100 memories: the 2 m band open with its five bookmarks, the other bands closed, and the import's counts in the notice over the waterfall. Simulated signals.
Tone discovery

Hear a repeater, learn its tone.

On an NFM channel Leyline listens under the voice for a CTCSS tone or a DCS code and shows it beside the bookmark’s tone, the way your radio’s menu would: PL 127.3, or DCS 023 in octal. Add it to the bookmark, then program your handheld.

The Leyline inspector on the 146.940 MHz repeater output: the heard CTCSS tone, 127.3 Hz, beside the bookmark's tone, and each transmission in the log with its tone. Simulated signals.
The Leyline inspector on a net on 147.180 MHz: the heard DCS code, 023, beside the bookmark's tone. Simulated signals.
Scanning

Sweep a band and see what’s on it.

Scan band lists carriers with their frequency, width, signal-to-noise and how often they were seen, then marks them on the band rail. A single burst reads differently from a repeater that is always up. A scan reports when the radio is already in use.

ley scan 144M..148M in a terminal: a table of the carriers found on the 2 m band with their frequency, width, level over the floor, and how many looks saw each one. Simulated signals.
The Leyline sidebar's 2 m band after Scan band: the carriers it found listed under the band with their level over the floor, and marked on the band rail. Simulated signals.
Decoding

APRS, weather alerts and AIS, decoded.

Decoders share the radio with you when their channel is in range, or run on a second radio. Follow APRS stations as they beacon, see vessels on AIS, and set a watch that sends a macOS notification when a SAME alert names your county. Alerts can also go to a webhook or a shell command.

Severe Thunderstorm Warningnow
Fairfax County, VA, until 21:45SAME on NOAA WX2 · 162.400 MHz
ley track aprs in a terminal: seven stations heard on 144.390 MHz with their positions, symbols and comments. Simulated signals.
ley track ais in a terminal: five vessels heard on AIS channel 1, 161.975 MHz, with their positions. Simulated signals.

One radio. Three ways to use it.

A background engine runs the radio, and decoders and watches keep going after the window closes. The Mac app, the ley command and MCP clients all talk to it. Tune from the terminal or the assistant and the window follows: the readout, inspector, transmissions and audio move to the new channel. If the old channel is still recording, the inspector keeps its Stop control in reach.

The appClick the waterfall to tune. Bands, bookmarks and the Library keep everything in reach.
The terminalley for scripts, cron jobs and SSH. Every command that reports something has --json.
The assistantAsk in the app, or connect an external assistant with ley mcp. Each step stays visible.
A terminal running ley tune 146.940 --bw 25 beside the Leyline window, which has moved to the club repeater on 146.940 MHz, says another terminal tuned it and that the audio plays there. Simulated signals.
Read the docs for ley and MCP →

What you need

A MacApple silicon · macOS 26+The radio drivers are inside the app. Nothing else to install.
A radioRTL-SDR or HackRFRTL2832U dongles such as the Nooelec NESDR, the HackRF One and the HackRF Pro.
Or a radio elsewherertl_tcp on a PiLeave the dongle by the antenna in the attic. Leyline remembers it once attached.
No radio yetAn IQ recordingRecordings play through the same pipeline as a live radio.

Free for Mac.

Signed and notarized by Apple, and it updates itself. Drag it to Applications, plug in a radio and open it.

Download Leyline SDRVersion 0.2.0 · macOS 26 or later
Build it yourselfAll of Leyline is open source. The engine is GPL-3.0-or-later; the app, ley and the contract are Apache-2.0.reflexive-labs/leysdr ↗