Three ways to hop aboard the RSS revival with self-hosting
RSS is back, baby!
Well, Real Simple Syndication (or Rich Site Summary, for those who like to be technically correct) never went anywhere—no, not even after the death of Google Reader. Many did, however, forget about RSS’ potential in the years since. Now, the tech community seems particularly eager to make a return to the calmer days of hand-picking which blogs and sources you want to read and doing so in a straightforward, ad-free environment.
In the Hacker News comments to a blog post titled “Now Is The Perfect Time For An RSS Renaissance,” a handful of commenters recommended some projects they use to self-host their own RSS reader. Considering I’ve written about how easy it can be to install Miniflux via Docker, I thought this was an opportune moment to hop back into the landscape of RSS readers—particularly those you self-host on a server of your own—and see how to hop aboard this revival.
For those who don’t know what “self-hosted” or “self-hosting” is, I highly recommend our primer on that very subject—What the Heck is Self-Hosting? A Guide to ‘Owning’ Your Webapps.
In a nutshell, self-hosting is running a web application on a virtual private server (VPS) you own, rather than using an app like Feedly, which is owned and operated by someone else. By self-hosting, you keep all your data to yourself, and remain completely in control—no sudden Google Reader phase-outs for you!
We’ve listed a number of the self-hosted RSS options on our ultimate guide to self-hosted alternatives, but let’s take a minute to investigate three of the most popular RSS readers out there.
It seems that, far and away, the most popular choice here is Tiny Tiny RSS, often stylized as tt-rss. It’s been around forever, is fully open source, and is built with PHP, which means it can run pretty much anywhere there’s a LAMP stack.
Tiny Tiny RSS also has an official Android app, and you can access your data via third-party clients like FeedTheMoney. The consensus is that tt-rss is the most feature-rich self-hosted RSS reader out there. But how does it install, and how does it feel?
In the default, recommended installation, you’ll have a LAMP stack running on your VPS, which you’ll use to serve the PHP files that make tt-rss possible. That might be fine for a lot of people, but I prefer to containerize apps (especially ones I might not stick with). There is no official Docker support, but I did find one project on GitHub, docker-ttrss that seemed promising.
Per the instructions, I started up a Postgres database container:
$ docker run -d --name ttrssdb nornagon/postgres
Once that was running, I started up the tt-rss container:
$ docker run -d --link ttrssdb:db -p 80:80 clue/ttrss
I was surprised, given that the
Dockerfile is 3 years old, that the installation worked perfectly!
The tt-rss interface, despite a logical layout and tons of features, left me wanting more. My initial reaction was that it felt empty and flat, with nothing encouraging my engagement. Basic functions are often difficult to discover and activate—for example, adding a new feed takes five clicks from the main page and isn’t particularly easy to find in the first place. I have a feeling many will love tt-rss’ insistence on simplicity, but it’s not for me.
Google Reader and keyboard shortcut diehards will enjoy the fact that, as far as I remember, tt-rss duplicates the Reader shortcuts exactly. I feel that, once I got a handle on these again, I’d have a much better time navigating the interface.
What tt-rss is “lacking” in the interface, it’s making up for in features and options for customization. RSS readers, being a niche way of reading web content, tend to attract the same kind of people who like VPS hosting—tinkerers, namely, and those who prefer things a very particular (and personal) way. Spending just 15 minutes in the settings and custom CSS rules would probably alleviate a lot of my concerns with the interface.
Miniflux is another popular option for self-hosting RSS. It was just rewritten into Go, and now installation can be as easy as running a single binary, or a very straightforward Docker image. Miniflux is very feature-rich, but perhaps slightly less so that tt-rss—I would argue Miniflux has more than enough for 95% of RSS users.
I used the docker-compose installation, and while there’s not much to recap, I’ll walk through the process. First, I created a
docker-compose.yml file with the following:
version: '3' services: miniflux: image: miniflux/miniflux:2.0.6 ports: - "80:8080" depends_on: - db environment: - DATABASE_URL=postgres://miniflux:[email protected]/miniflux?sslmode=disable db: image: postgres:10.1 environment: - POSTGRES_USER=miniflux - POSTGRES_PASSWORD=secret
I didn’t bother changing the
POSTGRES_PASSWORD fields for this experiment, but you probably should.
I then ran docker-compose:
$ docker-compose up -d
Finally, I migrated the database and created my admin user:
$ docker exec -ti <container-name> /usr/local/bin/miniflux -migrate $ docker exec -ti <container-name> /usr/local/bin/miniflux -create-admin
Overall, impressively easy. After a very brief and headache-free 60 seconds, I had myself a functioning RSS reader.
I previously had Miniflux 1.x installed on my personal VPS, and the 2.x version seems to have fixed many of the little papercut-esque annoyances I had. The interface is cleaner and easier to navigate, and refreshing feeds no longer requires copy-pasting an API call into your browser. Neato.
As its name suggests, Miniflux is meant for minimalists. The developers call their design choices “opinionated,” which usually means its incredibly annoying—I bet the Snapchat designers said the same about their interface—but I found Miniflux to be quite refreshing. The interface is almost nonexistent, which places your focus on the content, and that’s why you’re reading RSS feeds in the first place, no?
Miniflux also has an impressive feature where it grabs the page’s full content, even if the RSS feed only offers a truncated summary. Not sure if it works everywhere, but it does work with the Serverwise RSS feet!
One major annoyance is the inability, as far as I can tell, to mark feeds as read as you navigate the list with the
k keys. All in all, I’m impressed but left wishing for a few more bells and whistles, if only to feel like my RSS reader is more my own.
I heard about FreshRSS for the first time just a week before seeing the RSS revival post on Hacker News. Three cheers for serendipity! Fresh RSS looks fantastic, in my opinion (you can try the interface here), seems to be quite feature-rich, and has a sizeable following on GitHub. Active, recent development doesn’t hurt, either.
The basic installation looks pretty daunting for someone who wants to quickly jump back into RSS without spending a few hours over the weekend setting everything up, but wait! There’s a Docker installation process available, too.
The basic example didn’t work for me, so I ended up following their Examples with external databases instructions to use a PostgreSQL container.
$ docker run -d -v /path/to/pgsql-data:/var/lib/postgresql/data \ -e POSTGRES_DB=freshrss \ -e POSTGRES_USER=freshrss \ -e POSTGRES_PASSWORD=pass \ --name postgres postgres $ docker run -dit --restart unless-stopped --log-opt max-size=10m \ -v $(pwd)/data:/var/www/FreshRSS/data \ --link postgres -p 8080:80 \ --name freshrss freshrss/freshrss
I ran into one more little hiccup—while setting up the database, the interface autofills
localhost for the database location, whereas you want it to be
postgres, or, presumably, whatever you name the Postgres container.
After that, I was up and running.
The interface is, undoubtedly, the most “modern”-looking, and most similar to what Google Reader had once been. I don’t love any of the themes offered by default with FreshRSS, but the interface is quite pleasing overall. By giving you access to the most common actions directly in the main view without overwhelming your browser window, it’s hitting the marks I found lacking in the other two.
The interface has a few rough edges, like overlapping panes/modals, and some content quickly flashing in and out of view, but the latter seems to have calmed after clicking around enough. Maybe it was just an asset loading/caching issue.
All the necessary features are there, including “proper”
k navigation, as is a bevy of settings you can change according to your needs. Archiving, custom shortcuts, display settings, extensions, themes—you name it. Overall, I’m impressed with the Fresh RSS experience.
The answer to this question depends entirely based on your priorities.
Are you looking for a feature-rich RSS reading experience? If so, then Tiny Tiny RSS is the obvious choice.
If you care about minimalism, then you’re a Miniflux issue.
Do you want something that feels familiar? FreshRSS, with its Bootstrap-like looks, is most adherent to our current idea of what a web app interface should look like, and how it should behave.
Overall, I found FreshRSS to be the most impressive project, and the easiest to just jump into and feel comfortable using. I highly encourage you to check out all three, and maybe install them using the instructions I’ve included, and make the decision on your own, but I don’t think you can go wrong with FreshRSS.
Who knows if this renaissance will stick, or fade in the coming weeks, but RSS is hardy as heck; it’s not going away any time soon. Whether you’ve been an avid feed reader for years or are just poking around for the first time, you can rest assured that we’ll always have RSS in our collective back pockets.
If you’re looking for a VPS to start self-hosting your new self-hosted RSS reader, why not try us? Get a 16GB RAM server running on a KVM hypervisor for $9.99/mo.
And, if you like what you saw here, be sure to make Serverwise’s very own RSS feed your first subscribe once you’re up and running with Tiny Tiny RSS, Miniflux, or FreshRSS.
The 10X cloud for developers who demand performance.
We've pioneered next-generation cloud hosting with NVMe disk technology: 10X performance at 1/5 the price of slower servers from DigitalOcean, Linode, and Vultr. Deploy faster and scale at a fraction of the cost.