Discover and listen to 50,000+ internet radio stations worldwide.
The all-in-one radio player for community radio, indie stations, and live streams.
Works on every device — no ads, no sign-up, completely free.
50,000+ stations from a community-curated global directory
Works on all platforms: Web, Windows, macOS, Linux, iOS, Android, Chrome Extension
Community radio, indie stations, talk shows, live streams — all genres
Free and open source — no ads, no tracking, no account required
No station selected
Loading stations…
Searching stations…
Error loading stations. Please try again.
Create New Station List
v1.0.0
Open Source internet-radio app for discovering, playing, organising and sharing stations from around the world.
Features
50,000+ stations from a community-curated global directory
Favourites & custom lists — saved locally on your device, never sent anywhere
Share lists via private link — recipient imports with one click, no account needed
Live now-playing info for stations that publish it
Install on phone, desktop, or as a browser extension
Background playback with lock-screen and Bluetooth-headphone controls
Installs like a native app — opens instantly from your home screen or dock
No ads, no cookies, no tracking beyond opt-out-able anonymous usage counts
Station directory
Station data comes from RadioDock's own curated database (stations.radiodock.app) — de-duplicated, with corrected logos and hand-fixes layered on top of the community-run Radio Browser directory it is built from. If our server is unreachable the app automatically falls back to Radio Browser directly, so search never depends on us. Queries aren't stored; results aren't retained.
Station logos are served only from our own origin (stations.radiodock.app/logos/…), looked up by station ID. The app never loads favicons from third-party websites, so opening it doesn't leak your IP to dozens of external hosts before you press play — logos degrade to a plain initials chip if unavailable.
"Now Playing" metadata
Most radio servers don't send a CORS header, so a browser can't read their stream metadata directly. RadioDock routes only the stream URL through a small open-source proxy (source) which:
parses the inline ICY metadata blocks Shoutcast / Icecast servers embed between audio frames,
or hits the station's JSON status endpoint (Airtime Pro, Radio King, NTS, etc.) where applicable,
and returns artist + title as JSON, cached for ~15 s.
For HLS streams the parsing happens client-side: hls.js exposes ID3 frames as the stream plays, no proxy involved.
Share-link encoding
When you share a list, the stations are serialised to JSON, gzipped, and base64url-encoded into the URL fragment (the bit after #). Fragments are never sent to the server by browsers, so neither GitHub Pages logs nor any analytics ever see the payload. The recipient's browser decodes and imports locally.
Tech stack
Vanilla JS + Vite — no framework, ~50 KB gzipped main bundle
IndexedDB for favourites, custom lists, prefs (everything stays on your device)
hls.js for HLS streams, native <audio> for ICY/MP3/AAC
MediaSession API for lock-screen controls + Bluetooth headphone buttons
Service Worker for instant repeat loads + PWA install
RadioDock Stations API + logo CDN (self-hosted, Hetzner) — curated data source and single-origin station logos, with Radio Browser as an automatic fallback
Self-hosted Umami for anonymous, cookieless usage analytics — opt-out toggle on legal page
Hosted on GitHub Pages · Stations API on Hetzner · metadata proxy on Hetzner + Render (fallback)
Data source beta
Where station search & info are fetched from. Auto uses the RadioDock Stations API with Radio Browser as an automatic fallback — leave it there unless you're debugging.