Taking Back Control of Your News Feed
RSS never died – it just got buried under algorithmic timelines and walled gardens. While social platforms decide what you see and when, RSS feeds still deliver content directly from the source, in chronological order, without ads or engagement tricks. FreshRSS is an open-source, self-hosted RSS aggregator that puts that control back in your hands, running entirely on your own server or home machine.
Setting up FreshRSS gives you a private, multi-user feed reader that syncs across devices, supports thousands of feeds, and stores your reading history indefinitely. It works with popular RSS client apps through its API compatibility with Fever and Google Reader protocols, meaning you get server-side feed fetching without handing your data to a third party. This guide walks through the full installation and configuration process.

What You Need Before You Start
FreshRSS runs on any Linux server, a Raspberry Pi, or a VPS. You need PHP 7.4 or higher, a web server (Apache or Nginx), and either MySQL, MariaDB, PostgreSQL, or SQLite for the database. SQLite works fine for a single user or small household setup – no separate database server required. For a multi-user instance or heavier use, MariaDB is the better choice.
Docker is the fastest path if you want to skip manual dependency management. The official FreshRSS Docker image handles PHP and the web server configuration automatically. You just need Docker and Docker Compose installed. Either way – bare metal or Docker – the end result is the same: a web interface accessible from your browser and a working API for third-party apps.
Make sure port 80 (or 443 for HTTPS) is open on your firewall and that you have a domain name or local hostname ready to point at the server. If you plan to access FreshRSS from outside your home network, setting up a reverse proxy with SSL through Nginx Proxy Manager or Caddy is strongly recommended before exposing the service publicly.
Installing FreshRSS with Docker Compose
Create a directory for the project and add a docker-compose.yml file. The base configuration pulls the official image, maps persistent data volumes for configuration and data storage, and exposes the web interface on a port of your choice. A minimal working file looks like this: define the service using the freshrss/freshrss image, set environment variables for the default user, time zone, and database type, and map ./data and ./extensions as volumes. Run docker compose up -d and the container pulls and starts within seconds.
Once running, navigate to your server’s IP address or hostname in a browser. FreshRSS presents a setup wizard that asks for your database choice – select SQLite for simplicity – and prompts you to create an admin account. That account becomes the primary user with access to system settings, feed management, and user administration. After completing the wizard, you land on the main reading interface immediately.

Configuring Feeds, Extensions, and API Access
Adding feeds in FreshRSS is straightforward: paste any RSS or Atom feed URL into the subscription field under the “Add a feed” option in the left sidebar. FreshRSS automatically detects the feed format, pulls existing entries, and begins polling on your configured refresh schedule. You can organize feeds into categories, set per-feed refresh intervals, and apply labels or tags for filtering. Most news sites, blogs, podcasts, and YouTube channels publish valid RSS feeds, and FreshRSS handles all of them without special configuration.
The extensions system is where FreshRSS gets genuinely flexible. The project maintains a community extensions repository on GitHub with dozens of add-ons that modify how content is fetched and displayed. Notable extensions include full-article fetching for sites that only publish truncated summaries in their RSS feed, custom CSS injection per feed, and filter rules that automatically mark certain items as read or starred based on keywords. To install an extension, download it into your mapped extensions volume and activate it through the administration panel.
API access is what makes FreshRSS work as a backend for dedicated RSS reader apps on mobile and desktop. Enable the API under the user settings panel, then set a specific API password separate from your login password. FreshRSS supports the Google Reader API and the Fever API, which means it works with apps like Reeder, NetNewsWire, FeedMe, and ReadKit without any workarounds. Once configured, your app syncs read/unread states, starred items, and feed updates directly through the API – the same experience as using a commercial service, except your data stays on your machine.
Automatic feed refreshing is handled either by the built-in cron system inside Docker or by a host-level cron job pointing at FreshRSS’s update script. The Docker image includes a built-in cron daemon that refreshes feeds every 15 minutes by default. If you want more control – say, certain high-volume feeds updated every 5 minutes and others only once a day – you can configure per-feed intervals directly in each subscription’s settings. FreshRSS also supports WebSub (formerly PubSubHubbub), a protocol that lets publishers push new content to subscribers instantly rather than waiting for the next polling cycle.
Keeping It Running and Staying Private
Once FreshRSS is up, the maintenance burden is low. Docker makes updates simple: pull the new image, stop the container, and restart. Your data volumes persist between container versions so nothing is lost. Backups are equally simple – the entire state of your FreshRSS instance lives in the two mapped directories, so a standard file backup covering those folders is sufficient for a full restore.
If you run FreshRSS on a home server and want access from anywhere, pair it with a VPN like WireGuard rather than exposing the web interface directly to the internet. That approach keeps the service off the public web entirely while still letting you reach it from your phone or laptop while traveling. For users already running a self-hosted stack – home automation, document tools, grocery management – FreshRSS fits naturally into the same infrastructure without adding meaningful overhead.

One thing worth planning for early: storage. FreshRSS can retain article content and enclosures for as long as you configure it to, which means a large feed list over a long period accumulates significant data. The settings panel includes options to limit stored articles per feed and set a global retention window. Set those limits before you subscribe to hundreds of feeds, not after your disk fills up on a Raspberry Pi at 2 a.m.





