Privacy-First Internet Radio and Podcast Player
RadioPod plays internet radio and podcasts. It is a simple privacy-first alternative to the many internet radio and podcast apps available. You can find stations in the community-run Radio-Browser database, follow podcasts from the open Podcast Index, group them into playlists, and listen on your computer, on your phone, or in the car through Apple CarPlay or Android Auto, sharing the same playlists.
Your station library and your playlists are stored locally by default. Once you are ready they can be encrypted and privately stored in your own personal online data store (Pod) within a Data Vault hosted by a Solid Server of your choice. Pod-stored data is available on any of your devices to share your station library and playlists while being protected against server administrator access and server breaches.
Playlists can be imported and exported using the M3U or PLS open formats that every other radio player reads and writes, and podcasts using OPML, which every podcast app reads and writes.
Privacy-first: if you decide to move your app data to the cloud to share it across all your devices or to share it with other users of your choosing then your data is encrypted for secure and private storage in your Pod on a Solid server of your choice. You choose, not us.
Solid Pods are a new approach to handling your personal data on the World Wide Web and is the latest innovation from the inventor of the WWW, Sir Tim Berners-Lee. Obtain a Pod for yourself on any Solid server and link it to your app. You do not need a Solid Pod to use this app in local-only mode. If you would like to register for a new Pod on a Solid server, choose a server and tap the Register button on the Login screen (tap Not Logged In in the footer or in the top left menu drawer). You will be prompted for an email address (username), a password, and a pod name. On logging in to your Pod from your app for the first time you will be asked for a security key to protect your data on the server.
The app is supported by Togaware and implemented by Graham Williams using Flutter’s SolidUI package for cross platform development.
We make this project available for free so if you appreciate the app then please show some ❤️ and tap on the star at GitHub to support our work. See the AU Solid Community showcase for many more apps using the Solid ecosystem.
You can run the app inside your browser at solidcommunity.au to give it a quick try and then you can install the app from different repositories including:
See the Install Guide for installation instructions for any platform.
Visit our privacy statement.
RadioPod is built to protect your privacy. The app maintains a list of radio stations you listen to and how they may be optionally organised into playlists of your choosing. In local-only mode (default) all data remains on your device. When you Login to your Solid server hosting your Pod, your data is stored in your Pod and is accessible to your app running on any device through your security key. The security key is used to decrypt the data on your device so it is not accessible by anyone on the server. Your Solid server of choice may collect your login timestamp and other standard server logging of meta data.
lib/services/podcast_index.dart. For Radio-Browser: It is sent
your search text, the stream address you typed, or the station’s
Radio-Browser id, and the app name and versions (e.g., RadioPod
1.1.21). It is not sent your WebID, your Pod address, nor your
library. The relevant code can be found in
lib/services/radio_browser.dart.Android Auto starts the app on its own, before any Pod login can happen, and will not wait for one. So an unencrypted copy of your station names and stream addresses is kept in the app’s private storage on the device for the car to browse. It holds no more than a playlist file would, never your security key or WebID, and never leaves the device. Settings has a button to clear it.
Desktop playback on GNU/Linux and Windows goes through libmpv, since just_audio has no native implementation there. On Debian and Ubuntu:
sudo apt install libmpv-dev mpv
The snap bundles libmpv, so the prerequisite above does not apply to
it. It does need one interface connected by hand, because
password-manager-service is not connected automatically:
sudo snap connect radiopod:password-manager-service
Without that the app starts but a Pod login stops with Cannot access secure storage, since the security key is held in your keyring and strict confinement blocks the app from reaching it. Tapping Continue to run without a Pod is unaffected.
RadioPod reads and writes the two formats internet radio has always used.
M3U (and the UTF-8 .m3u8 variant) pairs a name with a URL:
#EXTM3U
#EXTINF:-1,ABC Classic
https://live-radio01.mediahubaustralia.com/2FMW/mp3/
PLS is an INI file with numbered entries:
[playlist]
File1=https://live-radio01.mediahubaustralia.com/2FMW/mp3/
Title1=ABC Classic
Length1=-1
NumberOfEntries=1
Version=2
On import the file’s own name becomes the playlist name, and a station whose stream address you already have is reused rather than duplicated, so re-importing a file grows the playlist but not the library. A plain M3U that is nothing but a list of URLs is read too — the station’s host name stands in for a missing title.
flutter pub get
flutter analyze
flutter test
flutter run -d linux
The app is built from the same template as the other apps in the
suite. lib/main.dart, lib/app.dart and lib/app_scaffold.dart
carry no app-specific logic beyond configuration.
Here we walk through RadioPod on GNU/Linux. Every screen looks the same on the other desktops. For mobile devices the app will be laid out for the narrower window as required. As with all solidui apps, the screen size is remebered on restarting the app.

You can choose your Solid server of choice (where you will host your data) and Login, or you can tap Continue to use RadioPod without a Solid server and so simply save your station lists locally. The Continue option is very much a supported way to run the app — your stations and playlists are then kept on the device and nothing is sent anywhere. You do not need a Solid Pod to use this app in local-only mode. You can log in later to a Solid server and copy what you have collected up to your Pod.

You can search the community-run Radio-Browser database by station
name, by genre, or by location, which matches the country or the
region a station is listed under. Put @ before a place to combine it
with other words: @sydney news finds news stations in Sydney, and a
place of several words goes in quotes, as in @"new york" jazz. The
screen explains what leaves the device, because this is the one place
in RadioPod where any data does leave the app to another service. What
is shared is your search text and the name of the app, and nothing
else.

Results carry the station’s own logo, country, codec and bitrate. Radio-Browser holds a record per submission, so one station can be listed many times over; RadioPod collapses those to one row per stream address. A tick marks a station already in your library, and the plus adds a new one. Tapping any row plays that station straight away, so you can listen before deciding to keep it. The ⓘ button shows what is known about a result, such as its homepage, genre and audio format, and for a podcast what it is about and how many episodes it has, with Save to hand.

The library of stations is presented in your order rather than alphabetical. You can drag the handle on the right to arrange it, and that order is what an export writes and what Android Auto lists in the car. The filter box narrows a long list.
The status bar along the bottom includes a link to your Solid server and whether you are logged in and if the security key (used to encrypt data in your Pod) is unlocked.

Tap a row/station to play it. The station on air is simply the highlighted row. Its logo becomes a stop button, and its second line carries the song title. Here the song title is Pink Floyd’s Us And Them. This replaces the country and bitrate that are shown for an idle station. Tap it again to stop, and the logo comes back.
Many streams do not have a track announcement so the station’s own details remain on display when it is playing.
Every station row has an ⓘ button for operations on the station entry. On a podcast it opens the Episodes page, which has the podcast’s Properties. The ⓘ on the Playlists page does the same. Swipe a row to the left to delete it, or on a wider screen use the delete button beside the ⓘ.

Information shows everything known about a station, and while it is on air the whole title of what is playing. It also allows you to rename the station, give it a logo, and say what should happen when its stream ends.
Radio-Browser names sometimes contain transmitter details and other information so you can rename the stations to suit yourself. The default station logo can be downloaded from the address the station advertises, or you can choose a logo for yourself. In the screenshot here we have chosen our own logo. When there is no default logo the button is greyed out. Either way, the logo is stored with the station information locally or in your Pod.
The option to reconnect when the stream ends applies when, for example, a continuously streaming station’s connection drops, rather than a news bulletin ends. For the former case you may like to reconnect so the station remains on air. The Australian ABC requires this setting due to how they have configured their audio streaming. The default is to move to the next station when a stream ends. For example, NPR station streams a news bulletin so that when it finishes we move on to the next listed station.

You can group stations into playlists however you like. A playlist holds references, not copies, so a station renamed once is renamed everywhere, and the same station can sit in as many playlists as you please. These are also the folders you browse on a car’s infotainment system.
Manage playlists, beside the filter at the top of the page, opens a grid with a row for every station and podcast in your library and a column for every playlist. Tick a box to put a station in that playlist, untick it to take it out. The grid starts with the page’s filter, so typing a name first narrows it to the stations you are sorting. The filter itself keeps the playlists whose name matches, or that hold a matching station.

RadioPod reads and writes M3U, M3U8 and PLS. These are the plain text formats internet radio uses and other players can read and export. The Import adds the stations to your library and groups them into a playlist named with the name of the file. Any stream address you already have is reused rather than duplicated. The Export saves the whole library or a single playlist into a text file with a format that can be read by other apps.
Podcasts are moved as OPML instead, the subscription list every podcast app exports. The Import adds any podcast you do not already have to the end of your Stations and fetches its episodes. The Export saves all your podcasts in a single file. Only the list of podcasts moves; what you have listened to stays in RadioPod.

Settings identifies where your data is kept and what that means. Data is kept eiher locally or in your secure and private Solid Pod. The settins includes information bout the privacy of your data noting that an unencrypted copy of station names and stream addresses stays on the device so Android Auto and Apple Car Play can browse it before any login is required. There is a button to clear this data whenever you like.



Android Auto sees RadioPod as a media app through a
MediaBrowserService, provided by the
audio_service package. The
browse tree shown in-car is two levels deep, which is what Android’s
media app guidelines ask for:
RadioPod
├── <each of your playlists>
│ └── the stations in it, in playlist order
└── All Stations
└── every saved station, alphabetically
Choosing a station sets the surrounding folder as the queue, so Next and Previous on the steering wheel move through the list that was actually being browsed. Live radio has no timeline, so RadioPod offers Stop rather than Pause and no seek controls.
Apple CarPlay is supported natively from your connected iPhone. To begin tap on the RadioPod button to open the app.

You will see the station list and the currently playing station is at the top right.


Here is the playing-now screen.

You can also navigate through the playlists.


Copyright (C) 2026, Togaware Pty Ltd.
Licensed under the GNU General Public License, Version 3.