DEV Community

Royce
Royce

Posted on • Originally published at ossalt.com

Self-Host Miniflux: Minimalist RSS Feed Reader 2026

TL;DR

Miniflux (Apache 2.0, ~6K GitHub stars, Go) is a minimalist, opinionated self-hosted RSS feed reader built for speed and keyboard-driven workflows. No JavaScript frameworks, no bloat — just fast, clean RSS reading. Feedly charges $8/month for unlimited sources. Miniflux is free, stores only what you need, and provides a Fever API so existing RSS apps like Reeder and Unread work seamlessly.

Key Takeaways

  • Miniflux: Apache 2.0, ~6K stars, Go — minimalist, keyboard-driven RSS reader
  • Fever API: Compatible with Reeder, Unread, and other Fever-compatible iOS/Android apps
  • Full-text extraction: Fetch full article content from sites that only provide summaries
  • Anti-adblock proxying: Fetch articles through a proxy to bypass paywalls (experimental)
  • Fast: SQLite or PostgreSQL, built in Go — extremely fast even with thousands of feeds
  • vs FreshRSS: Miniflux is more opinionated and minimal; FreshRSS has more customization

Part 1: Docker Setup

# docker-compose.yml
services:
  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      DATABASE_URL: "postgres://miniflux:${DB_PASSWORD}@db/miniflux?sslmode=disable"
      RUN_MIGRATIONS: 1
      CREATE_ADMIN: 1
      ADMIN_USERNAME: admin
      ADMIN_PASSWORD: "${ADMIN_PASSWORD}"
      BASE_URL: "https://rss.yourdomain.com"
      # Fetch full content for truncated feeds:
      FETCH_YOUTUBE_WATCH_TIME: 1
      POLLING_FREQUENCY: 60      # Check feeds every 60 minutes
      CLEANUP_FREQUENCY_HOURS: 24
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: miniflux
      POSTGRES_USER: miniflux
      POSTGRES_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U miniflux"]
      interval: 5s
      start_period: 20s

volumes:
  db_data:
Enter fullscreen mode Exit fullscreen mode
docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Visit http://your-server:8080 → log in with admin credentials.


Part 2: HTTPS with Caddy

rss.yourdomain.com {
    reverse_proxy localhost:8080
}
Enter fullscreen mode Exit fullscreen mode

Part 3: Add Feeds

Via web UI

  1. + Add Feed → paste RSS URL
  2. Feed auto-detected and added

Common feed URL patterns:

WordPress sites:    https://site.com/feed/
Ghost blogs:        https://site.com/rss/
Substack:           https://username.substack.com/feed/
YouTube channel:    https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
Hacker News:        https://news.ycombinator.com/rss
Reddit subreddit:   https://www.reddit.com/r/selfhosted.rss
GitHub releases:    https://github.com/owner/repo/releases.atom
Enter fullscreen mode Exit fullscreen mode

Import OPML

  1. Settings → Import/Export → Import OPML
  2. Upload your subscriptions.opml from Feedly, Newsblur, etc.

Export from Feedly:

Feedly → Organize → Export → OPML → Download
Enter fullscreen mode Exit fullscreen mode

Part 4: Keyboard Shortcuts

Miniflux is optimized for keyboard-driven reading:

Key Action
j Next unread item
k Previous item
v Open original article
o Open original in new tab
f Toggle starred
m Toggle read/unread
d Fetch full content
g u Go to Unread
g s Go to Starred
g h Go to History
g f Go to Feeds
? Show shortcuts

Part 5: Full-Text Fetching

For sites that only provide article summaries in their RSS feed:

Automatic (per feed)

  1. Feed settings → Fetch original content: Enable
  2. Miniflux fetches the full article and stores it locally

Custom scraper rules

# Feed settings  Scraper rules (CSS selectors):
.article-body, article, .post-content
Enter fullscreen mode Exit fullscreen mode

Built-in scrapers

Miniflux has built-in full-text scrapers for 100+ popular sites including:

  • The New York Times, The Guardian, BBC
  • Ars Technica, Wired, The Verge
  • Medium articles

Part 6: Mobile App Integration

Miniflux supports the Fever API for compatibility with RSS apps:

Enable Fever API

  1. Settings → Integration → Fever API: Enable
  2. Username: your Miniflux username
  3. Password: set a separate Fever password

Fever API endpoint: https://rss.yourdomain.com/fever

Compatible apps

App Platform Notes
Reeder 5 iOS/macOS Best iOS RSS reader, Fever native
Unread iOS Clean, focused reading
NetNewsWire iOS/macOS Free, open source, excellent
ReadKit macOS Feature-rich desktop app
Fluent Reader Windows/Linux Cross-platform
Feeder Android Simple, open source

NetNewsWire setup

  1. File → New Miniflux Account
  2. URL: https://rss.yourdomain.com
  3. Username + API key (Settings → Integrations → API keys)

Part 7: Filters and Categories

Categories

  1. Categories → + Add category
  2. Name: Tech, News, Blogs
  3. Add feeds to categories when adding them

Filters (keep rules)

Automatically mark articles as read or starred based on patterns:

  1. Feed settings → Keep entry rules:
    • EntryTitle =~ kubernetes → Keep only articles about Kubernetes
  2. Block entry rules:
    • EntryTitle =~ sponsored → Auto-skip sponsored articles

Part 8: REST API

# Get API token:
# Settings → API Keys → + Create

TOKEN="your-api-token"
BASE="https://rss.yourdomain.com/v1"

# Get unread entries:
curl "$BASE/entries?status=unread&limit=10" \
  -H "X-Auth-Token: $TOKEN" | jq '.[].title'

# Mark entry as read:
curl -X PUT "$BASE/entries" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entry_ids": [1, 2, 3], "status": "read"}'

# Add a feed:
curl -X POST "$BASE/feeds" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"feed_url": "https://example.com/feed/", "category_id": 1}'

# Star an entry:
curl -X PUT "$BASE/entries/42/bookmark" \
  -H "X-Auth-Token: $TOKEN"
Enter fullscreen mode Exit fullscreen mode

Maintenance

# Update:
docker compose pull
docker compose up -d

# Backup:
docker exec miniflux-db-1 pg_dump -U miniflux miniflux \
  | gzip > miniflux-db-$(date +%Y%m%d).sql.gz

# Logs:
docker compose logs -f miniflux

# View feed errors:
# Feeds → Filter by "Parse error" to see broken feeds
Enter fullscreen mode Exit fullscreen mode

See also: FreshRSS — more customization and Google Reader API

See all open source RSS tools at OSSAlt.com/categories/productivity.

Top comments (0)