FreshRSS: Your Own RSS Aggregator, Running Quietly on a Raspberry Pi
You've probably watched a favorite blog die, or a news site you loved get swallowed by a paywall, or a feed reader you relied on shut down and take your subscriptions with it. The web is a lot less permanent than it used to be, and trusting a third party to keep your reading list alive is a gamble. FreshRSS is a self-hosted answer to that problem: an RSS feed aggregator you run on your own hardware, with your own data, on your own terms.
What It Does
FreshRSS is a self-hosted RSS feed aggregator. You install it on a server you control, point it at the feeds you care about (RSS and Atom), and it collects and organizes articles for you to read in a browser. It's a multi-user application with an anonymous reading mode, and it supports custom tags for sorting things the way you actually think about them.
The stack is deliberately modest. It runs on a light Linux or Windows server, needs PHP 8.1 or newer, and works with Apache2.4+, nginx, or lighttpd. Required PHP extensions include cURL, DOM, JSON, XML, session, and ctype, with PDO_SQLite and GMP recommended. The README notes it even runs on a Raspberry Pi 1 with sub-second response times, tested against 150 feeds and 22,000 articles. That's not a typo—the original Pi.
Beyond basic feed collection, FreshRSS handles a few things that matter in practice. It supports WebSub, so compatible sources (Friendica, WordPress with the PubSubHubbub plugin, Blogger, Medium, and others) can push instant notifications instead of waiting for a scheduled poll. It has native web scraping based on XPath for sites that don't publish a feed at all, plus support for JSON documents. There's an API for mobile clients and a command-line interface for people who'd rather script than click. And it supports extensions if the built-in feature set isn't enough.
Why It's Cool
-
It respects your hardware. Plenty of self-hosted tools assume you've got a spare server rack. FreshRSS was tested on a Raspberry Pi 1 with 150 feeds and 22k articles, and response times stayed under a second. If you've got an old Pi in a drawer, you've got a feed reader.
-
Web scraping is built in. This is the feature I'd highlight first. Not every site publishes RSS anymore—some never did. FreshRSS lets you scrape those pages using XPath, and it also handles JSON documents. You're not limited to what the site decides to offer you.
-
WebSub means real-time updates. Instead of polling every feed on a schedule and hoping you catch things quickly, WebSub-compatible sources push updates to you. For high-volume feeds, that's a meaningful difference in both freshness and server load.
-
Resharing is a first-class feature. You can reshare selections of articles via HTML, RSS, and OPML using user queries. That's a genuinely useful capability if you curate links for other people or want to build a public reading list from your own subscriptions.
-
Flexible login options. Web form (with an anonymous option), HTTP Authentication (which plays nicely with proxy delegation), and OpenID Connect. If you're running this behind a reverse proxy with SSO already in place, you're covered.
-
It's translated into a lot of languages. The README points to internationalization across 20 languages, which suggests a project that's been around long enough to attract a broad contributor base.
-
The license is AGPL 3. If you care about that sort of thing—and if you're self-hosting, you probably do—it's a strong copyleft license that keeps the project open.
How to Try It
-
Check the requirements. You'll need PHP 8.1+, a supported web server (Apache2.4+ is recommended), and the required PHP extensions: cURL, DOM, JSON, XML, session, and ctype. PDO_SQLite and GMP are recommended.
-
Head to the repository and read the installation documentation. The README links to a dedicated administrator documentation section covering installation and maintenance, which is where you'll want to start.
-
If you just want to see what it looks like before committing, there's a live demo at https://demo.freshrss.org.
-
Clone or download from the repo: https://github.com/freshrss/freshrss
-
If you want to contribute or poke at the code without setting up a local environment, there's a GitHub Codespaces option that spins up a dev container for you.
The official website at https://freshrss.org has more, and the user documentation covers the first steps once you're installed.
Final Thoughts
FreshRSS isn't trying to be a social network or a content discovery engine. It's a feed aggregator—a focused tool that does one job well and stays out of your way. The fact that it runs comfortably on a Raspberry Pi 1 with tens of thousands of articles is a testament to how seriously the project takes efficiency, and the built-in scraping and WebSub support mean it handles the messy reality of the modern web, not just the idealized version where everything has a feed.
If you've been meaning to take your reading list back from whatever service is currently holding it hostage, or if you've got a Pi gathering dust, this is a solid place to start. The community is friendly, contributions are welcome via GitHub issues, and the documentation is thorough enough that you won't be guessing your way through setup. Give it a look.
Follow @githubprojects for more developer tools and open source projects.