Home Software FreshRSS: Self-Hosting an RSS Reader on Your NAS

FreshRSS: Self-Hosting an RSS Reader on Your NAS

FreshRSS: Self-Hosting an RSS Reader on Your NAS

Introduction

If you’re tired of relying on third-party RSS readers that track your reading habits, limit your feeds, or charge a monthly subscription, self-hosting FreshRSS on your NAS is the cleanest way to take back control. FreshRSS is a lightweight, PHP-based RSS reader that you can run in a Docker container on almost any NAS, from a low-power Intel N100 to a full TrueNAS or Unraid build. This guide walks you through the full FreshRSS setup, from Docker Compose deployment to connecting mobile apps and using the built-in web scraper for sites that lack a real RSS feed.

By the end, you’ll have a private, always-on news aggregator that uses minimal resources — typically under 256MB of RAM — and syncs across all your devices without any third-party service in the middle.

FreshRSS Setup Guide: What Makes It Better Than a Cloud Reader?

Most cloud RSS readers like Feedly or Inoreader offer a free tier that limits you to a handful of feeds and injects ads or tracking. FreshRSS gives you unlimited feeds, no ads, and full control over your data. Two specific features make it a standout choice for homelab users:

Built-in Web Scraper:

Many modern websites — especially news sites and blogs — have dropped RSS entirely. FreshRSS includes a “CSS/HTML XPath” scraper that can extract content from any page and present it as a feed. You point it at a URL, define the content selector, and it polls the page like a real feed.

Second, FreshRSS supports both the Google Reader API and the Fever API. This means you can connect almost any mobile RSS app — Reeder, FeedMe, NetNewsWire, or even older apps like Press — and sync your feeds without needing a dedicated server-side app.

Self-Hosted RSS Reader: Docker Compose Setup on Your NAS

Deploying FreshRSS via Docker Compose is the simplest path for most NAS users. The official image is well-maintained, and the setup takes under ten minutes. Below is a production-ready docker-compose.yml that uses SQLite (sufficient for nearly all personal use) and includes a MariaDB option if you prefer a client-server database.

256MBRAM at Idle
5WTypical Power Overhead
500MBDisk Usage (SQLite)
1
Create the Compose File

On your NAS, navigate to your Docker config directory (e.g., /docker/freshrss) and create a docker-compose.yml file with the content below.

2
Adjust Environment Variables

Set CRON_MIN to how often you want feeds refreshed (e.g., '*/30 * * * *' for every 30 minutes). Set TZ to your timezone.

3
Start the Container

Run docker compose up -d and access FreshRSS at http://your-nas-ip:8080. Complete the web installer, choosing SQLite when prompted.

version: '3.8'
services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      - CRON_MIN='*/30 * * * *'
      - TZ=America/New_York
    volumes:
      - ./data:/var/www/FreshRSS/data
      - ./extensions:/var/www/FreshRSS/extensions
Tip:

If you plan to host FreshRSS alongside other services on a single machine, check out our Best Docker Server Build 2026: Hosting Dozens of Containers at Home guide for hardware recommendations that can handle a stack of lightweight apps.

FreshRSS vs Miniflux: Which Self-Hosted Reader Fits Your Workflow?

Miniflux is another popular self-hosted RSS reader, but it takes a deliberately minimal approach — no extensions, no themes, no built-in scraper. FreshRSS offers a richer feature set for users who want more control.

Feature FreshRSS Miniflux
Built-in web scraper Yes (CSS/HTML XPath) No
API compatibility Google Reader + Fever Fever only (via plugin)
Extensions/plugins Yes (official repo) No
Database options SQLite, MySQL, PostgreSQL PostgreSQL only
Mobile app support Broad (Reeder, FeedMe, etc.) Good (Fever-compatible apps)

If you want a no-frills reader that just works and you don’t need a scraper, Miniflux is a fine choice. But for most homelab users, FreshRSS’s built-in scraper and wider API support make it the more practical option, especially if you follow sites that have dropped RSS.

Self-Hosted News Aggregator: Connecting a Mobile RSS App

Once FreshRSS is running, you’ll want to read your feeds on your phone. The process is straightforward thanks to FreshRSS’s API support.

1
Enable the API in FreshRSS

Log into your FreshRSS web interface, go to Administration → Authentication, and enable “Allow API access.” Then go to Profile → API to generate an API password (separate from your login password).

2
Get Your API Endpoint URL

Your Fever API endpoint will be http://your-nas-ip:8080/api/fever.php. For Google Reader API, use http://your-nas-ip:8080/api/greader.php.

3
Configure Your Mobile App

In Reeder (iOS/macOS), FeedMe (Android), or NetNewsWire, choose “FreshRSS” or “Fever API” as the service type. Enter the endpoint URL and your API credentials.

Good to Know:

If you’re running FreshRSS behind a reverse proxy (e.g., Nginx Proxy Manager or Traefik), use the external HTTPS URL as your endpoint. Most mobile apps handle self-signed certificates poorly, so consider using a free Let’s Encrypt certificate via your reverse proxy.

Setting Up the Built-In Web Scraper for Sites Without RSS

This is where FreshRSS really shines. Many popular sites — including some major news outlets and blogs — have removed RSS feeds entirely. FreshRSS’s “HTML + XPath” feature lets you scrape any page and turn it into a feed.

1
Identify the Content Selector

Open the site you want to scrape in your browser, right-click the article content area, and select “Inspect.” Look for a unique CSS class or ID that wraps the article text, e.g., .post-content or #article-body.

2
Create the Feed in FreshRSS

In FreshRSS, click Subscriptions → Manage → Add a feed. Paste the site’s URL, then scroll down to “HTML + XPath” settings. Enter your CSS selector (e.g., .post-content) in the “XPath” field. Check “Use this page as a web scraping source.”

3
Test and Adjust

FreshRSS will show a preview of the scraped content. If it’s incomplete or includes unwanted elements, refine your selector. For list pages (e.g., a blog homepage), you may need a more complex XPath like //div[@class='post']//a.

💾
Key RuleThe scraper respects the same-origin policy — it only works for pages on the same domain as the URL you provide. You cannot scrape content from a different domain.

Minimal Resource Footprint: Running FreshRSS Alongside Other Apps

FreshRSS is designed to be lightweight. On a typical NAS running Docker, it consumes around 256MB of RAM at idle and spikes to about 512MB during feed refreshes. Disk usage with SQLite is under 500MB for a few hundred feeds, and the CPU load is negligible — even an Intel Celeron N5095 handles refreshes without breaking a sweat.

This makes FreshRSS an ideal companion for other lightweight homelab apps. You can run it alongside a Jellyfin media server on the same machine without resource contention. If you’re considering which NAS OS to use for your stack, our TrueNAS vs Unraid comparison covers how each platform handles Docker containers, which is relevant for deploying FreshRSS.

💾 Expert Note:

FreshRSS’s SQLite backend is fine for up to about 500 feeds and 10,000 articles. Beyond that, you may notice slower query performance during searches or feed refreshes. If you plan to archive years of articles, consider switching to MariaDB or PostgreSQL during the initial setup — migrating databases later is possible but requires manual steps. For 99% of homelab users, SQLite is the right choice and saves you an extra database container.

Which Should You Choose: FreshRSS or a Cloud Reader?

If you already have a NAS running 24/7 and you value privacy, unlimited feeds, and offline access to your data, FreshRSS is the clear winner. It costs nothing beyond your existing hardware power and gives you features — like the built-in scraper and API compatibility — that many paid cloud readers lack.

For users who want a zero-maintenance setup and don’t mind a small monthly fee, a cloud reader is simpler. But for the homelab crowd, FreshRSS is a no-brainer: it’s free, lightweight, and puts you in control. Start with the Docker Compose setup above, connect your mobile app, and you’ll have a private news aggregator running in under 15 minutes.

Frequently Asked Questions

Does FreshRSS work with mobile RSS apps?

Yes, FreshRSS supports both the Google Reader API and the Fever API, which are compatible with virtually every major mobile RSS app. On iOS, apps like Reeder and NetNewsWire connect directly. On Android, FeedMe and Read You are popular choices. You just need to enable API access in FreshRSS settings and enter the endpoint URL (e.g., http://your-nas-ip:8080/api/fever.php) along with your API password in the app.

Can FreshRSS create a feed for a site that doesn’t have one?

Yes, FreshRSS includes a built-in “HTML + XPath” web scraper that can extract content from any webpage and present it as an RSS feed. You provide the page URL and a CSS/XPath selector that identifies the article content area. FreshRSS then polls the page periodically and scrapes new articles. This works for most static websites, though it may not handle JavaScript-heavy single-page apps (SPAs) well.

Is SQLite enough for FreshRSS or do I need a real database?

For nearly all personal homelab use — up to about 500 feeds and 10,000 stored articles — SQLite is perfectly sufficient and is the simplest option. It requires no separate database container, consumes minimal disk space (typically under 500MB), and performs well for daily feed refreshes and searches. If you plan to archive hundreds of thousands of articles or have multiple concurrent users, MariaDB or PostgreSQL will offer better performance. You can start with SQLite and migrate later, but it’s easier to choose a client-server database from the start if you anticipate heavy use.

How much RAM does FreshRSS actually need?

FreshRSS is very lightweight. At idle, it typically uses around 256MB of RAM. During feed refreshes — especially when scraping multiple sites — it may spike to 512MB for a few seconds. The official Docker image runs on a PHP-FPM base, which is efficient. You can comfortably run FreshRSS alongside other containers on a system with 8GB of RAM. Even a 4GB system like an Intel N100 mini PC can handle it, though you’ll want to monitor memory if you run many other services.

📋 Sources & Last Verified:

Last verified: July 10, 2026. Specifications cross-checked against FreshRSS official documentation and Docker image metadata.

🛡 Shop Recommended Hardware

Prices and stock verified regularly by our affiliate partners. As an affiliate, HomeLabCost may earn a commission on qualifying purchases at no extra cost to you.

Browse Hardware Picks →

homelabcost

HomeLabCost editor covering NAS builds, hardware selection, and homelab server setup guides.

Leave a Reply

Your email address will not be published. Required fields are marked *