Privacy-focused, local-first RSS reader. No account required.
- Reads RSS 2.0, Atom, and RSS 1.0 (RDF) feeds
- All data stored locally in Chrome — nothing leaves your browser
- Cross-device sync via Chrome's built-in Sync (no account needed beyond your Google account)
- OPML import and export — bring your existing subscriptions
- Dark mode and font-size settings
- Full-text search across all loaded articles
- Keyboard navigation (j/k or arrow keys, Enter to expand)
- Starred/pinned feeds float to the top of the sidebar
- Efficient conditional HTTP fetching (ETag / Last-Modified)
Install directly from the Chrome Web Store.
- Clone this repo and install dependencies:
cd extension npm install npm run build - Open
chrome://extensionsin Chrome and enable Developer Mode - Click "Load unpacked" and select the
extension/dist/folder
Not sure what to subscribe to? HN Popular Blogs 2025 is a curated OPML of 95 tech blogs that appeared most on Hacker News. Download the raw OPML and import it via Settings → Import OPML.
SimpleReader does not collect, transmit, or sell any personal data. All articles and subscriptions live in your browser's local storage. See the full Privacy Policy.
| Permission | Reason |
|---|---|
storage + unlimitedStorage |
Store subscriptions, articles, and settings locally |
alarms |
Periodic background feed refresh (every 30 minutes by default) |
host_permissions: *://*/* |
Fetch RSS feeds from any domain the user subscribes to |
All commands run from the extension/ directory:
npm run dev # Vite dev server — hot reload for popup/dashboard UI
npm run build # Production build to extension/dist/
npm run lint # ESLintNote: The background service worker does not hot-reload. After changes to src/background/, run npm run build and reload the extension in Chrome.
- Popup (
src/App.jsx) — single "Open Reader" button that opens the dashboard tab - Dashboard (
src/dashboard/Dashboard.jsx) — sidebar feed list, article list, settings modal - Background worker (
src/background/index.js) — all feed fetching and storage writes; updates the badge with the unread count - Storage —
chrome.storage.syncfor settings/subscriptions,chrome.storage.localfor articles - Feed parsing —
fast-xml-parserhandles RSS 2.0, Atom, RSS 1.0 (RDF) - Content safety — HTML from feeds sanitized with
DOMPurifybefore rendering
MIT — see LICENSE