Taking Back Control of Your News Feed
RSS never died – it just got quietly buried under algorithmic feeds, push notifications, and social media timelines designed to keep you scrolling rather than reading. FreshRSS is an open-source, self-hosted RSS aggregator that pulls content from any feed you subscribe to and presents it without ads, tracking, or engagement manipulation. You install it on your own server, your data stays on your machine, and you decide what you read and when.
The appeal goes beyond privacy. Commercial RSS services come and go – Google Reader shut down in 2013, Feedly has progressively paywalled core features, and Inoreader limits free-tier users in ways that make serious use frustrating. Running FreshRSS on a VPS or home server means no subscription fees, no account bans, and no sudden policy changes wiping your carefully organized feed list.
Setup takes under 30 minutes if you have a server running already.

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 MySQL, PostgreSQL, or SQLite as the database backend. SQLite works fine for personal use and requires zero additional configuration, making it the fastest path to a working installation. If you already have a LAMP or LEMP stack running – perhaps for another self-hosted project like Calibre-Web – FreshRSS slots into it without conflict.
You will also need a domain name or subdomain pointed at your server, and a valid SSL certificate. Accessing an RSS aggregator over plain HTTP is a bad idea because your login credentials would travel unencrypted. Certbot with Let’s Encrypt handles the SSL certificate for free in a few commands. If you are running on a home server behind a router, you will need to forward port 443 to your machine and either use a dynamic DNS service or configure a reverse proxy like Nginx Proxy Manager to handle the domain routing cleanly.
On the PHP side, make sure the following extensions are enabled: php-curl, php-dom, php-xml, php-mbstring, and php-zip. Missing any of these will cause FreshRSS to throw errors during the web installer or silently fail when trying to fetch feeds. Run php -m to list installed modules and cross-check before proceeding.
Installing and Configuring FreshRSS
Clone the FreshRSS repository from GitHub into your web root directory. The standard location on Debian-based systems is /var/www/, so the full path would typically be /var/www/freshrss. Once cloned, set the correct file ownership so your web server user (usually www-data on Ubuntu and Debian) can read and write to the application directories. FreshRSS needs write access to the data/ folder in particular – without it, the installer cannot create the configuration files and will stall on the first step.

Create a new Nginx server block (or Apache virtual host) pointing to the p/ subdirectory inside your FreshRSS installation. The project ships with example configuration files for both web servers in its Docker/ and documentation directories, which saves a lot of trial and error. Once the server block is active and SSL is configured, navigate to your domain in a browser and the web installer launches automatically. It will run a dependency check, ask you to choose a database type, prompt for an admin username and password, and then write the configuration file. The whole interactive portion takes about two minutes.
After the installer finishes, log in and go to Settings > Feed Management to start adding sources. FreshRSS accepts standard RSS 2.0, Atom, and JSON Feed URLs. You can import an OPML file if you are migrating from another reader – most services including Feedly and Inoreader export OPML cleanly. Under Settings > Archiving, set your preferred retention window to control how many days of articles FreshRSS keeps in the database before purging old entries. For a personal install on a small VPS, 60 days with a max of 200 articles per feed is a reasonable baseline that keeps the database size manageable without losing too much history.
Automating Feed Updates and Using the API
FreshRSS does not update feeds in real time by default. You need to configure a cron job to trigger the feed refresh script at regular intervals. The recommended command is:
php /var/www/freshrss/app/actualize_script.php
Run this every 15 minutes via crontab by adding it to the www-data user’s crontab or the system crontab. More frequent than 15 minutes is rarely necessary and puts unnecessary load on the feed sources you are polling. Some feeds – particularly high-volume news sites – will start rate-limiting or temporarily blocking requests if you hit them too aggressively, which defeats the purpose entirely.
FreshRSS includes a built-in Fever API and a Google Reader-compatible API, both of which allow third-party RSS apps to connect to your instance. This is where self-hosting becomes genuinely useful on mobile. Apps like Reeder, NetNewsWire, and ReadKit on iOS, and FeedMe or Read You on Android, support the Google Reader API. Once you enable it in FreshRSS under Settings > Authentication and generate an API password, you point your mobile app at your domain and authenticate. From that point, your phone syncs read/unread state and starred articles with the server, so everything stays consistent across devices without any third-party service involved.
The Fever API works the same way but is supported by a slightly different set of apps – Reeder on Mac has historically defaulted to Fever. Enable both if you are unsure which apps you will use. There is no downside to having both active simultaneously.

One thing worth configuring before you consider the install complete: enable HTTP authentication or restrict the FreshRSS login page to your home IP using Nginx’s allow and deny directives, especially if your instance is publicly accessible on the internet. The built-in authentication is functional, but exposing the login form to open web traffic invites brute-force attempts – and your reading habits, saved articles, and feed list are more personal data than most people realize they are handing over to SaaS alternatives without a second thought.
Frequently Asked Questions
Can I use FreshRSS on a shared hosting plan?
FreshRSS requires SSH access and PHP CLI support, which most shared hosts block. A VPS or home server is strongly recommended.
Does FreshRSS support mobile apps?
Yes. FreshRSS includes a Google Reader-compatible API and Fever API, both supported by popular iOS and Android RSS apps including Reeder, NetNewsWire, and FeedMe.





