atradio
atradio.fm in your terminal — a TUI radio player on the AT Protocol.
A native Rust client for atradio.fm: browse trending / popular / recently-played stations, fuzzy-search the whole radio-browser directory, play live streams with a full Rockbox DSP/equalizer chain, and — when signed in — favorite stations, add your own, and post comments to your PDS.

Install
Prebuilt release tarballs, .deb, and .rpm packages are attached to every
GitHub release, named
atradio-<version>-<os>-<arch>.tar.gz (macos-amd64, macos-aarch64,
linux-amd64, linux-aarch64, freebsd-amd64, netbsd-amd64) — each
contains the binary, README, and LICENSE. The BSD builds run in emulated VMs
and are attached to the release shortly after it's published.
macOS / Linux — Homebrew
Linux — Debian / Ubuntu
Direct .deb:
# amd64
# arm64 (Raspberry Pi 4/5, Apple-silicon VM, …)
Or via the Gemfury apt repo (auto-updates with apt upgrade):
|
&&
Linux — Fedora / RHEL / openSUSE
Direct .rpm:
Or via the Gemfury dnf/yum repo:
Nix
# Optional: use the binary cache to skip building.
# One-off run:
# Install into your user profile:
# Dev shell (rust toolchain + build deps):
From source (Cargo)
# Runtime/build deps: a C toolchain (for the Rockbox codecs) + ALSA on Linux.
Build (from a checkout)
Building compiles the vendored Rockbox codecs, so a C toolchain is required
(clang/gcc). macOS uses CoreAudio; Linux needs ALSA dev headers
(libasound2-dev).
License note: this crate links
rockbox-playback(GPL-2.0-or-later), so the compiledatradiobinary is GPL-2.0-or-later.
Usage
Signing in
Reads to the AppView are public; favoriting, commenting, adding stations, and appearing in recently-played require a session. Two ways to authenticate:
- App password — set env vars, then
atradio login: - OAuth —
atradio login --oauth you.bsky.social, or presssin the TUI to open the sign-in modal, which completes the flow in your browser.
The session + a small profile cache are stored under ~/.config/atradio/
(also settings.toml for volume + DSP).
Keybindings (TUI)
| Key | Action |
|---|---|
↑/↓ j/k |
move selection |
←/→ Tab |
switch home tab |
1 … 5 |
tabs: Trending / Popular / Recent / Favorites / Yours |
Enter |
play the selected station |
Space |
play / pause · m mute · +/- volume (or adjust DSP) |
/ |
fuzzy station search |
f |
favorite the selected/current station |
A |
add a custom station (when signed in) |
c / a |
comments / add a comment |
n |
notifications |
p |
your profile (with playable recently-played) |
e |
equalizer & DSP settings |
s |
sign in (OAuth) / sign out |
h · ? |
home · help |
q / Esc |
quit / close overlay |
Equalizer & DSP
Press e for the full Rockbox chain: a 10-band equalizer, bass/treble tone,
crossfeed, perceptual bass, Haas surround, a compressor, and channel mode /
stereo width. Changes apply live and persist to settings.toml. DSP stays
local — the native EQ bands (32 Hz–16 kHz) differ from the web build's, so
they are not synced to your PDS.
Platform notes
- Linux: the player is exposed over MPRIS (D-Bus), so media keys and
desktop panels /
playerctlcan see now-playing and drive play/pause/stop.
Lexicon bindings
The typed fm.atradio.* records/queries in src/fm_atradio/ and
src/builder_types.rs are generated from the lexicon JSON in
packages/lexicons/lexicons/atradio via jacquard's codegen. Regenerate with: