Install via docker compose
# docker-compose.yml
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
ports:
- "127.0.0.1:8080:80"
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
TZ: "America/Toronto"
CRON_MIN: "*/15" # refresh feeds every 15 minutes
ADMIN_EMAIL: amir@example.com
ADMIN_PASSWORD: <long-random>
ADMIN_API_PASSWORD: <long-random> # for mobile apps
PUBLISHED_PORT: 443
docker compose up -d
docker compose logs -f freshrss
The admin user is auto-created on first start (using the env credentials). Subsequent users can be added via the UI under Administration → Manage Users.
Reverse proxy
# Caddy
rss.example.com {
reverse_proxy 127.0.0.1:8080
}
Adding feeds
Click + (top-left) → "Add a feed" → paste a URL. FreshRSS detects feed type automatically; for sites that don't expose a feed URL prominently, it scans the homepage's <link rel="alternate"> tags. If a site has no feed at all, the "Web scraping" extension can synthesize one from CSS selectors.
Bulk import: Administration → Import / Export → upload an OPML file (the standard interchange format every other RSS reader supports). From Feedly / Inoreader / NewsBlur / The Old Reader, export OPML, import here.
Organize
- Categories — flat folders to group feeds (Tech, Personal Blogs, News).
- Tags / Labels — per-article labels you apply manually or via filters.
- Filter actions — rules that auto-tag / star / mark-as-read / discard incoming articles based on title / content / author / feed.
- Favorites — star an article; surfaces in the "Favorites" view across feeds.
Full-text extraction
Many sites publish only excerpts in their feeds. FreshRSS's optional "Content extraction" feature fetches the full article from the linked URL and replaces the excerpt with the full content. Per-feed toggle: Subscriptions → Settings on a feed → "Retrieve full text."
The bundled extractor uses standard scrape rules (per-site CSS / XPath selectors in a downloadable rule set), similar to Mozilla Readability or fivefilters.org. Works for ~90% of mainstream sites; for the rest, write a custom selector in the rule editor.
Mobile apps
FreshRSS exposes both the Fever API (older, simpler, used by many iOS/macOS clients) and the Google Reader API (used by modern Android clients). Configure once at Administration → System → API Access; in the mobile app, choose the API type, enter the server URL + your username + API password (separate from web password).
Compatible clients:
- Reeder 5 (iOS / macOS) — via Fever API
- NetNewsWire (iOS / macOS) — native Fever / Reader API support
- Unread (iOS) — via Fever
- FeedMe (Android) — native Reader API
- FocusReader (Android) — native
- News+ (Android, F-Droid) — native
Extensions
Extensions add per-feed and global features. The official extension repo includes:
- YouTube — turn a YouTube channel URL into a richer feed with thumbnails + descriptions.
- Twitter / X bridge — via RSS-Bridge, expose X accounts as feeds.
- Mastodon / Bluesky — same; their native RSS support is also built in.
- Tweaks — UI customizations.
- Webhook — POST new articles to a configurable URL (great for n8n triggers; see that tutorial).
Install by dropping the extension's directory in /var/www/FreshRSS/extensions/ (the mounted volume).
RSS-Bridge: feeds from sites without feeds
Many modern sites have removed their RSS feeds. RSS-Bridge is a sister project that scrapes specific sites and publishes the result as a feed: Twitter, Reddit subs, GitHub releases, Bandcamp, Mixcloud, Telegram channels, Patreon, Substack, and ~200 others.
docker run -d \
--name rss-bridge \
--restart unless-stopped \
-p 127.0.0.1:3080:80 \
-v ./rss-bridge-whitelist.txt:/app/whitelist.txt:ro \
rssbridge/rss-bridge:latest
Add the bridge URLs to FreshRSS as regular feeds.
Performance + scaling
For one user with a few hundred feeds, the default SQLite backend is fine. For more users or thousands of feeds, switch to MySQL/MariaDB or PostgreSQL (configurable in the install wizard or by editing ./data/config.php). The per-feed refresh cron honors the CRON_MIN env var; for very-frequent-update feeds (news), drop it to */5; for slow feeds, 0 */6 * * * is fine.
Backups
Two things:
./data/— users, subscriptions, articles cache, favorites, filters../extensions/— any third-party extensions installed.
Both small; restic on the parent directory covers it. FreshRSS also has a built-in OPML export — one-click backup of just the subscription list (Administration → Import / Export).
FreshRSS vs alternatives
- Miniflux — Go-based, single binary, even simpler ops. Slightly less polished UI; doesn't have the extension system. Both great picks; FreshRSS wins on multi-user and extension flexibility; Miniflux wins on minimalism.
- Tiny Tiny RSS — the older predecessor; less actively maintained; FreshRSS forked the better parts.
- Inoreader / Feedly / NewsBlur — hosted options; pay-per-month; FreshRSS is the self-hosted free equivalent.
For "I want my RSS reading life on a server I control, with mobile sync that works in the apps I already like," FreshRSS is the most-featured pick in 2026.