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:
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.
On your NAS, navigate to your Docker config directory (e.g., /docker/freshrss) and create a docker-compose.yml file with the content below.
Set CRON_MIN to how often you want feeds refreshed (e.g., '*/30 * * * *' for every 30 minutes). Set TZ to your timezone.
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
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.
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).
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.
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.
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.
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.
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.”
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.
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.
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.
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 →