Free radio for iOS and Android. No ads in the app, no account, no tracking.
265 German stations built in, tens of thousands more from around the world.
App Store · Google Play · Website
- 265 German stations, ready to play. Every major public and private broadcaster plus local stations from all 16 states, each with a verified stream and logo.
- The whole world. Search tens of thousands of stations by name, genre, city or country through the open radio-browser.info directory.
- Live song titles. Shows what is playing (ICY metadata) and opens the song in Apple Music, Spotify, YouTube Music or Deezer.
- Made for listening. Favorites with drag and drop, skip through favorites from the lock screen, headphones and car, a sleep timer that fades out, automatic reconnects, AirPlay.
- 14 languages. German, English, French, Spanish, Italian, Dutch, Polish, Portuguese, Turkish, Czech, Danish, Swedish, Ukrainian and Russian.
- Private by design. Favorites, history and settings stay on the device. No analytics or ad SDKs.
- Expo SDK 57, React Native 0.86 (New Architecture), Expo Router with native tabs
modules/radio-player: a small native module for live radio- iOS:
AVPlayer, lock screen and remote commands, ICY metadata viaAVPlayerItemMetadataOutput, AirPlay route picker - Android: Media3
ExoPlayerin aMediaSessionServicewith media notification and ICY metadata - Both: reconnect with backoff, stall watchdog, sleep timer with fade-out
- iOS:
- State with zustand, persisted in
expo-sqlitekey-value storage; remote data with TanStack Query
src/app/ screens (Expo Router)
src/components/ UI building blocks
src/store/ player, library and settings state
src/i18n/ translations
src/data/ bundled station catalog and country names
modules/radio-player/ native audio module (Swift + Kotlin)
scripts/stations/ builds the German station catalog
website/ radiowelle.codext.de (static, Cloudflare)
store/ store listing, screenshots and release tooling
The app uses a native module, so it runs in a development build, not in Expo Go.
bun install
bunx expo run:ios # or: bunx expo run:androidTypecheck with bunx tsc --noEmit.
src/data/stations-de.json and the logos in assets/logos/de are generated from a curated list (scripts/stations/curated.json) and radio-browser.info. Every stream is checked before it goes in.
node scripts/stations/build.mjs # refresh catalog, check streams, normalize logos
node scripts/gen-logos.mjs # regenerate src/data/logos.generated.tsA station is missing or broken? Open an issue or a pull request against curated.json.
Store listing texts, screenshot tooling and the App Store Connect / Google Play scripts live in store/.
The source code is released under the MIT License.
Station names and logos are trademarks of their respective broadcasters and are not covered by this license. They are used only to identify the stations. Broadcasters can ask for changes or removal at [email protected]. Station data comes from radio-browser.info.
Made by Codext GmbH in Germany.



