Lyrion Radio Browser Plugin

Browse and play internet radio from the community-driven Radio Browser directory, directly inside Lyrion Music Server.

v0.2.12 · LMS 8.0+ View on GitHub

Features

Search

Find stations by name, ordered by community votes. (~58k stations)

Top Stations

Most Voted and Most Played lists (top 5k).

By Tag / Genre

Drill into ~11k tags and genres.

By Country

Browse every country with stations (250+ countries).

Local Stations

Auto locate your country and display local stations.

Recently Played

Quick access to the last stations you played (configurable count, persists across restarts).

Inline metadata

Bitrate · codec · country shown on each line, with favicons.

Community-friendly

Honours every Radio Browser API guideline.

Requirements

Installation

Recommended: install from the plugin library

Radio Browser is part of the official Lyrion plugin library, so it installs straight from the LMS Plugins screen — no repository URL needed.

  1. Open the LMS web UI → Settings → Plugins.
  2. Find Radio Browser in the plugin list, tick its checkbox and click Apply.
  3. Restart Lyrion Music Server when prompted.
  4. Open the web UI → RadioRadio Browser.

When a new version is published, LMS shows an update next to the plugin — no manual download needed.

Alternative: manual install

  1. Download the latest RadioBrowser-<version>.zip from the Releases page.
  2. Locate your LMS Plugins directory (see Settings → Plugins for the exact path):
    • Linux: /var/lib/squeezeboxserver/Plugins/
    • macOS: ~/Library/Application Support/Squeezebox/Plugins/
    • Windows: C:\ProgramData\Squeezebox\Plugins\
  3. Extract so the folder lands as Plugins/RadioBrowser/.
  4. Restart Lyrion Music Server.
  5. Open the web UI → RadioRadio Browser.

The folder must be named RadioBrowser so it matches the Perl package path Plugins::RadioBrowser::Plugin declared in install.xml.

Usage

Go to Radio → Radio Browser on any player or the web UI, then choose a browsing mode:

MenuWhat it does
Search StationsType a name; results ordered by votes.
Top StationsMost Voted / Most Played, top 100.
By Tag / GenreTop 200 tags, drilling into matching stations.
By CountryAll countries; drill into stations by country code.
Recently PlayedThe last stations you played, newest first; includes a Clear action.

Select a station to play it. Each play is routed through the Radio Browser click-counter so popularity stats stay accurate.

How it respects the Radio Browser API

  1. No hardcoded mirror. A DNS round-robin lookup on all.api.radio-browser.info picks a server at random and reverse-resolves it for valid TLS; falls back to https://all.api.radio-browser.info if needed.
  2. Descriptive User-Agent. Every request sends User-Agent: LyrionRadioBrowserPlugin/1.0.
  3. UUIDs only. Stations are identified solely by stationuuid.
  4. Click tracking. Each station plays via the /m3u/url/<uuid> endpoint, which registers a click and returns an M3U pointing at the live stream.

Tag and country lists are cached for 24 hours to ease load on the directory.

Architecture

RadioBrowser/
├── install.xml   # Plugin metadata read by LMS at startup
├── Plugin.pm     # Core module (extends Slim::Plugin::OPMLBased)
└── strings.txt   # Localized UI label tokens

Plugin.pm builds on Slim::Plugin::OPMLBased so LMS renders the hierarchy natively. All HTTP is non-blocking via Slim::Networking::SimpleAsyncHTTP, and JSON is decoded with JSON::XS inside eval blocks. Failed requests degrade gracefully to a single “Unable to load” item.

SubroutineRole
initPluginResolves the mirror and registers under the Radio menu.
_resolveBaseUrlDNS round-robin with graceful fallback.
_apiGetCentral async GET + safe JSON decode.
handleFeedBuilds the top-level menu.
searchStationsName search.
topStationsTop voted / clicked.
listTags / stationsByTagTag list and drill-down.
listCountries / stationsByCountryCountry list and drill-down.
_stationsToOpmlConverts API stations into OPML audio items.
playStationClick-tracking resolve-then-play.

Troubleshooting

Changelog

v0.2.9 — 2026-06-15 (latest)

v0.2.6 — 2026-06-15

v0.2.5 — 2026-06-14

v0.2.4 — 2026-06-14

v0.2.3 — 2026-06-14

v0.2.0 — 2026-06-14

v0.1.7 — 2026-06-14

v0.1.6 — 2026-06-14

v0.1.5 — 2026-06-14

v0.1.3 — 2026-06-14

v0.1.0 — 2026-06-14

Full history in CHANGELOG.md.