Building my own RSS Reader/Blogroll

RSS is having a bit of a renaissance in techie circles lately, with some prominent voices arguing that we should bring back RSS as an alternative to the corporate controlled social media platforms.
Iām in full agreement! For those who donāt know, RSS (which stands for Really Simple Syndication) is a specification for āweb feedsā where a website publishes an ever-updating list of their content. Readers can then subscribe to a websiteās feed by using a āFeed Readerā, which aggregates and displays the content from multiple different feeds.
If you want to get into RSS today, choose a reader (I recommend Inoreader or Artemis) and start looking
for the RSS logo
()
which will let you subscribe to that websiteās feed! Hereās mine for starters :P
Context
RSS is old tech ā the first official version came out in 1999, and it was widely adopted during the naughties. News sites started publishing RSS feeds of their content, blogging platforms created RSS feeds automatically for their users, and web browsers had RSS utilities baked in as a first-class feature. Facebook and Twitter even published RSS feeds of an accountās content when they first launched.
Now, twentyish years later, the situation is much different. Most big web walled gardens no longer publish RSS feeds of their content (Facebook and Twitter killed theirs in 2021). The browser consortium (i.e., Google) is removing decades old browser features that made using RSS more pleasant, and RSS has thoroughly fallen out of the mainstream.
In the eyes of the big tech companies, RSS is now an enemy, because it lets us keep out of their ad-infested cesspools, and limits their ability to track what we do online.
But, despite their efforts, RSS hasnāt been killed completely, and, in fact, I think itās going through a bit of a resurgence as we speak!
Thereās been a big push in the āindiewebā scene to repopularize blogging itself, and RSS feeds with them. Most of the existing blog platforms (blogspot, wordpress, etc) still automatically create RSS feeds for their usersā blogs, with Blogger (ironically owned by Google) still allowing you to favorite feeds and show them on your own blog.
You can still find an RSS feed for most major news sites (see Aljazeera and the BBC), Youtube channels still publish RSS feeds (though you have to use a tool like https://feedfinder.davidbreder.com/ to find them), and Mastodon and Bluesky publish RSS feeds for their users.
The biggest modern proponent of RSS is, surprisingly, the podcasting industry, which uses it as their main distribution mechanism. Every podcast publishes their own RSS feed (hereās the feed for Cool People Who Did Cool Stuff), and then all the streaming platforms (Spotify, Apple Music, etc) read the RSS feed and simply display the content.
According to this github comment (from a podcast industry web developer protesting Googleās removal of RSS features), thereās currently some 4.5 million podcasts with their own RSS feeds.
The heydays of RSS may be past us, but I think the internet would be a much healthier place if we used it more. Below Iāll talk about my own journey with RSS Readers, and why I ultimately decided to build my own!
My RSS Journey
I only really got into RSS myself in the past year.
For the longest time, my approach to following peopleās blogs was to manually check them, multiple times a day. This sorta worked, but it was tedious, and I would often forget to check at least one of the blogs I liked.
I was aware of RSS, but Iād never used a feed reader, and didnāt really know where to start. I tried a few of the popular ones (like Feedly and Newsblur) but the need to have my own account and application on my computer put me off, and I found the UI a bit like my email inbox ā i.e.Ā overwhelming.
Fortunately, one of the indie web people I follow James had just launched his new ācalm web readerā Artemis, and I decided to give it a try.
Artemisā main feature is that it only updates each feed at midnight (in your local time), to try to break people of the habit of continuously checking for updates. Additionally, the UI is very simple, presenting basically as just a list of links.
You can see an example of its presentation here: https://artemis.jamesg.blog/u/posts-about-the-indieweb.
Many RSS Reader programs are built with the assumption that you want to read the content inside the program itself, but I wanted to read each item on its the original website. Most of the feeds I follow are small blogger types, and I enjoy the experience of visiting their websites directly. Artemis was built with this in mind, so it seemed like it suited me perfectly!
I used it for a few months, but found that I was getting frustrated with the core feature, the 24hr fetch time. I felt like I was always a day behind the times.
This feeling is arguably unhealthy, a sign of my web addiction, but regardless, I decided to give some other readers a try.
The next one I ended up with is the unfortunately named vore.website. Like Artemis, it presents your feeds as a simple list of links, additionally with the ability to save a link for future reading.
Unlike Artemis, it refreshes the feeds more regularly, every 12 hours, which suited me better. It also makes your list of feeds public by default, which wouldnāt work for everyone, but was nice for me, letting me easily share my list with people.
I happily used it for several months, until it had an outage a few weeks ago. Vore was down for around two days, and during that time I had the dangerous thought ā what if I made my own feed reader?
Programming your own reader seems to be the indie web challenge du jour, with Artemis, Vore, and David Bushellās Croissant all being examples. Embracing RSS already feels like taking more control of your internet consumption, so building your own program to do it is the obvious next step š .
And thus, the Roly-Poly Blog-A-Roly was born!
Building my own Reader
I knew I wanted my feed reader to basically be the same as vore.website ā a set of RSS feeds that I could update on the main page, with the aggregation being a list of links, sorted by date.
Additionally, I wanted to refresh the RSS feeds more frequently ā currently I have it as every hour, unless the feed server itself requests otherwise.
With these criteria in mind, I started programming!
I chose to build the reader in Go, a language Iāve been getting more into recently, and which is particularly well-suited for http stuff. I use the gofeed library to handle the XML parsing, and the zombiezen sqlite package to talk to my database, but other than that thereās no dependencies (and I might see about writing my own XML parser one of these daysā¦).
The code isnāt very exciting ā all an RSS reader is at the end of the day is a program that makes HTTP GET calls on a regular schedule, and writes down the responses into an HTML file.
Still, there were some interesting bits, which Iād like to go into.
Being a good netizen
The difference between a DDOS attack and your viral blog post getting a lot of traffic is one of intent, not of form.
Webmasters have to pay for every request their server receives, and so RSS readers should be careful about how many requests they make. Besides, blogs often only update a few times a month ā checking its feed every second is wasteful.
I wanted to make sure that my Reader wasnāt spamming other peopleās servers, and that it followed as much of the web server social contract as possible (looking at you, evil LLM scrapers).
rachelbythebayās Feed Reader Behavior Project was of great help to me with this. Rachel has curated this wonderful list of behaviors that a Reader should adhere to, and I refered back to it frequently while I was coding.
The most important behaviors are around so-called conditional
requests, where you add the If-Modified-Since
and
ETag
headers in your request headers, which allow the
server to return cached content if the feed hasnāt been updated since
you last checked.
Rachel also has a feed reader testing tool, which will check that my reader is doing things correctly in production ā I plan to sign up soon!
Editing Data
Copying vore.website, I decided to make my feed list editable on the āhomepageā, with no separate admin console or anything like that.
I stole his <textarea>
interface, where my feeds
(and tags) are just listed in an editable text-box, and hitting the
submit button sends the updated list back to my server.
The server then does the work of figuring out which feeds or tags were added or removed, makes the necessary updates to the database, and regenerates the HTML page.
This editing functionality is only possible if youāre logged into the page, with (hopefully) only me knowing the password. But itās a good template I think if I ever want to host the reader as a service so that people could have their own lists.
RSS Reader vs Blogroll
I started making my reader with the intention that itād be private. My own personal RSS reader that would live on my web server and only be accessible by me.
I changed my mind pretty early on, deciding to publish my feed aggregation on my website under the /blogroll URL. The indie TTRPG scene has a robust culture of publishing each otherās blogs in blogrolls (e.g., see Elm Cat here), and Iāve found a load of good blogs by following the trail of links, so it felt only fair to publish my own.
I did have some concerns though: Some of the content I want to follow isnāt exactly corporate America appropriate ā would I be closing employment doors if I admitted on my homepage that I like to read the wonderful sex-positive comic site Oh Joy Sex Toy? Maybe.
But in this time of facism and censorship, where LGBTQ (esp.Ā trans) art and artists are under attack, I felt I would be a coward if I self-censored myself. Worse, Iād be helping the facist agenda, rather than fighting it.
So instead, Iāll do this (very) small act of resistance, and I encourage you all to do the same. Letās keep the internet weird.
Whatās next?
Iāve got a few features I want to add, with the top of the list being an RSS link finder (though maybe itāll be a browser extension), and have some more tests to write, but other than that I think itās mostly complete for now. Iāve only been using it for a couple weeks, so Iām not really sure what, if anything, needs changing yet!
I do want to open source the code so people can self-host it (Iāve got some ragman.net specific stuff I need to remove before I can do that), and I might look at hosting blogrolls for people, like vore.website and Artemis do, but thatāll be a ways off.
As always, thanks for reading, and if youāve got any feedback about the /blogroll page, or want to talk RSS, Iād love to hear from you! :)