Review 5 Linux Podcast Client Applications, 2022-Feb

This post reviews 5 podcast client applications in Linux: Vocal, CPod, Poddr, gPodder and castero.

Intro

In this post I’ll be sharing my experiences reviewing/testing some podcast client applications in Linux.

I will focus on these 5:

  1. Vocal
  2. CPod
  3. Poddr
  4. gPodder
  5. castero

and only briefly touch upon another 3:

  1. Spotify
  2. nuclear
  3. cantata

These apparently do not constitute an exhaustive list. There are many others that I won’t cover. And even for those I do I probably won’t cover every aspects of the application.

All the applications I review have a native Linux version, but some of them are also available in Windows and MacOS. The 5 I focus on are all open source applications.

All but one of them are GUI applications, with the only exception castero being a TUI one. This makes the comparison a bit tricky for some aspects like user interfaces. So take the final scoring and verdicts with a grain of salt.

I also need to confess that I’m not a heavy podcast user. I only recently started to grow interests in this form of media (that’s why I’m doing the review in the first place, as an attempt to find myself a handy tool to use), and I only tested all these applications for a very short amount of time. There are likely some features/issues that will only emerge after a long-term usage, I might come back and a give another post if such things do catch my attention.

At the end of the review, I’d like to give the 5 applications a score from these aspects:

  1. UI and appearances.
  2. Easy of use.
  3. Configurability and extensibility.
  4. Richness of features.
  5. An overall score.

Lastly, the OS I use for the review/test is Manjaro Linux, which in general tend to offer by its official repository as well as the AUR more recent versions of applications (compared with, for instance, Ubuntu). So to make it more replicable, I will try to use a portable format (AppImage) when possible, but I will always pick the latest release.

Reviewed Podcast Clients

Vocal

Some basic info:

  • Web page: https://vocalproject.net/.
  • My installation method: from Manjaro repository (pacman -S vocal).
  • Version: 2.4.2.
  • Config loc: ~/.config/vocal/vocal.db, not customizable.
  • Local storage loc: ~/.local/share/vocal/, not customizable.

Features

Vocal has a build-in explorer where you can browse the top podcasts in the iTunes Store (see Figure 1).

Figure 1. Top 100 Podcasts in Vocal.

Clicking on the plus sign will subscribe to that podcast, and the light-bulb icon displays some details.

Search function (see Figure 2) is also available, and you can search within:

  • Podcasts from Your Library
  • Episodes from Your Library
  • iTunes Podcast Results
Figure 2. Search for podcasts in Vocal.

Once you have subscribed to some podcasts, you can checkout whether there are new episodes from your subscriptions (see Figure 3).

Figure 3. New episodes in Vocal.

The application comes with a built-in player. Below Figure 4 shows the interface of the podcast list, where one of the episodes is been played. More information is shown in the pane on the right hand side.

Figure 4. Main podcast play interface of Vocal.

Another interesting point is that many softwares have a status bar/message bar at the bottom. But Vocal uses the title bar for this purpose. E.g. When you subscribe to a new podcast, the title bar will display the message of "Adding new podcast: https://xxx".

Some other features:

  • Resume playing from last location.
  • Import/Export subscriptions (via OPML or XML formats).
  • Add subscription via feed URL.

Issues

Some HTML tags are not parsed. This can be seen in Figure 4.

Very limited configurations. You can choose to:

  • use dark/light themes,
  • automatically download new episodes or not,
  • keep the library clean or not (what does this mean?),
  • show podcast names below cover art or not,
  • choose the number of seconds to skip back/forth,
  • choose the region of iTunes store.

And that’s pretty much it.

There is a play queue, but no dedicated interface for that. The only interface for the play queue is a drop-down menu behind a button click. And it is pretty cumbersome to edit/modify the queue once the queue is getting long.

Downloaded files are saved using time stamp as file names, e.g. 2019-07-26T02_49_16-07_00.mp3, making it difficult to infer the contents of the files.

Adding new feeds seem to take a bit longer than it should (about 8-10 seconds in my tests).

I also encountered 3 crashes/freezes during my tests (which was only about 2 hours in total, for Vocal alone): crashed once when searching something, froze once on clicking the "details" button in the search result, and another freeze on clicking the close button of the application.

Can’t configure the download folder.

Light theme doesn’t work, or maybe it is just obeying the system-wide dark theme, which is OK.

Export subscriptions only exports 1 of the subscriptions to the target OPML file.

Short summary

  • Minimalistic and clean.
  • Good podcast discoverability facilitated by a built-in explorer and search function.
  • Limited customizability.
  • Not very stable and responsive.

CPod

Some basic info:

  • Web page: https://github.com/z————-/CPod.
  • My installation method: downloaded AppImage release.
  • Version: 1.28.0.
  • Config loc: ~/.config/cumulonimbus/, not custmoizable.
  • Local storage loc: default to ~/.config/cumulonimbus/offline_episodes/, custmoizable.

Features

In CPod, one can search for podcasts in the Explore tab, see Figure 5.

Figure 5. Search for podcasts in CPod.

In the Explore tab, there is a drop-down menu to select language (default to US, as shown in above figure). But searching for Chinese words does work without language switching (see Figure 6).

Figure 6. Search by Chinese in CPod.

Fetching and displaying details about search results are also notably more responsive than in Vocal.

In the Home tab, one can filter episodes by:

  • length
  • date
  • download status
  • play progress

There is a dedicated Queue tab, however, this version of CPod I got has a bug that renders the queue never being populated.

The built-in player of CPod allows pretty fine-grained play speed control, with 1 decimal place speed up/slow down factor from 0.5 to 4.0.

The downloading status, if any, shows at the bottom. Once an episode is downloaded, the download icon changes to from a downward arrow to a tick-marker (see Figure 7).

Figure 7. Episode lists, download status, in CPod.

Downloaded audio files are named with their podcast title followed by episode title, a more readable and informative format.

Some other features:

  • 3 levels of playback skip forward/backward steps (in seconds), all configurable.
  • Sync subscriptions via gpodder.net.
  • Export/Import in OPML format.
  • Wave form Visualizer (see Figure 7).
  • Keyboard shortcuts, including the ability to use global media keys.
  • Resume playing from last location.
  • Add subscription via feed URL.

Issues

I found it a bit difficult to go back from within the podcast episode list: after you have scrolled way down the list, you will have to scroll up to the very top to see the "x" button, upon clicking which will get you back to the upper level. It would be nicer to always show the vertical menu bar at the left side of the window, or add some back/forward navigation buttons somewhere.

This version of CPod has a bug that the Queue tab is always empty for some reason. But the next one does play when the previous finishes. It is noticed that a fix has been merged into the code base , so the empty queue problem might be fixed in the next release.

No pop-up tool-tips from the buttons.

Episodes in the Home tab can be filtered, but no sorting methods available.

Short summary

  • Modern looking flat design interface.
  • Good balance between simplicity and customizability.
  • Needs some minor improvement in in-app navigation.

Poddr

Some basic info:

  • Web page: https://sn8z.github.io/Poddr/.
  • My installation method: downloaded AppImage release.
  • Version: 2.0.0.
  • Config loc: ~/.config/poddr, not configurable.
  • Local storage loc: ~/Downloads/Poddr/, not configurable.

Features

On the first launch of Poddr, you will be greeted with this Toplists tab showing the Top 50 podcasts of the day (see Figure 8).

Figure 8. Top podcast list of the day in Poddr.

At the top of the Toplists tab, there is a drop-down menu for category filtering, with categories of Arts, Comedy, Education etc.. Next to this is a drop-down menu for region selection.

Note that Poddr uses the term "Favourites" to mean subscription. So adding to "Favourites" means subscribing to a podcast.

Aesthetics seems to be a key concern of Poddr. It offers multiple color themes: Dark, Light, Carbon, Blueness, Marine and Pinkish (see Figure 8). And the highlight region color is even configurable from a color-picker.

Figure 9. Multiple color themes of Poddr.

Some other features:

  • Keyboard shortcuts available but not configurable.
  • Sort episodes by date in ascending/descending orders.
  • Add subscription via feed URL.
  • Built-in player.

Issues

Adding to favorites is slow in response (it doesn’t freeze the UI though). Loading new episodes also feels notably slower than Vocal and CPod.

The search string has to be exact (not requiring case matches though). So searching the term "numberphile" gives the desired result, but "numberphil" (without the trailing "e") won’t. See Figure 10.

Figure 10. Search results using incomplete (left) and complete term (right) in Poddr.

Downloading frequently fails, but I’m not sure how much of this is my internet. During the about hour long test, I clicked on 8 different episodes to download, but only 1 got successfully downloaded.

The font sizes at various places may need some adjustments. The font size in the search bar is too big (Figure 10). The texts for the global tabs (Toplists, Search, Favourites and Settings) on the left edge of the application window feels too small in comparison.

The Ctrl+e hotkey for toggling side bar is not working.

Quitting the application and re-opening does resume playing, but jumping between episodes doesn’t.

Not enough configuration options. The existing options are all about appearance tweaks, and virtually no option is for changing the functionalities of the application.

No subscription syncing nor import/export functionalities.

Short summary

  • Very polished UI.
  • Very limited customizability other than color theme changes.
  • Good podcast discoverability.
  • Not very responsive or reliable.

gPodder

Some basic info:

  • Web page: https://gpodder.github.io/.
  • My installation method: from Manjaro repository (pacman -S gpodder).
  • Version: 3.10.21.
  • Config loc: ~/gPodder/.
  • Local storage loc: ~/gPodder/Downloads, both configurable using environment variables (GPODDER_HOME and GPODDER_DOWNLOAD_DIR).

Features

On first launch of gPodder, a Getting started dialog offers you 3 methods of adding new podcasts (see Figure 11).

Figure 11. Getting started dialog of gPodder.

After adding new podcasts, a pop-up window will show all the new episodes discovered, allowing you select the ones to download. This window can also be manually opened by clicking the Check for new episodes button at the bottom of the Podcasts list (see Figure 12). If the scan finds anything, they will be prompted for download.

Figure 12. Podcast and episode lists in gPodder.

There is a separate tab listing downloading progress (See Figure 13). Downloads are resumable, and a system notification is shown when it finishes.

Figure 13. Download list in gPodder.

Unlike Vocal, CPod and Poddr, gPoddr has no built-in player. Playing a podcast will have to use another video/audio player from the operating system. Note that double clicking on an episode only opens the detail description pane shown at bottom (see Figure 12). To actually play it, one has to right click, then select Play. Then the player of choice (configurable in Preferences) will open. During my tests, both Media Player and VLC open almost instantly upon playing a downloaded podcast, the experience is as seamless as a built-in player.

If the episode has not been downloaded, the Play option in the context menu is replaced with Stream. To use streaming, you have to use a media player that supports this, for instance, VLC will do, but Media Player won’t.

Resumed play can be achieved. But since gPodder doesn’t have a built-in player, this has to be done using an extension: Go to the Extensions dialog and toggle on Enqueu/Resume in media players. Then in the episode list, right click on an episode , in the pop-up context menu, select Enqueue in, then select the media player, E.g. VLC (see Figure 12). Then the next time you play this episode, the media player (VLC in this case) will prompt you to resume from the leftover place. Note that the time-out for this prompt may be quite short, so it is quite easy to miss it. This technically does achieve resuming, but not as convenient.

Another notable feature of gPodder is that this thing is very customizable.

For instance, it allows you to customize the interval of new episode checks, and the actions to do when new episodes are found (such as automatic downloading or adding to the download list only).

One can choose to automatically delete played episodes after a given number of days, or delete manually.

There is also an extension system, with a long list of extensions available (see Figure 14).

Figure 14. Extension list in gPodder.

For instance, some extensions enable automatic format conversion of the downloaded video/audio files, normalization of volume, filename renaming, downloading of subtitles for TED Talks etc.. And the ability to run external command upon download completion basically opens a whole new world of possibilities.

Some other features:

  • Sync to gpodder.net.
  • Export/Import in OPML format.
  • Add subscription via feed URL.
  • Sync to device functionality (not tested and I don’t know exactly what it means).

Issues

In the Find new podcasts dialog, no details about the listed podcasts are given, only the titles and feed URLs. Searched results from gpodder.net often give feeds that can’t be added (outdated or what?).

The View-Downloaded episodes function doesn’t work.

Less convenient to build the play queue without a built-in player.

Short summary

  • More traditional UI, but responsive.
  • Very custmoizable and extensible.
  • No built-in player, needs to work with an external media player.

castero

Some basic info:

  • Web page: https://github.com/xgi/castero.
  • My installation method: from AUR (yay -S castero).
  • Version: 0.9.4.
  • Config loc: ~/.config/castero/castero.conf, not custmoizable.
  • Local storage loc: ~/.local/share/castero/, customizable.

Features

First of all, this is a TUI client running in the terminal, so we have to evaluate it somewhat differently than those GUI ones. One big difference is that we typically don’t interact with a TUI application with a mouse, but with the keyboard only. All hotkeys of castero are customizable via the config file (in ini format).

It is possible to use the castero --import command to import subscriptions in OPML format. See Figure 15.

Figure 15. Import subscriptions to castero.

Once successfully imported, launching castero will list all the imported subscriptions on the left pane, the episodes of the 1st highlighted subscription in the mid pane, and Metadata of the podcast in the right pane (see Figure 16).

Figure 16. Main interface of castero.

At the bottom it is displaying the help message of "Press h for help", and doing so will show the hotkey list (See Figure 17). This list pretty much covers all the functionalities of castero.

Figure 17. Help menu of castero.

To add a new subscription, press a, and paste the feed URL at the prompt.

Hitting ENTER on an episode will start playing (by streaming), using either VLC or MPV. So you need to have at least one of them installed on the system. Note that if it is a video podcast, only the audio will be played. However, playback does resume from last position, even after switching between episodes, or re-launching the program.

Hitting s on an episode will start downloading. The progress will be displayed at the bottom message bar (see Figure xxx). After downloading, a [D] label will be preceded before the episode title. The Metadata pane will also indicates this in its "Downloaded" section.

Hitting SPACE will add an episode to the queue. The queue can be viewed by hitting 2 to change to Queue-view. Hitting SPACE on a podcast will add all episodes in the podcast list to the queue.

There are also 5 different layouts, which can be toggled by the number keys 1 to 5:

  1. Default, the 3-column layout as in Figure xxx.
  2. Queue view.
  3. 2-column view, without the Metadata pane.
  4. 2-column view, downloaded episodes on the left, and Metadata on the right.
  5. 2-column view, all episodes from all subscriptions on the left, and Metadata on the right.

Some other features:

  • Downloaded files are saved with meaningful file names, in mp3 format.
  • Data saved in SQlite database.

Issues

There is no podcast discovery mechanism built within castero (and it probably didn’t meant to do so in the first place), so you have to look for them somewhere else.

Can’t tell the length of the episodes unless the episode stream has been started or downloaded.

No way to adjust the column widths.

Short summary

  • Minimalistic and efficient CLI client.
  • No podcast discovery mechanism, no built-in player.

A few others, very briefly

  • Cantata: This is a media player with online services including podcasts, so technically one can use it as a podcast client. It is feature rich, with decent UI built with Qt and very customizable. I kind of regret not having tested this one a bit earlier.
  • Spotify: very popular proprietary software for music streaming, and also supports podcasts. But, it saves even the free podcasts in a proprietary format which can not be opened by players other than Spotify itself.
  • nuclear: this is also a media player/streamer with podcast supports, but it seems to be in the grey area in terms of copyright issues. The maximum number of episodes in a podcast seems to be restricted to 50.

Summary and Verdicts

Here is a brief summary of the 5 podcast clients reviewed by an amateur user who only just about to enter the realm:

  • Poddr spends much efforts on polishing its appearance, but largely neglects responsiveness and customization.
  • gPodder seems to lean towards the opposite end instead. It doesn’t mean that its interface is ugly, though. The inconvenience in building a play queue is a bigger killer issue for me personally.
  • Vocal is closer to Poddr in this appearance v.s. richness-of-features spectrum. It doesn’t appear to be very stable, at least during my tests.
  • CPod strikes a good balance in my opinion.
  • castero: serves a good candidate for a back-up solution, when you have built a good collection of subscriptions and want to have a distraction-free playing-in-the-background experience.

So, I’ll probably keep CPod and castero on my system and continue using them for a longer period of time, in the mean while keep checking out other alternatives if they appeal attractive enough for me.

Lastly, here is a score I gave for the 5 applications:

App NameUIEase of UseConfigurabilityFeatruresOverall
Vocal44233
CPod54333.75
Poddr54233.5
gPodder33543.75
castero33322.75

Leave a Reply