Take Back Control of Your News Feed
RSS never died – it just got buried under algorithmic timelines and notification badges. FreshRSS is a self-hosted RSS aggregator that pulls articles, podcasts, and updates from any site still publishing a feed, organizing everything into a clean reading interface you fully control. No subscription fees, no data harvesting, no feed limits imposed by a third-party service deciding what you should see.
Running FreshRSS on your own server means your reading habits stay private, your feeds never disappear because a company pivoted away from RSS, and you can access your aggregator from any browser or RSS client on the planet. The setup process takes under an hour for anyone comfortable with a terminal and a basic web server.

What You Need Before Installing
FreshRSS runs on PHP and requires a web server – Apache or Nginx both work fine. You will need PHP 7.4 or higher, with the extensions curl, dom, xml, mbstring, and zip enabled. For the database layer, SQLite works out of the box with no configuration at all, which makes it perfect for single-user installs. If you plan to run a multi-user instance or expect a large feed library, PostgreSQL or MySQL gives you better performance under load.
A small VPS with 1GB of RAM handles FreshRSS without any strain. You can also run it on a Raspberry Pi sitting on your home network if you only need local access. Before starting, make sure your server has a working domain or local hostname pointing to it, and that you have SSH access with sudo privileges. A Let’s Encrypt certificate through Certbot is strongly recommended if the instance will be reachable over the internet – exposing an unencrypted login page to the public web is a bad habit worth avoiding from day one.
Installing FreshRSS on a Linux Server
Start by cloning the FreshRSS repository directly from GitHub into your web root. The command below pulls the latest stable release into a directory called freshrss:
cd /var/www/html && git clone https://github.com/FreshRSS/FreshRSS.git freshrss
Once cloned, set the correct file ownership so your web server user can read and write the application directories. On a typical Debian or Ubuntu server running Apache, that user is www-data. Run chown -R www-data:www-data /var/www/html/freshrss and then chmod -R 755 /var/www/html/freshrss to lock permissions correctly. The data folder inside the FreshRSS directory needs to be writable at all times – this is where your feeds, user settings, and SQLite database live if you chose that backend.
Create a virtual host configuration for your web server pointing the document root to /var/www/html/freshrss/p – note the p subdirectory, not the project root. FreshRSS keeps its public-facing files separate from its application logic, and pointing the web server at the wrong folder is the most common first-time mistake. After saving your virtual host file and reloading Apache or Nginx, navigate to your domain in a browser. The FreshRSS web installer walks you through database selection, admin account creation, and timezone settings in about five steps.

With the web install complete, the final server-side task is setting up automatic feed fetching. FreshRSS does not poll feeds on its own without a scheduled job. Add a cron entry for the www-data user that calls the built-in actualize script every 15 minutes. The command looks like this: /15 * www-data php /var/www/html/freshrss/app/actualize_script.php > /tmp/FreshRSS.log 2>&1. Without this step, your feeds only update when you manually trigger a refresh inside the interface, which defeats the purpose of running an aggregator.
Configuring FreshRSS and Adding Feeds
Once you log in, the settings panel gives you meaningful control over how the reader behaves. Under the Reading tab you can set articles to mark as read automatically after a set number of days, choose how many articles display per page, and decide whether the reading pane opens inline or redirects to the original source. The Archiving settings control how long FreshRSS retains old articles before purging them – for a small VPS with limited storage, keeping 60 to 90 days of history is a reasonable starting point.
Adding feeds works exactly as you would expect: paste a URL into the subscription box, and FreshRSS detects the RSS or Atom feed automatically. For sites that do not advertise their feed directly, FreshRSS includes a feed autodiscovery tool that reads the page source and extracts any linked feed URLs. Categories let you group feeds by topic – technology news separate from personal blogs, for example – and you can apply tags to individual articles for your own reference later. The search function inside FreshRSS indexes article titles and content bodies, making it possible to find a specific piece even months after reading it.
FreshRSS exposes a Google Reader-compatible API, which means any RSS client that supported Google Reader before its shutdown can connect to your instance as a backend. Applications like Reeder, NetNewsWire, FeedMe, and ReadKit all work with this API. You configure the client by pointing it at your FreshRSS domain and entering your credentials – the app handles syncing read state, starred articles, and subscriptions across every device you use. This is where self-hosting earns back the setup time: you get a first-party sync layer with no monthly fee and no dependency on whether a commercial service decides to stay in business.
Extensions add features FreshRSS does not ship with by default. The built-in extension manager lists options including full-article fetching for feeds that only publish truncated summaries, custom CSS for individual feeds, and keyboard shortcut customization. Full-article fetching is particularly useful for news outlets and blogs that deliberately shorten their RSS output to force clicks back to their site. With the extension enabled, FreshRSS scrapes the full page content and stores it locally, so you can read everything without leaving your reader. The trade-off is that scraping adds server load and occasionally breaks when a site restructures its HTML, so it works best applied selectively to feeds you actually read in full rather than just skim.

One area worth thinking through before you finalize the setup is authentication. By default FreshRSS uses its own user database, which is fine for a private instance. If you run FreshRSS behind a reverse proxy like Nginx and want to restrict access at the network level before users even hit the login page, HTTP Basic Auth on the proxy layer adds a second gate. Multi-user mode, enabled in the administration panel, lets you create separate accounts with independent feed lists and reading states – useful if you want to share the server with a partner or small group without everyone seeing the same subscriptions. Each user account authenticates separately against the API, so connected apps stay siloed per person.





