finds.dev← search

// the find

miniflux/v2

★ 9,394 · Go · Apache-2.0 · updated Jun 2026

Minimalist and opinionated feed reader

Miniflux is a self-hosted RSS/Atom reader written in Go that ships as a single static binary backed by PostgreSQL. It's deliberately minimal — no Electron, no Node, no separate cache layer — aimed at developers and power users who want full control over their feed reading without the complexity of Tiny Tiny RSS or FreshRSS.

- The architecture is genuinely clean: single binary with all static assets embedded via Go's embed package, no ORM, plain SQL migrations, and PostgreSQL as the only dependency. Ops burden is as low as it gets for a self-hosted web app.

- Feed parsing handles the actual mess of the wild — Atom 0.3/1.0, RSS 1.0/2.0, JSON Feed, RDF, plus a local Readability parser for full-text extraction. The encoding handling (ISO-8859-1, Windows-1252, bad XML prologs) suggests real-world battle-testing rather than happy-path implementation.

- The privacy stance is implemented in code, not just listed in a README: strips UTM/fbclid parameters, routes images through a media proxy, uses youtube-nocookie.com, and enforces a CSP with Trusted Types. These are non-trivial to get right.

- The Fever and Google Reader API compatibility layers mean existing mobile clients (Reeder, NetNewsWire, FeedMe) work without any changes — you're not locked into the web UI.

- PostgreSQL is a hard requirement with no SQLite option. For a personal single-user install, this is operational overhead that SQLite would eliminate entirely. The decision is documented as intentional, but it's a meaningful barrier for people who just want a simple VPS deploy.

- The full-text search is Postgres tsvector, not a proper FTS engine. Works fine for small collections but has no stemming configuration per-language exposed to the user and no relevance tuning — you get whatever Postgres gives you by default.

- No offline or PWA support beyond 'can be added to home screen.' If your server is unreachable, you read nothing. For a reader this is a notable gap compared to native apps.

- The 25+ third-party integrations are each implemented as separate packages with no shared abstraction — adding a new one requires copying the pattern from scratch. Not a bug, but the contrib surface area is large relative to test coverage on individual integrations.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →