RADIOCLI

Changelog

Release history for RadioCLI.

0.2.5 - 2026-10-18

Added

  • Added direct shell playback, volume controls, station-name lookup, filtered search, favorites, recents, named presets, and listening stats.
  • Added a compact now-playing view with live track metadata and --watch, readable terminal tables, JSON/plain output, and shell completion for Bash, Zsh, Fish, and PowerShell.
  • Added Linux desktop media controls for RadioCLI's station queue, metadata, playback, and volume, with radiocli media-controls auto|on|off overrides.
  • Added experimental Omarchy Quattro integration with preferred-terminal launching and desktop/session diagnostics.
  • Added experimental, opt-in Linux AirPlay with Avahi discovery, receiver selection, passcode handling, and guided dependency setup.

Changed

  • Simplified shell help around eight everyday commands, with help --all for the full reference, play to resume, and favorites, recent, and popular queues.
  • Expanded Doctor with separate terminal, desktop media, audio, Omarchy, and AirPlay readiness checks.
  • Included station presets in library backup, restore, and concurrent saves.
  • Reduced Gallop's drawing scale by 10% while preserving its proportions, centering, and animation timing.
  • Removed the twelve preview receiver scenes, retaining the original 63 styles and Ultracode default. Retired selections migrate without resetting saved data.

Fixed

  • Kept TUI playback running after a terminal crash, recovering the active station, queue, controls, and sleep timer when the terminal reopens.
  • Recovered interrupted or stalled live mpv streams without restarting paused sessions, finite recordings, or playback canceled by Stop.
  • Prevented duplicate mpv desktop media players and kept desktop controls in sync with the shared player, including live-edge resume and alarm transitions.
  • Restored alarm volume to the original Linux output after default-device changes and overlapping alarms, and kept imported alarm IDs distinct across case-insensitive and Unicode-normalizing filesystems.
  • Preserved AirPlay mute, volume, and station metadata during connection setup, added legacy RAOP password authentication, and improved connection errors.
  • Protected concurrent library saves and preserved the latest data in the safety backup before a restore. Retried temporary Windows file-replacement conflicts.
  • Preserved migrated custom-station IDs, corrected XSPF CDATA and Unicode URL imports, and restored Windows drive-path playlist imports.
  • Corrected mixed Arabic/Latin terminal layout and emoji clipping, padding, and scrolling without changing plain output or screen-reader behavior.
  • Expired future-dated provider cache entries after clock corrections and preserved valid data when migrating older caches.
  • Preserved package-manager paths during Unix updates and allowed slower PowerShell startup when opening native Windows terminals.
  • Fixed a documentation typecheck race and added a single required CI gate for platform, playback, and documentation checks. Release checks now include packed upgrades from 0.2.3 and 0.2.4 and native TUI crash recovery.

Security

  • Removed the optional AirPlay sender's vulnerable elliptic dependency, using Node's native Ed25519 while preserving pairing formats and optional installs.
  • Enabled native stream certificate verification and restricted FFmpeg network playlists that cannot safely carry TLS policy. Documented the remaining native OpenSSL numeric-IP certificate identity limitation.
  • Kept Doctor's probes read-only, bounded local service checks, and excluded receiver codes and stream credentials from AirPlay diagnostics.
  • Updated documentation and development dependencies to patched releases.

Quattro integration and Linux AirPlay remain experimental. Software playback checks do not establish physical receiver, speaker, hardware-key, or suspend/wake support; existing platform support tiers are unchanged.

0.2.4 - 2026-09-17

Added

  • Added a shared platform layer for runtime eligibility, capabilities, executable discovery, package installation, storage paths, networking, IPC, desktop helpers, and terminal launching.
  • Added first-class Node.js 22 and 24 CI coverage for macOS Apple Silicon and Intel, Ubuntu x64 and arm64, Windows x64, and Windows 11 arm64, including packed installation and native mpv IPC playback checks.
  • Added repeatable packed CLI and mpv playback checks in full FreeBSD, OpenBSD, and NetBSD guest kernels, plus explicit installation and capability guidance for additional Unix, WSL, Termux, Haiku, illumos, and AIX environments.
  • Added offline, low-bandwidth, screen-reader, reduced-motion, ASCII, limited- color, and noninteractive terminal modes with deterministic full, compact, and micro rendering coverage.
  • Added automatic HTTP/ICY metadata discovery when importing a direct station URL from the CLI or the TUI command palette.

Changed

  • Centralized native package recipes and guided setup so dry runs and executed commands use the same platform-specific definitions.
  • Expanded radiocli doctor --json with host, runtime, network, storage, terminal, playback, desktop, scheduling, and optional-feature capabilities.
  • Reorganized installation, platform, architecture, reliability, privacy, and contributor documentation as stable reference material with explicit support boundaries and troubleshooting paths.
  • Changed TUI :import to add custom stream URLs, renamed full-library recovery to :restore, and consolidated shell URL additions under radiocli import.
  • Placed newest imported stations after favorites and before recently played stations in the Library.
  • Changed resume for live radio to reload the active stream at its current live edge instead of replaying audio accumulated in mpv's paused buffer.

Fixed

  • Kept playback and the TUI usable when optional history, presence, cache, or library writes fail, while preserving recoverable data after interrupted or permission-denied writes.
  • Hardened alarm deletion, native scheduler cleanup, terminal reopening, Alarm Guard ownership, system-volume restoration, and forced-process teardown.
  • Preserved exact arguments, data locations, and supported environment selectors across macOS, Linux, BSD, and Windows child processes without forwarding unrelated shell state.
  • Improved player discovery, mpv readiness and IPC handling, provider timeouts, mirror fallback, offline cache behavior, and degraded terminal rendering.
  • Recovered ARM Linux playback from mpv audio-service initialization failures by retrying once with ALSA first, retained bounded player diagnostics, and stopped system-wide backend failures from skipping through every station.
  • Replaced stale Radio Browser hosts with live DNS service discovery and added a TLS-verified resolver fallback for temporary hostname failures without bypassing configured proxies.
  • Preserved full RGB theme colors when a terminal explicitly advertises truecolor, even when its Node.js stream reports a conservative 256-color depth; explicit 256-color, 16-color, and no-color modes remain unchanged.
  • Kept retained Search results playable after clearing the submitted query and added Ctrl+F to favorite the selected result while query input is active, without intercepting an ordinary f typed into the search text.
  • Dismissed added and removed favorite confirmations after 4.5 seconds on Overview, Now Playing, Library, Explore, Search, Nearby, and country station views.
  • Marked AirPlay controls as macOS-only, hid the unsupported Settings shortcut, and kept non-macOS users on their current screen with a direct platform notice.
  • Corrected Windows terminal launches to create independent interactive console handles and retain the intended user data location.

Security

  • Updated documentation-site dependencies to patched releases.
  • Limited child-process environments to the settings required for RadioCLI data identity and native integrations, excluding unrelated credentials and proxy secrets.
  • Made native cleanup and ownership checks fail closed when a job, helper, process, or saved state cannot be identified safely.

0.2.3 - 2026-09-07

Added

  • Added opt-in local coding-agent control through both a typed stdio MCP server and radiocli agent shell commands, covering discovery, playback, favorites, listening stats, appearance, and configurable task-completion actions.
  • Added automatic MCP setup for detected Codex, Claude Code, OpenCode, Cursor, Gemini CLI, VS Code/Copilot Agent Host, and Orca-backed runtimes, plus a portable configuration for other MCP clients.
  • Added typed MCP and voice-accessible alarm management, active ringing controls, and macOS AirPlay discovery, receiver selection, local-output switching, and ephemeral passcode submission.
  • Added radiocli update --install, package-manager-aware upgrade commands, an in-app update indicator, read-only MCP update status, and radiocli mcp repair.
  • Added Agent settings for installing or repairing MCP integrations and choosing between a visible terminal player and headless playback.
  • Added the animated Gallop receiver as the new default and a color-field Crossfade receiver.

Fixed

  • Agent playback continues to open the terminal TUI by default on every platform, while interactive setup now explains the macOS Automation prompt and offers an explicit headless opt-out. MCP guidance prevents ordinary task-completion radio actions from creating implicit goals or monitors.
  • MCP registrations now use upgrade-stable, directly executable launchers, including a shell-free Node command on Windows, and enabled registrations are repaired after an in-app or CLI update.
  • Active interactive or agent playback now yields cleanly when an alarm begins, preventing overlapping streams while preserving the alarm if TUI handoff fails.
  • Kept the Countries station-count column fixed while scrolling, added focused marquee reading for overlong country and station names across Explore, Library, and Nearby, and aligned Overview descriptions behind a compact separator-free title column.

Security

  • Agent playback uses a single-owner, authenticated loopback session with serialized commands, private discovery files, and strict isolation from active alarm sessions. Agent tools accept saved or RadioCLI-discovered station IDs rather than arbitrary stream URLs.
  • Alarm removal requires an exact ID and explicit confirmation. AirPlay receiver IDs must come from local discovery, and receiver passcodes are never persisted or echoed by agent responses.

0.2.2 - 2026-09-04

Added

  • Added one-time and IANA-timezone recurring radio alarms under Overview, with a full-screen TUI editor, station picker, next-run preview, enable/disable, delete confirmation, test tune, repair, and active ringing controls.
  • Added native background registration through macOS launchd, Windows Task Scheduler, and systemd user timers on Linux, plus radiocli alarm commands for scripting, inspection, health checks, synchronization, and playback control.
  • Added optional per-alarm wake requests where the OS supports them and a separate cross-platform Alarm Guard that prevents idle sleep until the next occurrence.
  • Added automatic ringing-control launch in the terminal captured when an alarm is synchronized, with reuse of an already-running RadioCLI TUI.
  • Added a navigable Verify alarm setup rehearsal that exercises a disposable native job, the saved terminal, authenticated controls, sleep protection, system volume, and a three-second configured-station sample before cleanup.
  • Added radiocli setup, an interactive installer that detects supported package managers, previews required playback tools, supports dry runs, guides installation, and verifies the resulting local playback configuration.
  • Added an adaptive Explore experience with a responsive Cosmo world map, height-aware station lists in micro terminals, pointer-accurate map selection, and safe scrolling marquees for long station details.
  • Added richer radiocli doctor playback diagnostics, including the resolved mpv path, discovery source, launchability, version output, and actionable launch errors. Windows discovery now covers package-manager shims, common application directories, and registered mpv installations.

Changed

  • Full library backup and restore now carries alarm definitions and latest run outcomes; native jobs, Alarm Guard state, runtime health, and local control credentials remain specific to each machine and are rebuilt by alarm synchronization.
  • macOS terminal Automation permission is requested during alarm setup, and a TUI opened by a ringing alarm now protects the active native job from startup, repair, edit, and delete reconciliation until playback ends.
  • Snooze now closes the completed ringing session, returns to Alarms, and shows the next ring time. Alarm playback temporarily unmutes and raises a low local system output to the configured alarm level on macOS, Windows, and supported Linux audio stacks, restoring the previous state afterward.
  • Alarm list and editor presentation is more concise: historical dismissal text, duplicated controls, and long scheduler caveats were removed; specific field guidance is now inline and Save is presented as a display-color action.
  • Alarm ringing controls now use Enter to transfer the station into normal interactive playback and Space to stop and snooze for ten minutes. The alarm UI and documentation identify scheduling as experimental beta functionality, explain when the terminal may close, and recommend a secondary device for critical wake-ups.
  • Playback-backend guidance now directs users to radiocli setup when local tools are missing, with updated CLI help, setup documentation, and status messages covering the guided workflow.
  • Receiver animation updates are isolated from the rest of the application, respect reduced-motion preferences, and use cached visualizer geometry and compact color runs to reduce rendering work without changing visual output.
  • Radio Browser requests now use atlas-aware timeouts and retain clearer provider failure details when station directories are slow or unavailable.

Fixed

  • Alarm lists now scroll long text only on the focused interactive row, keep selection and enabled-state markers fixed, and avoid repeating station and next-run details. Compact and micro layouts use shorter next-wake, scheduler, and beta-safety messages instead of clipping desktop-length copy.
  • Footer shortcut legends now balance actions across every available row, reserve an additional row in compact terminals when space permits, and show concise key-only hints in micro layouts instead of ending in truncated text. The version and update indicator remains independently anchored at bottom right.
  • Rapid keyboard and mouse-wheel navigation now commits the selected row immediately, cancels pending automatic station skips, and preserves alarm editor scrolling; search input keeps ownership of typed alarm-shortcut characters.
  • Player shutdown now coalesces concurrent stop requests, while delayed automatic skipping can be canceled during retuning to avoid duplicate process termination and unintended station changes.
  • Explore maps, station lists, and screen rendering now remain aligned and navigable across compact and true-micro terminal sizes, with improved map centering, cursor mapping, and visible provider errors.

Security

  • Active alarm controls and Alarm Guard ownership checks use authenticated loopback-only endpoints with machine-local private token files.

0.2.1 - 2026-08-22

Added

  • Added compact and micro layouts that keep every screen navigable in small terminal windows, including responsive Now Playing visualizers and settings.
  • Added complete library backup and restore from Settings or the :export and :import commands, with validation and an automatic safety copy before an existing library is replaced.
  • Expanded the receiver collection to 60 styles, including Sumi Ocean, Liftoff, Planetarium, Skyline, Golden Gate, Alpine, and other scenic displays.

Changed

  • Anchored the gapless square-cell listening activity grid to January, made Ultracode the default receiver, and grouped the 60 retained styles by visual family. Retired TV Static, Sunspot, Plasma, Metaballs, and Moonlit Tide with safe preference migration; rebuilt Fire and Stormfront; and replaced Sumi Mountains with the layered blue Sumi Ocean.
  • Reorganized Settings into labeled, paginated sections and tightened the full layout so the Now Playing receiver and footer use the available space more consistently.
  • Reworked mpv communication around one reusable IPC connection, keeping rapid volume changes responsive while preserving the last confirmed player state when a command fails.

Fixed

  • Restored mouse and trackpad wheel navigation for overflowing menus and lists while keeping mouse reporting screen-aware so native terminal scrollback stays available elsewhere. Added a Settings opt-out and legacy X10 mouse fallback.
  • Protected library and cache writes from concurrent RadioCLI processes, and recovered unfinished listening sessions from their last saved heartbeat.
  • Made Radio Browser searches and cached station lists more resilient to slow, stale, or partially unavailable directory mirrors.
  • Added a second-press confirmation for q and Ctrl+C so an accidental key press does not stop playback and exit.

Security

  • Sanitized terminal control and bidirectional text sequences from external station data, and tightened permissions on locally stored library files.

0.2.0 - 2026-07-08

Added

  • Added update checks for npm releases, including a radiocli update command, a :update command, and a Settings entry that reports the latest available version and copies or runs the right npm or Homebrew update command.
  • Added lazy loading for long country station lists and search results, so deeper directories continue loading as you scroll instead of stopping at the first page.
  • Added mouse wheel scrolling across station, country, map, nearby, explore, search, and library lists.

Changed

  • The footer now shows the installed RadioCLI version, and Settings includes the current version beside update status.
  • Retuning now keeps the playback footer focused on the station currently buffering, and mpv playback stays in loading until audio has actually started.

0.1.9 - 2026-07-03

Changed

  • Nearby station discovery is now enabled by default for new libraries, and the l shortcut is limited to Overview, Nearby, and Settings so country lists keep normal letter navigation.
  • Favorite changes from Library now appear in the footer message row instead of displacing the main page status.
  • The listening stats activity graph now uses solid truecolor cell backgrounds with tighter rendering on short terminals and fewer split color runs.

Fixed

  • Nearby keeps showing the last loaded station list when location lookup is turned off or temporarily unavailable.
  • Long country names are truncated to one terminal row so dense country lists do not wrap into nearby entries.
  • Pressing b from a country station list now returns to Countries before falling back to Overview.

0.1.8 - 2026-07-02

Changed

  • Replaced the classic equalizer receiver style with Ultracode, a centered color-ripple display that follows the active display color; saved equalizer preferences migrate to ultracode.
  • The listening stats activity graph now renders as a calendar-year grid with larger contribution cells and clearer month labels when the terminal has room.
  • Muted UI text now uses truecolor neutrals instead of terminal gray, making secondary labels more readable across dark terminal palettes.

Fixed

  • Stale continuous listening sessions are capped before splitting them across days so one long-unclosed playback session cannot dominate listening totals.
  • Receiver visualizer pulses now reset when an active Ultracode view opens but keep advancing smoothly during normal playback.

0.1.7 - 2026-06-29

Changed

  • Search results can now be navigated with Up / Down while editing the search query; search-history recall remains available with Ctrl+Up / Ctrl+Down.
  • The listening stats activity heatmap now renders day cells as square markers and uses a capped contribution scale so one unusually long listening day does not flatten the rest of the Less/More color range.

0.1.6 - 2026-06-17

Added

  • Added VLC (cvlc/vlc) as a third playback-only backend so installs without mpv or ffplay still play audio.
  • Added a Help screen (?) listing every keybinding and : command, plus command-name tab completion in the command palette.
  • Added persisted ICY track history shown on Now Playing (d) and up/down recall of recent search queries in the search box.
  • Added opt-in resume of the most recent station on launch.
  • Added O to open the station homepage and y to copy its stream URL.
  • Added ASCII-safe display, transparent background (also honoring NO_COLOR), and reduce-motion settings for terminal and low-power compatibility.
  • Added a best-effort Radio Browser upvote when favoriting a station.
  • Added a radiocli version command (and --version / -v).
  • Added :doctor, :help, :resume, :ascii, :motion, and :background command-palette entries.

Changed

  • Playback binary detection now probes common install locations (Homebrew, Scoop, WinGet, Chocolatey, and the VLC app bundle) when a tool is not on PATH, so GUI-launched terminals still find mpv/ffplay/VLC.
  • The Radio Browser User-Agent now reports the installed package version.

0.1.5 - 2026-05-31

Fixed

  • Moved the macOS AirPlay sender bridge to optional npm dependencies so Windows and Linux installs do not fail while compiling an AirPlay-only native module.

0.1.4 - 2026-05-31

Added

  • Added a dedicated AirPlay receiver picker and AirPlay Code screen for passcode-protected receivers.

Changed

  • Replaced silent AirPlay target cycling with a dedicated receiver picker in Settings, clearer Audio output labels, immediate output switching while a station is playing, and explicit AirPlay receiver selection before tuning.
  • AirPlay is now an explicit current-session output instead of a persisted default. Restarting RadioCLI returns to automatic local playback while keeping the last receiver available for the next manual AirPlay switch.
  • Bundled the AirPlay sender bridge and updated the Homebrew formula template to install FFmpeg, so macOS users do not need manual AirPlay package setup.

Fixed

  • Fixed same-session AirPlay station switching so the worker retunes the active receiver, resets its sender buffer, and keeps the UI in buffering until the new stream is actually ready.
  • Fixed AirPlay output failures so skip broken streams no longer walks through the library when the receiver is missing, off, local, or unavailable.
  • Fixed library selection after playing a station that moves to the top of recents.
  • Patched the bundled AirPlay sender for modern macOS AirPlay 2 receivers that return digest-protected setup responses or empty first setup bodies.

0.1.3 - 2026-05-30

Added

  • Experimental macOS AirPlay playback backend with Bonjour receiver discovery, Settings target selection, :airplay-code passcode entry, worker-based stream forwarding, and active receiver labels in the playback footer.

Changed

  • ffplay is now treated as a playback-only fallback: the UI labels it as ffplay fallback, radiocli doctor reports limited controls, and unsupported pause, mute, volume, and media-key actions explain that mpv is required.

Security

  • AirPlay sender support is worker-isolated and blocks high-risk sender dependency advisories before the backend is advertised.
  • Hardened AirPlay discovery and worker messaging with bounded payloads, sanitized receiver data, passcode validation, and worker shutdown on startup timeout.

0.1.2 - 2026-05-30

Fixed

  • Ignored Kitty keyboard release events so Ghostty users do not skip multiple tabs from one left/right arrow key press.
  • Ignored Kitty release events for raw media-key transport sequences so learned or native media keys do not double-fire on key release.

0.1.1 - 2026-05-30

Initial public release.

Added

  • A square braille spinner animates to the left of the station name in the live playback footer while a station is buffering.
  • Ink-based terminal UI with overview, now playing, library, explore, search, countries, world map, nearby, stats, and settings screens.
  • Radio Browser provider with mirror fallback, durable cache, and tune resolution, plus an experimental, opt-in Radio Garden provider.
  • mpv playback controls for readiness checks, ICY metadata polling, volume, pause, and mute, with ffplay playback fallback, sleep timer, tune timeouts, and skip-broken-stream behavior, using Unix sockets on macOS/Linux and named pipes on native Windows.
  • Receiver-style Now Playing screen with 50 selectable visualizers and zero-signal frames whenever playback is idle, paused, stopped, or not backend-ready.
  • Explore map: a braille world map beside the live station list with WASD movement, click-to-place mouse support, and a cached geotagged station atlas ranked by distance.
  • Local-first library: recents, favorites, imports, listening activity, settings, learned media keys, and provider cache stored as JSON on your machine.
  • Playlist import/export for .m3u, .pls, and .xspf.
  • Listening stats with a 52-week local-calendar contribution graph, sessions, streaks, active days, and total hours listened.
  • radiocli doctor to report local playback readiness and print OS-specific setup guidance.
  • Published Homebrew tap formula for brew install ciphore/tap/radiocli.
  • Documented native Linux and Windows install paths, with winget guidance for Node.js, mpv, and optional FFmpeg on Windows.
  • Documented pnpm and Bun as optional npm-package install clients.

Changed

  • Tightened the Now Playing panel below the receiver: collapsed the stream tech/tags, track metadata, and backend/volume rows into two compact lines so more room goes to the visualizer.

On this page