← All articles
PRODUCTIVITY FreshRSS: A Self-Hosted RSS Reader That Respects You... 2026-02-09 · freshrss · rss · feeds

FreshRSS: A Self-Hosted RSS Reader That Respects Your Attention

Productivity 2026-02-09 freshrss rss feeds reader self-hosted productivity

Social media algorithms decide what you see. News sites bury articles behind popups and paywalls. Email newsletters clutter your inbox. Meanwhile, RSS — the 25-year-old protocol that lets you subscribe directly to content sources — still works perfectly. It just needs a reader.

FreshRSS is a self-hosted RSS and Atom feed aggregator. You subscribe to websites, blogs, YouTube channels, podcasts, and news sources. FreshRSS checks them periodically, collects new articles, and presents them in a clean, chronological feed. No algorithm. No ads. No tracking. Just the content you chose to follow.

Why Self-Host an RSS Reader

Cloud RSS readers exist — Feedly, Inoreader, NewsBlur. They work fine, but:

Self-hosting an RSS reader costs nothing beyond the server you're already running, gives you unlimited feeds, and puts you in complete control.

FreshRSS vs. Miniflux vs. Tiny Tiny RSS

Feature FreshRSS Miniflux Tiny Tiny RSS
Interface Feature-rich, customizable Minimal, fast Feature-rich, complex
Language PHP Go PHP
Resource usage Low (~50-100 MB) Very low (~20-30 MB) Moderate (~100-200 MB)
Extensions/plugins Yes (large ecosystem) No (by design) Yes (plugin system)
Themes Multiple built-in + custom Light/Dark only Multiple + custom
API support Google Reader, Fever Miniflux, Fever, GReader Own API, plugins
Mobile app support Via GReader/Fever API Native + via APIs Own Android app
Multi-user Yes Yes Yes
Full-text extraction Via extension Built-in Via plugin
WebSub/PubSubHubbub Yes Yes Yes
Setup complexity Simple Very simple Moderate
Development activity Active Active Slower
Philosophy Feature-rich, extensible Minimalist, opinionated Kitchen sink

When to choose FreshRSS

When to choose Miniflux

When to choose Tiny Tiny RSS

For most people starting fresh, FreshRSS or Miniflux is the right choice. FreshRSS if you want features, Miniflux if you want minimalism.

Docker Setup

FreshRSS is one of the simplest self-hosted services to deploy:

services:
  freshrss:
    image: freshrss/freshrss:latest
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - freshrss_data:/var/www/FreshRSS/data
      - freshrss_extensions:/var/www/FreshRSS/extensions
    environment:
      TZ: America/Los_Angeles
      CRON_MIN: "3,33"     # Check feeds at :03 and :33 past each hour
    logging:
      options:
        max-size: "10m"

volumes:
  freshrss_data:
  freshrss_extensions:

Start it:

docker compose up -d

Visit http://your-server:8080 and walk through the setup wizard:

  1. Choose your language
  2. Check system requirements (should all pass in Docker)
  3. Configure the database (SQLite for simplicity, PostgreSQL for multi-user)
  4. Create your admin account
  5. Done

Using PostgreSQL (recommended for multi-user)

For shared or heavily-used instances, use PostgreSQL instead of SQLite:

services:
  freshrss:
    image: freshrss/freshrss:latest
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - freshrss_data:/var/www/FreshRSS/data
      - freshrss_extensions:/var/www/FreshRSS/extensions
    environment:
      TZ: America/Los_Angeles
      CRON_MIN: "3,33"
    depends_on:
      freshrss-db:
        condition: service_healthy

  freshrss-db:
    image: postgres:16-alpine
    restart: unless-stopped
    volumes:
      - freshrss_db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: freshrss
      POSTGRES_USER: freshrss
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U freshrss"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  freshrss_data:
  freshrss_extensions:
  freshrss_db:

During the setup wizard, select PostgreSQL and enter: host freshrss-db, database freshrss, user freshrss, and the password from your .env.

Adding Feeds

Standard RSS/Atom feeds

Click Subscription management → Add feed and paste the feed URL. FreshRSS auto-detects the feed format.

Most blogs and news sites still have RSS feeds, even if they don't advertise them:

Organizing feeds

FreshRSS supports categories for organizing feeds:

Create categories first, then assign feeds when subscribing.

Feed discovery

If a site doesn't advertise its feed, try these common patterns:

https://example.com/feed
https://example.com/rss
https://example.com/atom.xml
https://example.com/feed.xml
https://example.com/index.xml

Or use a browser extension like "Get RSS Feed URL" to detect feeds on any page.

API Support for Mobile Apps

FreshRSS implements two widely-supported APIs, which means you can use dozens of existing mobile RSS readers:

Google Reader API

FreshRSS implements a Google Reader-compatible API. Enable it in Settings → Authentication → Allow API access.

Set your API password (separate from your login password) under Profile → API Management.

Compatible apps:

Fever API

An older but widely-supported API. Enable it the same way.

Compatible apps:

Which API to use

The Google Reader API is more feature-complete (supports categories, tagging, starring). Use Fever only if your preferred app doesn't support Google Reader.

Configuration in mobile apps

Most apps need three things:

  1. Server URL: https://freshrss.yourdomain.com/api/greader.php (for GReader API)
  2. Username: Your FreshRSS username
  3. Password: Your API password (not your login password)

Extensions

FreshRSS has an active extension ecosystem. Install extensions by placing them in the extensions directory or using the built-in extension manager.

Essential extensions

CustomCSS: Add custom CSS to change the look of FreshRSS without creating a full theme.

Full-Text RSS: Extracts the full article content for feeds that only provide summaries. This is hugely useful — many news sites only include the first paragraph in their RSS feed.

# Install via extensions directory
git clone https://github.com/kevinpapst/freshrss-fulltextrss \
  /path/to/freshrss/extensions/xExtension-FullTextRss

YouTube/PeerTube: Enhances video feed entries with embedded players.

Auto-Read: Automatically marks articles as read based on rules (useful for high-volume feeds where you only want to see the highlights).

FilterTitle: Filter articles by title keywords — hide clickbait or topics you don't care about.

Installing extensions

  1. Download or clone the extension into the extensions/ directory
  2. Go to Settings → Extensions in FreshRSS
  3. Enable the extension

With Docker, mount the extensions volume and clone extensions there:

docker exec freshrss ls /var/www/FreshRSS/extensions/

Feed Refresh Configuration

The CRON_MIN environment variable controls when FreshRSS checks for new articles:

environment:
  CRON_MIN: "3,33"   # Every 30 minutes (at :03 and :33)

Other examples:

For most use cases, checking every 30 minutes is a good balance between freshness and politeness to feed servers.

WebSub for real-time updates

FreshRSS supports WebSub (formerly PubSubHubbub), which provides real-time push notifications for feeds that support it. Many major services (YouTube, WordPress.com, Blogger) support WebSub.

When WebSub is available, FreshRSS receives new articles instantly rather than waiting for the next poll cycle. This is enabled by default — no configuration needed.

Keyboard Shortcuts

FreshRSS has keyboard shortcuts for efficient reading:

Key Action
j / k Next / previous article
n / p Next / previous feed
o / Enter Open article
v Open in new tab
s Star/favorite article
m Mark as read/unread
shift+a Mark all as read
f Toggle full screen

These follow the conventions from Google Reader (muscle memory preserved for old-school RSS users).

Multi-User Setup

FreshRSS supports multiple users with separate accounts:

  1. Go to Administration → User management
  2. Create new users with their own credentials
  3. Each user has independent feed subscriptions, categories, and settings

Users share the same FreshRSS instance but have completely separate feed lists and read states. This is useful for families or small teams.

OIDC authentication

FreshRSS supports OIDC for single sign-on with Authentik, Keycloak, or other identity providers:

environment:
  OIDC_ENABLED: "1"
  OIDC_PROVIDER_METADATA_URL: "https://auth.yourdomain.com/.well-known/openid-configuration"
  OIDC_CLIENT_ID: "freshrss"
  OIDC_CLIENT_SECRET: "your-client-secret"
  OIDC_SCOPES: "openid email profile"
  OIDC_REMOTE_USER_CLAIM: "preferred_username"

OPML Import and Export

Already have feeds in another reader? Export them as OPML and import into FreshRSS:

  1. Subscription management → Import/Export
  2. Upload your .opml or .xml file
  3. All feeds and categories are imported

Export works the same way — download your feeds as OPML for backup or migration. Regularly exporting your OPML is a good practice even if you're not planning to switch readers.

Resource Requirements

FreshRSS is remarkably lightweight:

Component RAM CPU Storage
FreshRSS (PHP-FPM) 30-80 MB Minimal 100 MB
SQLite (< 500 feeds) Included Minimal 50-500 MB
PostgreSQL (optional) 50-100 MB Minimal 100-500 MB
Total ~50-150 MB 0.5 cores < 1 GB

This runs comfortably on a Raspberry Pi. Storage depends on how many feeds you follow and how long you retain articles. With 200 feeds and 90 days retention, expect 200-500 MB of database.

Retention settings

Configure how long articles are kept:

For high-volume feeds (news sites, Reddit), lower retention saves storage. For personal blogs, keep everything.

Honest Limitations

Backup Strategy

  1. OPML export: Regularly export your feed list. This is the most important backup — everything else can be reconstructed.
  2. Database: For SQLite, back up the data volume. For PostgreSQL, pg_dump.
  3. Extensions: Back up the extensions directory or keep a list of installed extensions.
  4. Docker volumes: docker compose down && tar czf freshrss-backup.tar.gz /path/to/freshrss_data

The Bottom Line

RSS is the best way to follow content on the internet. No algorithm. No ads. No engagement tricks. Just chronological updates from sources you chose.

FreshRSS makes self-hosting an RSS reader trivially easy. It takes 5 minutes to deploy, uses almost no resources, supports every major mobile reader app through standard APIs, and has an extension ecosystem for power users. If you follow more than a handful of websites, blogs, or YouTube channels, self-hosting FreshRSS will improve how you consume information.

The only question is whether you prefer FreshRSS's feature-rich approach or Miniflux's minimalism. Try both — they're both so lightweight you can run them simultaneously and pick the one that fits your style.

Resources