Go to file
2024-02-17 09:00:51 +11:00
src only write spec if changed 2024-02-17 09:00:51 +11:00
.gitignore initial commit 2024-01-15 15:08:27 +11:00
Cargo.lock initial commit 2024-01-15 15:08:27 +11:00
Cargo.toml initial commit 2024-01-15 15:08:27 +11:00
LICENSE initial commit 2024-01-15 15:08:27 +11:00
README.md initial commit 2024-01-15 15:08:27 +11:00

Podcast Hoarder

I listen to a lot of podcasts, and I am also a bit of a data hoarder when it comes to preserving media and art. Over time, many podcasts that I have listened to, including "The Scaredy Cats Horror Show", "Ben, Ben and Blue", and "Hello Internet" (just to name a few) have had either part of their feed or the whole podcast feed become unavailable.

To avoid being at the whim of the podcast host, I created this downloading tool to bulk download podcast episodes and store show notes. When using this tool, if an episode is removed from a podcast feed the file will stay downloaded and the show notes will be preserved, with the episode simply marked as no longer being available in the current version of the feed. Episodes which are changed and the author has marked the episode as changed as per a change in the guid will be downloaded as separate episodes.

This is not a podcast player, it is a data hoarding tool.


: This program is in version 0.0.0 because it is the first version that I am testing for problems and issues. Once I have used it for a little while with lots of different feeds, I will stabilize the format for the way metadata is stored and prevent breaking changes.


git clone https://git.aaronmanning.net/aaronmanning/podcast-hoarder.git
cd podcast-hoarder
cargo install --path .


Open an empty folder for storing all podcast episodes and metadata and create a file called podcasts.toml. Here is an example of this file containing a few podcasts

99-percent-invisible = "https://feeds.simplecast.com/BqbsxVfO"
this-american-life = "https://www.thisamericanlife.org/podcast/rss.xml"
hello-internet = "https://www.hellointernet.fm/podcast?format=rss"

Each line is in the format

alias = "rss_feed"

The alias for the podcast is the name given to the folder where they are stored and the identifier for the sake of this app. This is simply to make downloads resistent to name changes in the feed. Changing an alias will cause a redownload of the episodes.

Then simply run


to bulk download all current episodes.

Subsequently running the program will check for updates and download any new episodes as required.

Note that RSS feeds which start with http are fetched from the web, anything else is treated as a file path which allows local RSS files to be used as well.