FreshRSS
FreshRSS is a self-hosted RSS and Atom feed aggregator: point it at the sites, podcasts, and video channels you follow, and it collects every new item into one ad-free dashboard instead of scattering them across a browser full of tabs. It’s a lightweight PHP application that runs comfortably in a single Docker container with a built-in SQLite database, multi-user from the ground up, with an anonymous reading mode, and translated into more than 20 languages. For anyone who wants a real RSS reader now that Google Reader has been gone for over a decade, FreshRSS is usually the first self-hosted name that comes up.
License: FreshRSS is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0), confirmed directly from the LICENSE.txt file in the FreshRSS/FreshRSS GitHub repo, not assumed from a badge.
Quick facts: Official site freshrss.org · GitHub FreshRSS/FreshRSS, 15,000+ stars · Current release 1.29.0 · Docker image freshrss/freshrss on Docker Hub, also mirrored at ghcr.io/freshrss/freshrss.
Why self-host an RSS reader?
RSS itself never went away, the readers built around it did. Google Reader shut down in 2013 and took a chunk of the ecosystem with it, and more recently Feedly and Inoreader have pushed casual users toward paid tiers for what used to be free. A self-hosted RSS reader sidesteps both problems: nobody can discontinue FreshRSS out from under you, no company profiles what you read, and there’s no subscriber limit beyond what your own server can handle. FreshRSS’s own project page frames it plainly as a lightweight, customizable alternative to those hosted readers, and its 15,000-plus GitHub stars suggest plenty of people made the same trade.
What FreshRSS actually does
FreshRSS covers more ground than a typical feed reader. Multi-user support means one instance can serve an entire household, each with private feeds, alongside an anonymous read-only mode for sharing a public view. Its built-in Web scraping engine generates a feed from XPath rules for sites that never published RSS or Atom in the first place, and it understands JSON feeds too. Through the WebSub standard (formerly PubSubHubbub), FreshRSS can receive instant push updates from compatible sources like WordPress or Medium instead of waiting on the next poll. An API layer speaks both the Google Reader protocol and the Fever API, so mobile apps like Capy Reader, Read You, or Reeder can connect straight to a self-hosted instance instead of a company’s cloud backend. Extensions, webhooks, and OPML import/export round out the feature set for anyone migrating off Feedly or Inoreader.
Installing FreshRSS with Docker
The project publishes an official image on Docker Hub. FreshRSS ships with a built-in SQLite database by default, good performance and no separate database container to provision for a single household. PostgreSQL, MariaDB, and MySQL are all supported too, for heavier multi-user setups. A docker-compose.yml is the cleanest way to run it long-term:
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
volumes:
- data:/var/www/FreshRSS/data
- extensions:/var/www/FreshRSS/extensions
ports:
- "8080:80"
environment:
TZ: Europe/Paris
CRON_MIN: '2,32'
volumes:
data:
extensions:
docker compose up -d
Browse to http://your-server-ip:8080 afterward to finish setup through the Web installer, or use the bundled CLI instead.
Don’t skip CRON_MIN. FreshRSS doesn’t refresh feeds on its own unless something tells it to. The CRON_MIN environment variable turns on a built-in cron daemon inside the container at the minutes you specify; leave it unset and feeds only update when a signed-in user happens to load the page. A cron job on the host calling actualize_script.php works too, but the environment variable is the simplest of the three officially supported refresh methods.
First run
- Open http://your-server-ip:8080 and follow the installation wizard: pick a database (SQLite is fine for one household), then create the first admin account.
- Or skip the wizard entirely and install from the command line with
cli/do-install.phpandcli/create-user.php. - Import existing subscriptions from an OPML file exported by Feedly, Inoreader, or another reader, under Subscription management → Import/export.
- Connect a mobile app over the Google Reader API where possible, the better-supported and more capable of the two APIs FreshRSS offers.
Hardware: FreshRSS’s own documentation claims it runs on a Raspberry Pi 1 with response times under a second against 150 feeds and 22,000 articles, so this isn’t a demanding app. A spare core and a few hundred MB of RAM comfortably cover a personal or household instance. Our homelab setup guide for beginners covers picking hardware for the stack as a whole.
Homelab use cases
There’s no HTTPS inside the container by default, so a reverse proxy is the natural next step before exposing FreshRSS past the LAN: pair it with Traefik or Caddy for automatic HTTPS certificates, the same pattern used across most of this site’s Docker stacks. Portainer is worth having alongside it too, a visual way to check logs and restart the container without reaching for SSH. Households that already run Nextcloud for files or Vaultwarden for passwords tend to add FreshRSS next: it’s the same category of small, low-maintenance service that pays for itself the moment a company shuts down the cloud reader you were using instead.
FreshRSS: pros and cons
- Free and fully open source under AGPL-3.0, no paid tier or feature gate
- Runs in a single container with a built-in SQLite database, nothing extra to provision for a first deploy
- Native Web scraping turns feed-less sites into working subscriptions
- Broad mobile app ecosystem through the Google Reader and Fever APIs
- No refresh happens until one of the three supported cron methods is configured
- No HTTPS out of the box, a reverse proxy is effectively mandatory beyond localhost
- The PHP/Apache stack is heavier than Go-based alternatives like Miniflux
- Multi-user administration is more manual than a hosted service like Feedly
FreshRSS vs Miniflux
Miniflux is the other name that comes up constantly next to FreshRSS in self-hosted RSS circles: a single static Go binary instead of a PHP app, a deliberately minimal interface, and PostgreSQL as its only supported database. FreshRSS trades some of that minimalism for more built-in surface area, Web scraping for feed-less sites, extensions, and a friendlier setup wizard with SQLite available out of the box. Neither is objectively better: FreshRSS suits people who want a fuller feature set and a GUI-driven install, Miniflux suits people who want the smallest possible footprint and don’t mind running PostgreSQL for it. A full side-by-side comparison lives in the dedicated Miniflux fiche on this site.
FAQ
Is FreshRSS free?
Yes. It’s licensed under AGPL-3.0 with the full source on GitHub, no paid tier, no feature paywall, and no account required to self-host it.
Does FreshRSS need a separate database server?
Not by default. It ships with a built-in SQLite database, which the project itself recommends for good performance on a personal or household instance. PostgreSQL, MariaDB, or MySQL are supported if you expect a lot of users or feeds.
Why aren’t my feeds updating automatically?
Nothing polls feeds on a schedule until a refresh method is configured. Passing the CRON_MIN environment variable to the Docker image is the simplest of the three supported options; without it, feeds only refresh when a signed-in user loads the page.
Is FreshRSS better than Miniflux?
Neither is strictly better. FreshRSS offers more built-in features, Web scraping, extensions, a graphical setup wizard, while Miniflux is a smaller, faster, Go-based binary with a more minimal interface. Both are free, open source, and actively maintained.
FreshRSS is one of the lower-maintenance ways to reclaim an RSS habit that used to depend on a company’s cloud reader. Our homelab setup guide for beginners covers the Docker basics it depends on, and once it’s running behind Traefik or Caddy with Portainer keeping an eye on the container, checking in on it is a five-minute weekly chore at most. The Docker & Containers category rounds out the rest of the tooling here.