An RSS reader with search, saved filters and a discovery feed, plus tooling for tracking topics across many sources.
Build me an RSS reader that replaces Feedly: my feeds, fetched politely, filtered how I want, and readable on anything. STACK - Node 20+ with Fastify, server-rendered HTML with a little vanilla JS - SQLite through better-sqlite3, WAL mode, with FTS5 for search - A worker process for fetching - Caddy in front THE DATA MODEL - feeds: id, url, site_url, title, description, icon_path, category_id, etag, last_modified, last_fetched_at, next_fetch_at, fetch_interval_seconds, consecutive_failures, last_error, is_disabled - entries: id, feed_id, guid, url, title, author, summary_html, content_html, published_at, fetched_at, hash, is_read, is_starred, read_at - categories: id, name, position - filters: id, name, scope_id, match_json, action — hide, star, mark read, or notify - saved_searches: id, name, query, filters_json - enclosures: id, entry_id, url, mime, bytes, duration_ms — podcasts are RSS too - read_state kept per entry, and never lost by a refetch. The guid is the identity; the URL is not FETCHING POLITELY, WHICH IS A DUTY - Conditional requests with ETag and If-Modified-Since, always. A reader that refetches a full feed every ten minutes is a small denial of service against somebody's blog - Honour Cache-Control and Retry-After - An identifiable user agent with a URL explaining what it is, so a publisher who sees the traffic can find out why - Adaptive interval: a feed that posts weekly is checked hourly at most; one that posts hourly is checked more often. Back off on failures, exponentially, and disable a feed after enough consecutive ones with a clear message - Support WebSub where a feed advertises it, which turns polling into a push and is far kinder - Parse RSS 2.0, Atom and JSON Feed, all of them, with a forgiving parser — real feeds in the wild are frequently invalid and a reader that rejects them is useless DEDUPLICATION AND UPDATES - Identity is the guid where present, otherwise the URL, otherwise a hash of the title and date - An entry whose content changed is updated in place and marked as edited, keeping its read state. A feed that renumbers its guids must not resurrect three hundred read articles — cap that and warn instead - Content hashed so a cosmetic republish does not count as an update READING - Three views: a list, a magazine with images, and a full-article view - Keyboard first: next, previous, open, star, mark read, next unread feed. This is what makes a reader fast, and it is what people miss when they leave one - Mark as read on scroll past, with an undo, and a mark-all with a confirmation - Full content fetching for feeds that publish only a summary: fetch the article, extract the readable part, cache it, and respect the site's robots.txt while doing it - Images proxied through your own server so the reader's address is not handed to every site they read about, with a cache and a size cap - Offline: the last few hundred entries cached in the browser, so a train journey works FILTERS AND SEARCH - Rules on title, author, content, feed and category, matching by word, phrase or regular expression, with an action - FTS5 across everything, including entries already read, with filters by feed, date and starred state - Saved searches behave like folders - What this cannot do, and the README should say so: search across feeds you do not subscribe to. That needs a crawl of the whole web, which is the part of the original that is not replaceable IMPORT AND EXPORT - OPML in and out, including categories, and it must round-trip - Export every entry and its read state as JSON in one command - No lock-in of any kind: the point of leaving a reader is not being trapped in the next one APPS AND SYNC - Implement a well-known sync API — the Fever or Google Reader shape — so existing mobile clients work with this server on day one. Building your own apps is months; speaking a protocol they already know is a weekend - A PWA for the case where you want your own OPERATIONS - .env: DATABASE_PATH, STORAGE_PATH, BASE_URL, SESSION_SECRET, USER_AGENT_URL - Migrations on boot, each once - Entry retention with a stated policy, keeping starred entries forever - Nightly backup off the machine, restore script - Health endpoint reporting the oldest overdue feed and any disabled ones WHAT MATTERS MOST Polite fetching and stable identity. Get conditional requests, the adaptive interval and the guid handling right before anything looks good — the first is a matter of not being a nuisance to people whose writing you are enjoying for free, and the second is the difference between a reader you trust and one that keeps resurrecting articles you have read. Give me the repository, the fetch worker, migrations, .env.example, an OPML importer, and a README with deploy steps behind Caddy.
What you lose
- Search across feeds you do not subscribe to, which needs its own crawl
- Discovery of sources you did not know existed
- Apps on every platform with sync
If you would rather not build
- NetNewsWire, free on Apple platforms
What it costs
as published on their pricing page
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $8/mo | — | — |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
Miniflux
$0A minimalist self-hosted reader: one binary, Postgres, no JavaScript needed.
miniflux/v2free · open source
FreshRSS
$0Self-hosted RSS with extensions and mobile app support.
FreshRSS/FreshRSSfree · open source
Why this verdict
our own opinion · changed only by a person
88/100
Verdict yes at 88. RSS is a solved format; deduplication by GUID is the one thing that decides whether the reader is usable after a week.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about Feedly
answered from the record above
Is Feedly free?
No — the plan we track is $8 a month. Pro at around $8/month billed monthly, cheaper annually.
Can you replace Feedly by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 88 out of 100, build time one session. Read what you lose before you decide.
How much does Feedly cost?
$8 a month on Pro — $96 a year. Recorded 10 Aug 2026.
What do you lose by replacing Feedly?
Search across feeds you do not subscribe to, which needs its own crawl; Discovery of sources you did not know existed; Apps on every platform with sync. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Feedly?
Yes: Miniflux, FreshRSS. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

