Self-Hosted RSS: Feed Readers, Sync, and OPML Hygiene
Published 2026-08-26 · 16 min read · By Ben Liu
When to self-host FreshRSS or Miniflux, how to keep OPML portable, and fetch habits that respect publishers without turning RSS into another inbox.
Who this guide is for
You read news, blogs, and release notes daily — and you want sync across phone and laptop without a SaaS reader that changes pricing or kills features. This guide covers **self-hosted readers**, **OPML exports**, and **fetch etiquette** for a sustainable feed habit.
RSS is not "free internet scraping." It is a contract with publishers who chose to offer feeds. Self-hosting gives you control of your subscription list and reading state — not permission to hammer sites.
Self-host vs local client
| Situation | Prefer |
|---|---|
| Solo reader on one laptop | Local client (NetNewsWire, Feedly-free tier, etc.) may be enough |
| Phone + desktop sync you control | Self-hosted FreshRSS or Miniflux |
| Shared household "release notes" folder | Self-hosted with one curated category |
| Hundreds of feeds with filters | Self-hosted + aggressive curation rules |
Do not self-host to avoid paying for a good client — self-host when sync, filters, or data residency matter to you.
FreshRSS vs Miniflux
**FreshRSS** — richer UI, more extensions, heavier PHP stack; good when non-technical readers need a familiar web UI.
**Miniflux** — minimal, fast, Go + PostgreSQL; excellent for keyboard-driven solo reading.
Both support OPML import/export, multiple users, and API clients. Pin versions; both need database backups alongside config.
services:
miniflux:
image: miniflux/miniflux:2.2.1
env_file: .env
networks: [internal]
miniflux-db:
image: postgres:16.2
volumes: [miniflux_db:/var/lib/postgresql/data]
networks: [internal]
caddy:
image: caddy:2.8.4
ports: ["443:443"]
networks: [edge, internal]
networks:
edge:
internal:
internal: true
volumes:
miniflux_db:OPML is your portability insurance
Export OPML monthly to a dated file in git or encrypted backup storage. OPML is the subscription list — not your read history. Treat it like a password vault export: small, precious, restorable elsewhere.
# after export, sanity-check feed count
grep -c 'outline' feeds-2026-08-26.opmlBefore deleting any SaaS reader, export OPML and import into the self-hosted instance on a staging URL. Confirm feed count matches and spot-check five feeds that use unusual XML (YouTube, GitHub releases, podcasts).
Curation beats aggregation
Unread counts above a few hundred mean the list is broken — not that you need a better reader. Rules that work:
- Cap active feeds (many households stay under 80 with discipline)
- Unsubscribe when a feed posts more than you can read in a week
- Separate **release notes** (tools you operate) from **general news** (categories or tags)
- Mute or filter noisy feeds instead of letting guilt accumulate
A self-hosted reader with 400 silent feeds still pages you mentally. Curate aggressively.
Fetch ethics and reliability
Respect `Cache-Control` and reasonable poll intervals. Default FreshRSS/Miniflux schedules are often fine; do not cron-fetch every feed every minute on a home connection — you will get blocked and blame the reader.
When a feed breaks after a site redesign, fix the URL or use the publisher's canonical feed link — do not add five duplicate entries hoping one works.
Authentication and exposure
Readers are login portals to your interests — useful reconnaissance for attackers. Put the UI behind TLS, strong passwords or SSO, and avoid public WAN exposure without MFA. VPN-first admin is fine for solo use.
If you enable API keys for mobile clients, rotate them when a phone is lost. Document which client holds which key in your wiki runbook.
Backups include the database
Feed list and read state live in the database. Backup Postgres/MySQL volumes with the same schedule as other small apps. After restore, open the reader and confirm unread counts and starred items on one phone client.
Mobile clients
Miniflux pairs well with native apps that speak the Miniflux API. FreshRSS has broader client support. Test one phone client during the first weekend — "works on desktop" is not done until mobile sync succeeds off LAN.
When RSS is the wrong tool
Skip RSS for: real-time incident alerts (use monitoring), chat-style discussions (use forums or email lists), and paywalled content without official feeds. Do not scrape HTML when a feed does not exist — that is a different product and legal question.
Week-one checklist
- OPML imported; count matches source
- One phone client synced off Wi‑Fi
- Backup job includes reader DB volume
- Five feeds tested after import (including one podcast if used)
- Unsubscribe rule documented (e.g. review monthly)
Lab notes pending — replace with measured values before publishing claims.
[Add real environment data here]
Reader (FreshRSS/Miniflux) + tag:
DB volume:
Mobile client:
OPML export path:
Active feed count target:Related reading
See What is self-hosting, Docker Compose hardening, Self-hosted wiki for households, Lightweight monitoring, and Secure remote access.
Explore more
Related guides
- Self-Hosted Wiki for Households and Tiny Teams
Pick BookStack vs Wiki.js vs Outline for the job, structure pages people will actually use, and back up content before the wiki becomes the only copy.
- Ollama on a Homelab: Local LLMs Without Melting the Rack
Operator guide to running Ollama at home — install paths, Docker, model disk gravity, GPU vs CPU, API exposure, and a sane first weekend with Open WebUI.
- Updating Self-Hosted Apps Without Fear
A repeatable update ritual: changelog, snapshot, migrate, verify, and roll back — with lab notes from upgrade nights.
- The Reality of Self-Hosting Email in 2026
Why inbound/outbound mail is a reputation business: SPF/DKIM/DMARC, dirty IPs, hybrid patterns, and when not to self-host MTA.