Take Control of Your RSS Feeds With FreshRSS
RSS never died – it just got buried under algorithmic feeds and walled gardens. FreshRSS is a free, open-source feed aggregator you can run on your own server, giving you a clean, fast, ad-free way to follow hundreds of websites without handing your reading habits to a third-party platform.

What You Need Before You Start
FreshRSS runs on a standard Linux server with PHP and a web server like Apache or Nginx. You will need a VPS, home server, or any machine you can SSH into. The minimum requirements are modest: PHP 7.4 or higher, a MySQL, PostgreSQL, or SQLite database, and a web server that can handle PHP. If you already run other self-hosted services, chances are your stack already meets every requirement.
For this guide, the setup assumes a Debian or Ubuntu-based system running Nginx and MySQL. The same steps apply to Apache with minor configuration differences. If you prefer a containerized approach, FreshRSS has an official Docker image that simplifies the whole process considerably – but this guide walks through the native installation, which gives you more control over file placement and server configuration.
Before you touch the server, make sure your domain is pointed at your server’s IP address and that you have a valid SSL certificate, either from Let’s Encrypt or another issuer. Running FreshRSS over plain HTTP is technically possible in a local-only setup, but for anything accessible from the internet, HTTPS is non-negotiable. Certbot handles Let’s Encrypt issuance in a single command on most Debian-based systems.
You should also decide upfront whether you want a single-user or multi-user installation. FreshRSS supports both. Multi-user mode lets you create separate accounts with individual feed lists and reading progress, which is useful if you want family members or colleagues to use the same instance. The decision affects a few configuration settings, but you can switch modes later if needed.

Installing and Configuring FreshRSS
Start by cloning the FreshRSS repository directly from GitHub into your web root. The standard path on Nginx systems is /var/www/, so run git clone https://github.com/FreshRSS/FreshRSS.git /var/www/freshrss. This pulls down the latest stable release. If you prefer a specific version, check the releases page on GitHub and clone the corresponding tag instead.
Once the files are in place, set the correct ownership so your web server process can read and write to them. On Ubuntu systems with Nginx, that user is typically www-data. Run sudo chown -R www-data:www-data /var/www/freshrss, then set directory permissions to 755 and file permissions to 644 using find commands. FreshRSS stores user data, extensions, and cache files in its data/ directory, which needs write access throughout its lifecycle, not just during installation.
Create a new Nginx server block for your FreshRSS domain. The configuration should point the document root at /var/www/freshrss/p – note the trailing /p, which is the public-facing directory FreshRSS uses intentionally to keep sensitive files outside the web root. Set up a standard PHP-FPM pass-through for .php files, enable try_files for clean URLs, and include your SSL certificate paths. Reload Nginx after saving the configuration.
Next, create the MySQL database and user. Log into MySQL as root, create a database named something like freshrss_db, create a dedicated user with a strong password, and grant that user full privileges on the database. Keep those credentials handy – you will enter them during the web-based installer. SQLite is simpler if you are running a single-user instance on a low-traffic server, since it requires no database setup at all, but MySQL or PostgreSQL handle larger feed volumes more reliably over time.
Navigate to your domain in a browser. FreshRSS will detect the fresh installation and walk you through a setup wizard. You will select your database type, enter connection credentials, set your admin username and password, and choose the default language and timezone. The wizard also asks whether to enable API access, which is worth enabling if you plan to use a mobile RSS reader app like Reeder, NetNewsWire, or Fluent Reader to sync with your FreshRSS instance. Those apps communicate with FreshRSS through its Google Reader-compatible API, which is widely supported. If you find yourself building out a broader self-hosted dashboard, pairing FreshRSS with a self-hosted start page like Flame gives you a single browser tab that surfaces everything at once.
Automating Feed Refreshes and Managing Subscriptions
FreshRSS does not refresh feeds on its own without a scheduled task. The standard approach is a cron job that calls FreshRSS’s update script at regular intervals. Add the following to your crontab with sudo crontab -e -u www-data: /5 * php /var/www/freshrss/app/actualize_script.php > /tmp/freshrss.log 2>&1. That runs a feed update every five minutes under the web server user. Adjust the interval to suit your needs – some setups run updates every fifteen or thirty minutes to reduce server load if you are following hundreds of sources. Without this cron entry, you will need to trigger updates manually from the administration panel, which works fine for testing but becomes impractical for daily use.
Once cron is running, the real work is organizing your subscriptions. FreshRSS supports categories, labels, tags, and saved searches, which together give you a filtering system that most commercial RSS services charge for. You can import an OPML file from Feedly, Inoreader, or any other service to migrate your existing subscriptions in one step. The interface is fast by default, but you can also install extensions from the FreshRSS extension repository to add features like full-article fetching, custom CSS per feed, or keyboard shortcuts modeled after Google Reader’s layout – still the mental model most long-time RSS users carry.
Frequently Asked Questions
Can I use FreshRSS with a mobile RSS reader app?
Yes. FreshRSS includes a Google Reader-compatible API that works with apps like Reeder, NetNewsWire, and Fluent Reader. Enable API access during the setup wizard.
What database should I use for FreshRSS?
SQLite works well for single-user setups with lighter usage. MySQL or PostgreSQL are better choices if you follow a large number of feeds or run a multi-user instance.
How do I keep FreshRSS feeds updated automatically?
Set up a cron job running as your web server user (www-data on Ubuntu) that calls the FreshRSS actualize_script.php file at your preferred interval, such as every five minutes.





