Online Life Guide

Run your own RSS reader: a private news feed with FreshRSS

An RSS reader puts the sites you choose in one place, with no algorithm deciding what you see. FreshRSS is free, self-hostable and works with the apps you may already use.

By Andrew Ingleton · Published

FreshRSS project banner
FreshRSS © FreshRSS project

RSS is the quiet technology that never went away: every blog, news site and project announcement page you care about can publish a feed, and a reader collects them in order. On 16 October Tailscale published a walk-through for hosting one yourself with FreshRSS, which prompted this guide to what is involved and why you might bother.

Why self-host a reader?

Hosted readers can close, change their pricing or add recommendations. Running your own means your subscriptions and reading history stay on your hardware, and nothing is ranked or promoted. It is also a modest first self-hosting project: one small container, low resource use, and a clear payoff.

What FreshRSS does

  • It is both the aggregator, which fetches the feeds, and the reader, which displays them in a web interface.
  • Pasting a site's address into the "add a feed" box often finds the feed automatically; if not, look for an RSS or Feeds link on the site.
  • It has a range of themes in Settings, then Configuration, then Display.
  • It offers an API, switched on under Settings, then Authentication, so that apps such as NetNewsWire, Reeder or FeedMe can connect to it.

The set-up in outline

  1. Install Docker on a machine that is always on: a Raspberry Pi, a NAS or a mini PC. Check that docker compose version works.
  2. Get the ScaleTail FreshRSS example. Tailscale's post uses a repository of ready-made containers that join your private Tailscale network, in the services/freshrss folder.
  3. Create a Tailscale auth key in the admin console (Settings, then Keys).
  4. Fill in the .env file with the key, your time zone, your tailnet name, and two passwords: one for the web dashboard and a separate one for the API.
  5. Start it with docker compose up -d and check the status with docker compose ps.
  6. Open the private address that appears on your tailnet and log in.

Because the service lives on your tailnet, it is not exposed to the open internet, but you can reach it from your phone and laptop wherever you are. If you would rather not use Tailscale, FreshRSS runs fine on a plain Docker host on your home network or behind your own reverse proxy; just do not expose it without HTTPS and strong passwords.

Using it on your phone

Apps connect through the API, and they need the API password, not your web login. In NetNewsWire, for example, you add a self-hosted FreshRSS account and give it the API address, your username and that API password. A local address only works at home, while the tailnet address works anywhere.

Common snags

  • An expired or invalid auth key: generate a new one, update .env and run docker compose up -d again.
  • On Windows, save .env with LF line endings, not CRLF.
  • After adding your user to the Docker group on Linux, log out and back in.

The hardest part of an RSS reader is the curation: it takes a few weeks of adding and pruning feeds before it feels good. Start with the sources you already follow, including project blogs such as Home Assistant's. Our Nextcloud Spreadsheet piece shows another way to move everyday tools onto your own server.