FR
live

Miniflux Is a 20 MB RSS Reader That Reads Faster Than Your Browser

Miniflux is a Go-based RSS reader shipped as a single sub-20 MB binary with PostgreSQL as its only dependency. Version 2.3.3 hit 9,500 GitHub stars in July 2026 — here’s why this self-hosted minimalist beats FreshRSS on speed, not features.

Miniflux Is a 20 MB RSS Reader That Reads Faster Than Your Browser — ETTAYEB illustration

On July 24, 2026, Frédéric Guillot shipped Miniflux 2.3.3 — a maintenance release with 17 bug fixes and language detection for feeds. The binary still clocks in under 20 MB, depends on nothing but PostgreSQL, and runs on a Raspberry Pi without breaking a sweat. Meanwhile, FreshRSS — the other major self-hosted RSS reader — requires PHP 8.1+, the GMP extension, and weighs several hundred megabytes once every Composer dependency lands. This isn’t a debate about which one has more checkboxes. It’s a different question entirely: should your RSS reader really be heavier than the articles it reads?

Miniflux answers no. It’s been proving the point since 2013.

One binary, one database, zero JavaScript frameworks

Miniflux’s technical bet can be stated in a single sentence: every piece of code — backend logic, HTML templates, CSS, vanilla JavaScript, static assets — is compiled into one Go binary using the embed package. No 200 MB node_modules. No PHP-FPM to tune. No Redis. No ORM schema migrations that break every time you update.

The final executable weighs under 20 MB on Linux amd64. For context, FreshRSS’s symfony/framework-bundle alone exceeds that size before Composer even installs the rest of the dependency tree. Miniflux starts in under a second on a €5/month VPS. Its memory footprint sits between 50 and 100 MB RAM when handling hundreds of feeds.

The sole external dependency is PostgreSQL. Not SQLite, not MySQL, not MariaDB — PostgreSQL, period. The project owns this choice on its Opinionated page: supporting multiple databases adds complexity, and PostgreSQL provides native types (jsonb, inet, tsvector) that Miniflux uses directly, with no ORM layer in between.

yaml
services:
  miniflux:
    image: miniflux/miniflux:2.3.3
    ports:
      - "8080:8080"
    depends_on:
      db:
        condition: service_healthy
    environment:
      - DATABASE_URL=postgres://miniflux:${DB_PASS}@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=${ADMIN_PASS}

  db:
    image: postgres:16
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=${DB_PASS}
    volumes:
      - miniflux_db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "miniflux"]
      interval: 10s
      start_period: 30s

volumes:
  miniflux_db:
bash
# First launch
docker compose up -d

The web UI is available at http://your-server:8080. Credentials are whatever you set in ADMIN_USERNAME and ADMIN_PASSWORD. The RUN_MIGRATIONS=1 flag runs schema migrations automatically on startup — set it to 0 after the first launch, except when upgrading Miniflux itself.

What Miniflux deliberately doesn’t do

Miniflux’s philosophy is stated plainly on miniflux.app/opinionated.html: “The purpose of this application is to read feeds. Nothing else.” This isn’t a tagline — it’s a filter. Any feature that doesn’t directly serve feed reading gets rejected.

The result: Miniflux has no nested folders, no multi-user permission tiers, no drag-and-drop theme builder, no customizable dashboard, no reading statistics. What you get are categories (flat, one level), stars (favorites), a history log, and full-text search powered by PostgreSQL. That’s it.

This minimalism is a feature for three types of users:

  • The power reader processing 200+ articles a day. The interface is optimized for rapid scanning — a headline list, one-line summaries, fully keyboard-driven navigation. j/k move up and down, v opens the article in a new tab, m marks it as read. There’s no animation to slow down your scrolling.
  • The self-hoster maintaining a dozen services. Upgrading Miniflux is docker compose pull && docker compose up -d. No composer update, no php bin/console doctrine:migrations:migrate, no cache directory to flush. The binary ships everything.
  • The privacy maximalist. Miniflux strips tracking pixels, removes UTM parameters and fbclid from URLs, blocks external JavaScript, and proxies media through its own server to prevent referrer leaks. Even YouTube embeds get routed through youtube-nocookie.com.

It also supports passkeys (WebAuthn), OpenID Connect, and reverse-proxy authentication — you’re not stuck with a local username and password if your infrastructure already uses SSO.

Content scraping: when the RSS feed isn’t enough

Most sites serve truncated summaries in their RSS feeds. Miniflux sidesteps this with a built-in Readability parser — it fetches the original article, extracts the relevant content, and displays it inline, stripped of ads and sidebars.

Better yet, you can write your own scraper rules using plain CSS selectors. Got a site that hides content behind a div.article-body outside the standard feed? Add a rule in the feed settings:

plaintext
div.article-body
article .content
main .post

Miniflux runs these selectors and extracts whichever block matches. For trickier cases, rewrite rules let you modify the DOM before display — strip a cookie banner, replace low-res images, inject a custom stylesheet.

FreshRSS has a roughly equivalent feature via its XPath extension, but that requires writing XPath expressions by hand. Miniflux’s CSS selectors are more readable and testable right in the browser’s DevTools.

FreshRSS vs. Miniflux: it’s not a philosophy debate, it’s a resource equation

FreshRSS and Miniflux are the two dominant self-hosted RSS readers in July 2026. They don’t play in the same weight class.

Miniflux 2.3.3FreshRSSLanguageGo — statically compiled binaryPHP — interpreted, requires PHP-FPMDatabasePostgreSQL onlySQLite, MySQL, MariaDB, PostgreSQLBinary size< 20 MBN/A (hundreds of MB with dependencies)Idle memory50–100 MB150–300 MB (PHP-FPM + database)Cold start< 1 second3–10 secondsSystem dependenciesNone (static binary)PHP 8.1+, GMP, iconv, mbstring extensionsUIHTML + vanilla JS, keyboard-drivenMultiple themes, optional JS frameworkMulti-userYes, basicYes, granular permissionsNested foldersNo (flat categories)YesContent scrapingNative Readability + CSS selectorsXPath extensionsAPIREST native + Fever + Google ReaderREST native + Google Reader via extensionMobile appsPWA + third-party via APIPWA + third-party via APIIntegrations25+ (Telegram, Discord, Wallabag, etc.)Community extensionsGitHub stars9,50010,200LicenseApache 2.0AGPL 3.0

The star counts are close, but the trajectories tell a different story. Miniflux is growing faster (+800 stars since January 2026) than FreshRSS (+400). The reason is simple: the self-hosted community is steadily moving away from LAMP stacks toward single-binary architectures.

FreshRSS is still an excellent choice if you need nested folders, advanced multi-user sharing, or your existing infrastructure is PHP-based. For everything else, Miniflux wins on the three metrics that matter in production: deployment speed, resource consumption, and maintenance surface area.

The API turns Miniflux into a universal backend

Miniflux exposes a full REST API, documented at miniflux.app/docs/api.html, with official client libraries in Go and Python. Every operation is covered: feeds, entries, categories, users, stars, history.

The API also speaks Fever and Google Reader protocols, which means you can point any existing mobile app at your Miniflux instance:

  • Reeder (iOS/macOS) — Fever API
  • NetNewsWire (iOS/macOS) — Fever API
  • Lire (iOS) — Fever API
  • FeedMe (Android) — Fever API
  • News+ (Android) — Google Reader API

You configure your Miniflux URL in the app, and it syncs feeds, read status, and starred articles automatically. Miniflux doesn’t need a native app — its API bridges to every one that already exists.

On the integration side, the 25+ services cover the most common self-hosting workflows: send articles to Wallabag for read-later, push notifications to Telegram and Discord for critical feeds, archive to Linkding or LinkWarden. Webhooks let you wire it into anything with an HTTP endpoint.

Verdict: if your RSS reader weighs more than 20 MB, you’re using the wrong one

The choice between Miniflux and FreshRSS isn’t a matter of preference. It’s a function of your infrastructure and your tolerance for maintenance.

  • You have a small server, a Raspberry Pi, or a €5/month VPS. Run Miniflux. The 20 MB binary starts instantly, uses 50 MB of RAM, and stays alive with zero maintenance beyond docker compose pull. The keyboard-driven UI will get you through 200 articles in 20 minutes.
  • You run a shared instance for your family or company, with dozens of users and fine-grained permissions. FreshRSS is still the better fit, thanks to its multi-tier profile system and nested folder structure.
  • You want the best of both worlds without compromise. Deploy Miniflux as your backend engine and connect it to a mobile client via the Fever API — you get Go’s lightweight performance on the server and native-app ergonomics on your phone.

Whatever you choose, don’t deploy an RSS reader that weighs more than the 200 articles it’ll chew through every morning. Miniflux spent a decade proving that a single binary, a PostgreSQL database, and a keyboard-driven interface cover 95% of what you actually need. Everything else is fluff.

References

The cyber brief, every Tuesday

The flaws that matter and the patches to apply, in a ten-minute read.

No spam. One-click unsubscribe.
read next

On the same topic

Immich replaces Google Photos once you budget for a mini PC and real backups

Immich shipped version 3.0 on 2 July 2026, nine months after its first stable release and weeks after a two-year retrospective on its backing by nonprofit FUTO. It replaces Google Photos once you can afford roughly $300 of hardware and a disciplined off-site backup — skip either, and the migration trades Google’s reliability for a real chance of losing everything.

Coolify gives you a free Vercel on your own server in one command

Coolify shipped version 4.2.0 on July 21, 2026, and now sits at 59,800 GitHub stars. This open-source PaaS deploys your apps, databases, and 280 services to any Linux server with a single click — no per-GB billing, no bandwidth caps, no lock-in.

← Back to the feed

Type at least two characters.

navigate open esc dismiss