Introducing Bubo RSS: An Absurdly Minimalist RSS Feed Reader

• ~1,000 words • 4 minute read

2020 Update: Netlify recently changed their pricing approach regarding "build minutes" which might influence your update strategy. You might want to check every hour or once a day instead of every 15 minutes.

Bubo Reader is a somewhat irrationally minimalist RSS and JSON feed reader you can deploy on Netlify in a few simple steps. I created this one weekend last summer after nostalgically lamenting the demise of Google Reader many years ago. It's named after the silly robot owl from the film Clash of the Titans (1981).

View the
View the source

You will find instructions on the project's GitHub page for how to make your own instance of Bubo Reader, update the list of feeds and deploy to Netlify. If you already have interconnected accounts on those two services it's really quite straightforward!

Read on for more information about the original impetus, design goals and thoughts surrounding this project.

What Does "Irrationally Minimalist" Mean?

Many RSS readers—including the former Google Reader—would pull the contents of a post into your feed so you could read everything in one place. Although I completely understand why someone would want to do that, I decided even that introduced too much complexity for my liking.

My goal with Bubo Reader was to be able to see a list of the most recent posts from websites I like in one place with links to read them if I want. That's it. If I want to read something, I'll click through and read it on the publisher's site. If I want to keep track of what I've clicked on and read I can reflect that using the a:visited pseudo selector in my CSS.

I think it's often overlooked how many problems the browser has already solved for us. Sometimes modern web development feels like fighting against the problems we've already solved as we try to build things that pretend they don't live in the browser.

Bubo Reader does not store posts in a database or keep track of what I've read. If an item is no longer available in the site's feed then it no longer appears in Bubo. If I miss something, that's just life. I can live with that.

Design Goals for This Project

Many RSS feed reader services have sprouted up since Google Reader left, but they all do more than I need. All I wanted was something that:

  • Had an absurdly simple interface, relying almost entirely on default HTML/browser behaviors and functionality. I'm using lesser-known HTML like the details and summary elements to hide and reveal content instead of recreating that wheel in JavaScript, for example.

  • Could be themed with CSS or mildly extended using JavaScript. For my personal copy of Bubo Reader I changed the font to use the system-ui font and bumped the font-size a little, but that's mostly it.

  • Didn't worry about pulling in the link's content into the reader interface. I'm happy to read most content on the site it originated from and many feeds only provide a short description of th content as it is. Mostly I wanted a single dashboard to know when new stuff is published and available.

  • Didn't rely on a database to see what I've read or keep an archive of content over time. Again, I found the browser has a way of taking care of this for me. The a:visited pseudo selector is enough indication for me to know whether or not I've already read something.

A Healthier Way to Read Online

I also think this is a healthier way to consume information and news. So much of social media is designed to reward things that hit the dopamine buttons in our brains, manipulate our common, human propensity for anxiety or distrubute outright propaganda.

Refreshing Content

The beauty of running Bubo on Netlify is you can setup a Build Hook to rebuild the site when you want to "refresh" the list of feeds. I'm using IFTTT to trigger rebuilds once an hour, which is a perfectly sane rate to consume information at. You could do the same, or use another service like Zapier, EasyCron, setup a cronjob on your server or even setup a cronjob to run locally on your machine and ping the hook as often as you wish.

What About Authentication?

There is no authenticaton required for Bubo Reader. Netlify does offer Basic Authentication under their Pro plan, which would probably be the easiest solution to implement. You could also utilize their Identity feature to add some authentication. I don't subscribe to any private or sensitive feeds, so at the moment that isn't much of a priority for this project.

Adding New Feeds

Find them in the site's source code and add them to the feeds.json file. This is the trickiest part of this whole setup I suppose, but I'm willing to bet the people who clone projects from GitHub and deploy them to Netlify are okay with editing a little JSON from time to time.

The first version of this project used Puppeteer to extract the feeds from a site. This was actually quite cool, but would hang or fail periodicially. Builds were slow and there was a lot of work making sure things didn't timeout or use too much memory on the tiny server I'd setup. Simply parsing a list of known RSS feeds was much simpler and faster.

It's on my list to look into converting this into a serverless version that could run using Netlify's Functions, but after using my own project for a month I realized it didn't make the thing feel much more usable to me.

In Summary

If you find Bubo Reader useful, interesting or it inspires a project of your own I'd love to hear about it! Again, you'll find the code on GitHub.