
github.com/pengyaoc/openreader
The open-source, self-hosted alternative to Feedly and Inoreader — without the monthly bill.
The Problem
Feedly and Inoreader charge a monthly fee for things that are really just config on a server — regex filtering, folders, full-text extraction, newsletter ingestion, AI summaries. Feedly AI and Inoreader Intelligence go a step further and resell LLM summaries at a premium on top of that. None of it needs to live behind someone else’s paywall, and none of it needs your reading history sitting in a third party’s database.
The Solution: OpenReader

OpenReader is a self-hosted RSS/Atom and email-newsletter reader that puts every one of those paywalled features back under your own control — running on hardware you own, with your data in a SQLite file you own, not a third party’s database. It’s small enough to run on a sub-1GB RAM VM — it was built and is run daily on a $5/month 1GB instance, sharing that box with a full WordPress install — so self-hosting it doesn’t mean paying for a bigger server than the subscription it replaces.
Features
- RSS & Atom feeds — add any feed by URL. Standard-compliant parsing (RSS 2.0, Atom, RDF), conditional
GET(ETag/Last-Modified) so a routine refresh costs almost nothing against well-behaved servers - Email newsletters (IMAP) — reads a mailbox with an app password, no OAuth, read-only throughout (SEARCH/FETCH only — never STORE/EXPUNGE/DELETE)
- Content filtering — per-source regex include/exclude rules matched against title/summary/content/author/url. Every kept article stores which rule let it in, so filtering is auditable, not a black box
- Full article mode — fetches and extracts the full page the first time you open a truncated feed item, then caches it forever — lazy and per-article, not a background sweep of the whole feed
- Content summarization — a Summarize button next to Star, faithful to the article’s own text only (no outside knowledge, no speculation), runs on your own Claude subscription rather than API billing
- No scheduler, anywhere — refresh is a button, summarize is a button, nothing runs on a timer
- Dark/light themes, responsive down to phone width, images proxied server-side
How It’s Built
Backend: Python + FastAPI (Starlette route handlers) with a synchronous refresh loop. RSS/Atom parsing via defusedxml. No scheduler or background jobs — refresh and summarize are both manual triggers, kept deliberately simple for a single-user reader.
Storage: SQLite, a single file you own end to end — no managed database, no third party ever sees the reading list.
Newsletters: IMAP with an app password instead of OAuth — no consent screen, no token to refresh. All sources sharing a mailbox folder are batched into one SEARCH/FETCH pass rather than one per newsletter, and a newly-added source backfills at most 7 days of history so one wide-window source can’t force a much larger re-scan on every routine refresh.
Summarization: shells out to the claude CLI on-demand, running against the user’s own Claude subscription rather than metered API billing. Off by default via a hard kill switch — the endpoint is hidden/404 and claude is never invoked while it’s off.
Frontend: React, a 3-pane shell (sidebar, article list, reader) with keyboard-driven navigation.
The Hardest Part
Making the whole thing run comfortably on a 1GB VM shared with a live WordPress install. The claude CLI’s own peak RSS during a single summarize call turned out to be far higher than the FastAPI process’s baseline — the first real production call OOM-killed the service at a 300MB memory ceiling, which meant sizing systemd‘s MemoryMax well past what the app itself needed and measuring the actual subprocess footprint rather than guessing. IMAP batching was the other constraint worth getting right: mail providers can silently throttle a datacenter IP that opens many fresh logins in quick succession, so every refresh opens one IMAP connection and reuses it sequentially across all newsletter sources instead of one connection each.
OpenReader is open source on GitHub. If you’re paying for Feedly or Inoreader and have a spare $5/month VM, you can be reading your own feeds through it in an afternoon.