Why Self-Hosting Your RSS Reader Still Makes Sense
Google Reader shut down in 2013, and a decade later, the gap it left still hasn’t been filled by anything quite as clean or reliable in the cloud. Commercial alternatives exist – Feedly, Inoreader, NewsBlur – but they come with subscription tiers, data collection trade-offs, and the constant risk of another shutdown notice. FreshRSS changes the calculation entirely by putting the feed reader on your own server, under your own control, with no monthly fee attached to it.
FreshRSS is an open-source, self-hosted RSS aggregator written in PHP. It supports hundreds of feeds, multi-user access, mobile sync via the Google Reader API and Fever API, and a browser-based interface that holds up well on both desktop and mobile. You can connect third-party apps like Reeder, NetNewsWire, or ReadKit directly to your FreshRSS instance the same way you would have connected them to Google Reader in 2012.
Setup takes about 20 to 30 minutes if you already have a server or a home machine running Linux.

What You Need Before You Start
FreshRSS runs on any Linux server with PHP 7.4 or higher, a web server (Apache or Nginx), and either SQLite, MySQL, or PostgreSQL for the database. For a single-user personal install, SQLite is perfectly adequate and requires no separate database configuration. If you plan to run multiple users or a large feed list with thousands of articles, MySQL or PostgreSQL will handle the load better over time.
A basic VPS with 1GB of RAM is more than enough to run FreshRSS smoothly. Alternatively, a Raspberry Pi 4 on your home network works well – the PHP footprint is light and the application does not stream media or perform heavy computation. If you are already running a home server for something like Jellyfin as a private Netflix on your home server, FreshRSS can share the same machine without competing for meaningful resources.
You will also need a domain or subdomain pointed at your server if you want HTTPS, which is strongly recommended before enabling multi-user access or syncing with a mobile app. Certbot with Let’s Encrypt handles the certificate at no cost and takes about five minutes to configure alongside Apache or Nginx.
Installing FreshRSS Step by Step
Start by installing the dependencies. On a Debian or Ubuntu system, run sudo apt update followed by sudo apt install php php-curl php-gd php-mbstring php-xml php-zip apache2 git. If you prefer Nginx, swap apache2 for nginx and install php-fpm as well. Once the packages are installed, navigate to your web root – typically /var/www/ – and clone the FreshRSS repository with git clone https://github.com/FreshRSS/FreshRSS.git. This pulls the latest stable build directly from the project’s official repository.

Set the correct file permissions so the web server can read and write to the FreshRSS data directory. Run sudo chown -R www-data:www-data /var/www/FreshRSS and then sudo chmod -R 755 /var/www/FreshRSS. Next, create a virtual host configuration for Apache or a server block for Nginx that points the document root to /var/www/FreshRSS/p – note the lowercase p subdirectory, which is where the public-facing files live. Restart your web server after saving the configuration file.
Open your browser, navigate to your server’s address or domain, and the FreshRSS installation wizard will load automatically. It walks through the database selection, admin account creation, and a basic extension setup in a few short screens. Choose SQLite for the fastest start, set a strong admin password, and complete the wizard. From that point, the interface is fully functional. Add your first feed by pasting any RSS or Atom URL into the subscription field – FreshRSS auto-detects the feed format and pulls in recent articles within seconds.
Configuring Feed Refresh and API Access
By default, FreshRSS does not refresh feeds automatically after installation. You need to configure a cron job to run the built-in update script on a schedule. Open the cron table with crontab -e as the web server user and add the following line: /5 * php /var/www/FreshRSS/app/actualize_script.php. This runs a feed refresh every five minutes. Adjust the interval based on how current you need your news – every 15 or 30 minutes is reasonable for most personal setups and puts less load on the feed sources.
To enable mobile sync, go to the FreshRSS settings panel, open the Authentication section, and enable the API access toggle. Then navigate to Profile and set an API password – this is separate from your login password and is what third-party apps will use to authenticate. FreshRSS supports both the Google Reader API and the Fever API, so virtually any RSS app that supported Google Reader sync before 2013 will connect to your instance today. In your app of choice, enter your FreshRSS server address followed by /api/greader.php as the server URL, along with your username and API password.
The Extensions section of the settings panel is worth exploring early. FreshRSS includes a handful of built-in extensions for feed content cleanup, sharing integrations, and display preferences. Community extensions are available separately through the project’s GitHub organization if you want features like full-text fetching for feeds that only publish summaries – a common frustration with newsletters and paywalled sites that provide truncated RSS output.

Running It Long-Term
Keeping FreshRSS updated is straightforward: navigate to the install directory and run git pull to pull down the latest release, then check the project’s changelog for any migration steps. The database schema updates automatically on the next page load in most minor version upgrades. Because you own the data directory, your feeds, read states, starred articles, and user accounts persist across every update. No subscription renewal, no export anxiety, no waiting for a service to restore after a server incident you had no visibility into – your instance, your uptime.
The one operational detail worth staying on top of is disk space. FreshRSS stores article content locally in the database, and with several hundred active feeds, that can grow to a few gigabytes over a year. The Archiving settings let you cap how many articles are retained per feed and set a global maximum age for stored items – configuring those limits during setup prevents the database from expanding silently until it fills a partition.
Frequently Asked Questions
Can I sync FreshRSS with my iPhone RSS app?
Yes. FreshRSS supports the Google Reader API and Fever API, so apps like Reeder, NetNewsWire, and ReadKit can sync directly with your instance.
Do I need a paid server to run FreshRSS?
No. A basic 1GB VPS or even a Raspberry Pi 4 on your home network is sufficient for a personal or small multi-user FreshRSS install.
How do I keep FreshRSS updated?
Navigate to your FreshRSS directory and run git pull to fetch the latest version. The database schema updates automatically on the next page load for most releases.





