Miniflux

Privacy-first, opinionated feed reader built for speed and control—no bloat, no trackers, no JavaScript overhead.

9.4Kstars
903forks
Apache License 2.0
Go

Miniflux is a minimalist, self-hosted RSS/Atom/JSON Feed reader that treats privacy as a first-class feature rather than an afterthought. Every feed fetch automatically strips UTM parameters and other tracking tokens from URLs, removes pixel trackers, enforces a no-referrer policy, and routes media through an optional proxy to prevent third-party surveillance. The result is a reading experience that belongs entirely to you.

Built in Go and compiled to a single static binary with no external runtime dependencies, Miniflux pairs with PostgreSQL for durable storage and full-text search. Deployment is deliberately simple: Docker, a Debian/RPM package, or a standalone binary behind a reverse proxy—choose your path and you are live in minutes. Let’s Encrypt integration handles TLS automatically, and the app ships its own embedded HTTP server, templates, and static assets.

Miniflux does not try to be everything. There is no mobile app to install, no cloud sync to configure, and no opaque algorithm deciding what you read. What it does offer is a fast, keyboard-driven interface available in 20 languages, PWA support for home screen pinning, and 30+ integrations with services like Notion, Telegram, Wallabag, Readwise, and Ntfy for saving and sharing articles.

For teams and power users who want programmatic access, Miniflux exposes a documented REST API with official client libraries in Go and Python. It also speaks the Fever and Google Reader APIs, making it compatible with a broad ecosystem of existing RSS client applications on iOS, Android, and desktop.

What You Get

  • Multi-format Feed Parsing - Reads Atom 0.3/1.0, RSS 1.0/2.0, JSON Feed 1.0/1.1, and RDF with automatic format detection and graceful fallback for malformed feeds.
  • Built-in Tracker and Parameter Stripping - Automatically removes UTM parameters, fbclid, and dozens of other tracking tokens from every URL in every feed entry before you ever see them.
  • Local Readability Extraction - Fetches the original article page and extracts only readable content using a built-in Go port of the Readability algorithm, bypassing newsletter wrappers and click-bait summaries.
  • Custom CSS Scraper and Rewrite Rules - Defines per-site CSS selectors to extract article content and regex-based rules to rewrite, include, or exclude entries based on title, URL, or content patterns.
  • PostgreSQL Full-Text Search - Uses PostgreSQL’s native full-text search index to search across article titles, content, and authors across all subscribed feeds instantly.
  • 30+ Third-Party Integrations - Saves and shares articles to Notion, Instapaper, Wallabag, Readwise, Telegram, Discord, Slack, Ntfy, Pinboard, Linkding, Shaarli, and more via built-in integration handlers.
  • REST API with Go and Python Clients - Provides a fully documented REST API for automation, scripting, and building custom clients, with official client libraries in Go and Python.
  • WebAuthn and OAuth2 Authentication - Supports passkeys (WebAuthn), Google OAuth2, generic OpenID Connect, and reverse-proxy header authentication for flexible, phishing-resistant login.
  • Media Proxy for Privacy and HTTPS - Routes all embedded images and media through a configurable proxy endpoint, preventing third-party trackers from seeing your IP and eliminating mixed-content warnings.
  • Fever and Google Reader API Compatibility - Exposes Fever and Google Reader-compatible APIs so existing iOS, Android, and desktop RSS client apps work without modification.
  • OPML Import and Export - Imports and exports subscription lists via OPML files and supports direct URL import, making migration to or from other readers straightforward.
  • PWA and Keyboard-First Interface - Adds to mobile home screens as a Progressive Web App, supports extensive keyboard shortcuts for navigation, and optionally accepts custom user CSS and JavaScript for personalization.

Common Use Cases

  • Daily reading without distraction - A developer subscribes to 80 technical blogs and newsletters, relying on Miniflux’s tracker-stripped, JavaScript-free presentation to read articles with full focus rather than fighting cookie banners and auto-play videos.
  • Journalist research aggregation - A reporter subscribes to hundreds of industry RSS feeds and uses the full-text search and Notion integration to tag and save relevant articles to a shared workspace for team reference.
  • Automated feed monitoring with webhooks - A DevOps engineer configures Miniflux webhooks to POST new feed entries matching a regex pattern to an internal Slack channel, acting as a lightweight alert system for security advisories.
  • Privacy-respecting team news hub - A small startup runs a shared Miniflux instance behind SSO via OpenID Connect, so the whole team reads industry news through a single, ad-free interface without any cloud RSS service tracking reading habits.
  • Mobile reading on a self-hosted server - A privacy-conscious user hosts Miniflux on a $5 VPS, pins it to their iPhone home screen as a PWA, and reads feeds on the go using the Reeder or NetNewsWire app via the Google Reader API.
  • Podcast and media feed aggregation - A listener subscribes to podcast RSS feeds and uses Miniflux’s enclosure support to browse episode lists and open audio files directly, without installing a dedicated podcast app.

Under The Hood

Architecture Miniflux follows a strict layered architecture rooted in a single three-line entry point that delegates immediately to an internal CLI package, enforcing a hard boundary between application bootstrap and all business logic. Internal packages are partitioned by domain concern—reader, storage, api, ui, integration, worker, config—with each package exposing only the interfaces it needs and accepting dependencies through constructor injection rather than package-level globals. The background feed fetcher runs as a scheduler-driven worker pool coordinated through Go channels, decoupling feed polling from HTTP request handling. The entire build, lint, and integration test pipeline is orchestrated through a Makefile that provisions a real PostgreSQL instance, runs race-detected unit tests, and produces a CGO-disabled static binary in a single command.

Tech Stack The application is written entirely in Go and compiles to a single statically linked binary with no external runtime dependencies beyond a PostgreSQL database. PostgreSQL is accessed via the lib/pq driver with hand-written SQL and schema migrations—no ORM—giving complete control over query plans and index usage. Static assets, HTML templates, and locale files are embedded directly into the binary using Go’s embed package, eliminating file-system dependencies at runtime. The HTTP server is Go’s standard net/http with HTTP/2 support when TLS is enabled. Let’s Encrypt integration is handled natively. External dependencies are intentionally minimal: goquery for HTML parsing, tdewolff/minify for asset minification, go-webauthn for passkey support, and prometheus/client_golang for metrics.

Code Quality The codebase contains extensive test coverage across every functional layer: the HTML sanitizer has its own table-driven test suite with dozens of malformed-input cases, the URL cleaner tests cover specific tracker parameter patterns, the readability extractor runs against a testdata corpus of real articles, and the feed parsers test both valid and intentionally broken XML. Integration tests run against a live PostgreSQL instance to verify storage and query behavior end-to-end. Error handling is explicit throughout—no errors are silently swallowed—and the build enforces custom linters for logging conventions, SQL patterns, and license header compliance via golangci-lint. The project has a CONTRIBUTING.md, SECURITY.md, and man page, reflecting deliberate attention to developer and operator experience.

What Makes It Unique Miniflux’s defining characteristic is its commitment to doing less better rather than more badly. The built-in content sanitizer is a full HTML parser (using golang.org/x/net/html) rather than a tokenizer, meaning it matches browser parsing behavior and is substantially more resistant to injection bypasses than regex-based approaches. The URL cleaner maintains a curated list of tracking parameter patterns that is updated with every release. The reader package includes a local Readability implementation, a custom srcset parser following WebKit-style parsing rules, and per-domain scraper and rewrite rules that allow extraction of full-text content without relying on any third-party service. Combined with Fever and Google Reader API compatibility, Miniflux occupies a unique position as both a standalone reader and a privacy-preserving backend for existing RSS client ecosystems.

Self-Hosting

Miniflux is distributed under the Apache License 2.0, one of the most permissive open-source licenses available. You can use it commercially, modify it freely, distribute it in proprietary products, and run it as an internal service for your organization without any licensing fees or royalty obligations. The only requirements are preservation of the original copyright notice and the license text in distributed copies. There are no copyleft clauses that would require you to open-source your own code, and there are no license keys, feature gates, or phone-home checks in the codebase.

Self-hosting Miniflux means you are fully responsible for the operational stack: provisioning and managing a PostgreSQL database, handling backups, applying Miniflux version upgrades by replacing the binary or updating the Docker image, and monitoring for uptime. The resource requirements are genuinely low—the binary uses a few megabytes of RAM and negligible CPU even with several hundred active feeds—so it runs comfortably on a small VPS, a Raspberry Pi, or a shared server. Let’s Encrypt TLS is handled natively, reducing the certificate management burden. However, there is no built-in high-availability mode, no managed upgrade path, and no automated backup system; those are the operator’s responsibility.

There is no hosted or cloud version of Miniflux offered by the project, and no paid tier that adds enterprise features. Support is entirely community-driven through GitHub Issues and the project documentation at miniflux.app/docs. What you gain from self-hosting—complete data ownership, no subscription fees, no algorithmic feed curation, no third-party tracking of your reading habits—is exactly what the project is designed to deliver. Organizations that need SLAs, managed uptime, enterprise SSO onboarding, or dedicated support would need to either build that operational capability in-house or evaluate hosted alternatives.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search