← All Guides
beginner

FreshRSS: Self-Hosted RSS Reader Setup

Deploy FreshRSS on Docker to follow blogs, news, and podcasts through a single self-hosted feed reader, with multi-device sync and app support.

Budget Homelab ·
dockertoolsself-hosting

RSS never went away. The feeds are still there for most blogs, news sites, and podcasts. What died was the tooling that made them comfortable to use. FreshRSS brings it back — a self-hosted feed reader with a clean interface, multi-device sync via the Fever and Google Reader-compatible APIs, and no algorithm deciding what you read.

If you’re tired of relying on social media to discover content, or you just want to follow 30 blogs without checking 30 websites, FreshRSS is the solution.

What FreshRSS Does

FreshRSS aggregates RSS, Atom, and JSON Feed sources. You subscribe to a feed URL, and FreshRSS fetches new articles on a schedule. Everything is stored locally and presented in a clean reader interface.

The Fever and Google Reader API compatibility is the important part for multi-device use — most RSS reader apps (Reeder, NetNewsWire, ReadKit, Fluent Reader, Unread) support at least one of these APIs. Set up FreshRSS once, connect all your apps to it, and your read state stays synchronized across devices.

Installation

mkdir -p /opt/freshrss/data

Create /opt/freshrss/docker-compose.yml:

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    environment:
      - TZ=America/Chicago
      - CRON_MIN=*/15
      - FRESHRSS_ENV=production
    volumes:
      - /opt/freshrss/data:/var/www/FreshRSS/data
      - /opt/freshrss/extensions:/var/www/FreshRSS/extensions
    ports:
      - "8060:80"
    restart: unless-stopped

TZ — Set your timezone. Affects timestamps on articles.

CRON_MIN=*/15 — FreshRSS fetches new articles from all feeds every 15 minutes. Adjust to */30 or */60 if you want less frequent updates and lower resource usage.

cd /opt/freshrss
docker compose up -d

Access the interface at http://YOUR_SERVER_IP:8060.

Initial Setup

The setup wizard runs on first access:

  1. Language — select your language
  2. Database — choose SQLite (simple, no separate database container needed for a personal install) or MySQL/Postgres if you want a more robust option
  3. Admin account — create your username and password

After setup completes, you’re at the main FreshRSS interface.

Adding Feeds

Click Subscriptions > Add a subscription > paste a feed URL.

If you don’t have the feed URL, try appending /feed, /rss, /atom.xml, or /feed.xml to a blog’s homepage. FreshRSS also has an auto-discovery feature — paste the page URL and it’ll try to find the feed.

Common feed URL patterns:

Organize subscriptions into categories (create them under Subscriptions > Manage). Useful groupings: News, Blogs, Tech, Podcasts, YouTube.

Enabling the API (For App Sync)

To connect RSS apps to FreshRSS, enable the API:

Settings > Authentication — check “Allow API access.”

Settings > Profile — set an API password (can be the same as your login password, or different).

The API endpoints are:

Most modern RSS apps support Google Reader API. Use that one unless your app specifically says Fever.

Connecting Apps

iOS/macOS — Reeder 5:

iOS — Unread:

Windows/Linux — Fluent Reader:

Android — Read You or Capy Reader:

Each app stores your read state back to FreshRSS, so marking something read on your phone marks it read everywhere.

Filtering and Rules

FreshRSS has a filter system for automatically marking items read, highlighting items, or hiding items based on rules:

Subscription > Manage > [feed name] > Filters

Useful filters:

This helps with high-volume feeds like tech news sites where you only care about specific topics.

OPML Import/Export

If you’re moving from another RSS reader:

Export from old reader: Find the OPML export option and download the file.

Import to FreshRSS: Subscriptions > Import/Export > Import an OPML file

FreshRSS imports all your subscriptions in bulk. This takes a minute for large import files.

Export your FreshRSS subscriptions periodically as OPML — it’s a backup of your feed list that works with any RSS reader.

Backups

Back up the data directory:

tar -czf /backup/freshrss-$(date +%Y%m%d).tar.gz /opt/freshrss/data/

The data directory contains your database (SQLite file), feed configurations, and read state. Back it up weekly at minimum.

Extensions

FreshRSS has an extension system for additional features. Add extensions by placing them in the /opt/freshrss/extensions directory (which is volume-mounted).

Notable extensions:

Browse available extensions at the FreshRSS extensions repository.

Keeping It Updated

cd /opt/freshrss
docker compose pull
docker compose up -d

FreshRSS releases are infrequent and stable. Safe to let Watchtower handle this automatically.