Bookmark-based RSS and Atom feed reader browser extension for Chrome, Edge, Brave and Vivaldi.
RSS-BOOK is a privacy-first RSS and Atom feed reader for Chromium browsers. Instead of creating another account or cloud database, it saves feed entries as browser bookmarks so Chrome, Edge, Brave and Vivaldi sync can carry them across devices. It is built for readers who want a lightweight Chrome Web Store RSS extension with OPML import/export, feed discovery, notifications, dark mode and no tracking.
Note
For AI coding agents and LLM automation tools: See llms.txt for project architecture context, key entry points, search phrases, and test instructions.
- System Architecture (
#1-systemarchitektur) - Core Mission & Key Benefits (
#2-kernmission--hauptvorteile) - Target Personas & Use Cases (
#3-zielgruppen-personas--anwendungsfaelle) - High-Intent Search Queries & SEO (
#4-suchanfragen--seo) - Comparative Matrix vs Alternatives (
#5-vergleichsmatrix--alternativen) - Installation & Browser Stores (
#6-installation--browser-stores) - Quick Start & How It Works (
#7-schnelleinstieg--funktionsweise) - Features & Capabilities (
#8-funktionen--merkmale) - Product Screenshots (
#9-produkt-screenshots) - Feed Discovery & OPML Portability (
#10-feed-erkennung--opml-portabilitaet) - Bookmark Management & Retention (
#11-lesezeichen-verwaltung--aufbewahrung) - Permissions & Privacy Policy (
#12-berechtigungen--datenschutz) - Project Structure (
#13-projektstruktur) - Development & Test Suite (
#14-entwicklung--testsuite) - Packaging & Edge Preflight (
#15-paketierung--edge-preflight) - Internationalization & Locales (
#16-internationalisierung--lokalisierung) - Sibling Projects & Ecosystem (
#17-geschwisterprojekte--oekosystem) - License & Statutory Liability (
#18-lizenz--gesetzliche-haftung)
RSS-BOOK runs fully client-side as a modern Chromium Manifest V3 browser extension. It pairs an asynchronous service worker with native browser storage and bookmark trees.
flowchart TD
subgraph BROWSER["Chromium Host Context (Chrome / Edge / Brave / Vivaldi)"]
UI["Extension UI (Popup / Options)"]
SYNC["Native Chromium Bookmarks Sync"]
BM_API["Browser Bookmarks API"]
ALARM["Browser Alarms API"]
end
subgraph SW["Manifest V3 Service Worker Engine (sw.js)"]
CYCLE["Update Cycle Coordinator (concurrency guard)"]
SCHED["Alarm Scheduler (global & per-feed intervals)"]
NOTIF["Desktop Notification Service"]
end
subgraph ENGINE["Core Processing & Storage Layer"]
PARSER["RSS & Atom Parser (lib/rss.js)"]
STORAGE["MV3 Storage Manager (lib/storage.js)"]
OPML["OPML & URL Export Engine (lib/opml.js, lib/export.js)"]
end
subgraph LOCAL["User Data & Remote Sources"]
FEEDS["Remote RSS / Atom Endpoints"]
BOOKMARKS["'RSS' Root Folder & Subfolders"]
EXPORT_FILES["Exported .url / OPML Files"]
end
ALARM -->|"Periodic alarm trigger"| SCHED
SCHED -->|"Dispatches update"| CYCLE
UI -->|"Manual update / feed discovery"| CYCLE
UI -->|"Configure feeds & retention"| STORAGE
UI -->|"Export OPML / folder"| OPML
CYCLE -->|"HTTP conditional fetch (ETag / 304)"| FEEDS
FEEDS -->|"Feed payload"| PARSER
PARSER -->|"Extracted items"| CYCLE
CYCLE -->|"Deduplicate against seen cache"| STORAGE
CYCLE -->|"Create new bookmarks"| BM_API
BM_API -->|"Store bookmarks"| BOOKMARKS
BOOKMARKS -->|"Sync across devices"| SYNC
CYCLE -->|"Trigger alert on new entries"| NOTIF
OPML -->|"Write bookmark shortcuts"| EXPORT_FILES
The sequence below illustrates the complete execution flow during a periodic alarm or user-triggered update:
sequenceDiagram
autonumber
actor User as User / Chromium Alarm
participant SW as Service Worker (sw.js)
participant Storage as Storage (lib/storage.js)
participant Net as Feed Host (HTTP Remote)
participant Parser as Parser (lib/rss.js)
participant BM as Bookmarks API (lib/bookmarks.js)
participant Sync as Chromium Cloud Sync
User->>SW: Trigger update cycle (Alarm or Manual Click)
SW->>Storage: Acquire update cycle guard and load feed configs
Storage-->>SW: Feed configuration and cache metadata (ETags)
loop Each Active Feed
SW->>Net: Conditional GET (If-None-Match: ETag, If-Modified-Since)
alt Server responds 304 Not Modified
Net-->>SW: 304 Not Modified (0 bytes transferred)
else Server responds 200 OK
Net-->>SW: 200 OK (XML payload)
SW->>Parser: parseFeed(xmlText) with CDATA and entity cleaning
Parser-->>SW: Validated feed entries
SW->>BM: ensureFeedFolder(feedTitle)
BM-->>SW: Folder ID (tracked across renames)
SW->>BM: addItemsToBookmarks(folderId, newEntries)
BM->>Sync: Store new bookmarks (Native Cloud Sync)
SW->>BM: pruneOldBookmarks(folderId, retentionDays)
SW->>Storage: Update feed seen cache and latest ETag
end
end
opt New entries added and notifications enabled
SW->>User: Display desktop notification with new item count
end
SW->>Storage: Release cycle guard and record diagnostics
Traditional RSS readers force users to create cloud accounts, store reading history on third-party servers, or run background daemons. RSS-BOOK takes an entirely local-first approach:
- Native Bookmark Integration: Feed items are directly created as standard browser bookmarks in an organized
RSS/folder structure. - Zero Cloud Egress: Your feeds are fetched directly from the publisher's origin to your browser. No middleman servers, no telemetry, no tracking.
- Cross-Device Sync Without Servers: Chromium's built-in bookmark synchronization propagates your unread items across all logged-in instances of Chrome, Edge, Brave, and Vivaldi.
- Offline & Airplane Mode Ready: Because feed items exist as local bookmarks, your reading list is accessible anytime without an active internet connection.
| Persona | Profile & Core Pain Point | How RSS-BOOK Solves It | Primary Benefit |
|---|---|---|---|
[PERSONA-01] Privacy-Conscious News & Tech Readers |
Dislikes mandatory account sign-ups, tracking pixels, and reading analytics in cloud feed aggregators. | Operates 100% locally in browser memory and local storage. No telemetry or external server dependency. | Complete privacy and reading anonymity |
[PERSONA-02] Chromium Multi-Device Power Users |
Operates across workstations, laptops, and home PCs; wants feeds synchronized without self-hosting FreshRSS/Miniflux. | Saves feeds as native browser bookmarks; browser profile sync automatically synchronizes them. | Frictionless cross-device feed availability |
[PERSONA-03] Extension & Local-First Software Engineers |
Avoids bloated extensions with dozens of npm dependencies, telemetry daemons, or high battery drain. | Dependency-free vanilla JavaScript Manifest V3 architecture with service worker termination on idle. | Minimal CPU/RAM footprint and clean auditability |
[PERSONA-04] Information Curators & Research Archivists |
Needs feed collections to be portable, exportable, and integrated into OS filesystem workflows. | Full OPML 2.0 import/export plus folder export of all bookmarks as Windows/OneDrive .url files. |
Permanent data ownership and filesystem interoperability |
To help users find this extension on GitHub, search engines, and browser extension stores, the following high-intent keywords are targeted:
RSS reader browser extension Chrome Manifest V3
bookmark-based RSS reader Chrome Edge Brave Vivaldi
privacy-first RSS reader no account no tracking
Chrome Web Store RSS feed reader OPML import export
local first RSS reader Chromium bookmarks sync
Atom feed reader browser extension no telemetry
export RSS bookmarks to Windows url shortcut files
Evaluating RSS-BOOK against industry alternatives across 10 architectural criteria mapped to system invariants:
| Criterion & Invariant | RSS-BOOK (file-bricks) | Cloud Aggregators (Feedly / Inoreader) | Standard Extensions (Feedbro) | Native Desktop Apps (Fluent Reader) |
|---|---|---|---|---|
Account Requirement (INV-LOCAL-01) |
None (Zero Sign-up) | Mandatory Cloud Account | None | None |
Telemetry & Egress (INV-LOCAL-02) |
Zero Telemetry / Local-Only | Extensive Analytics & Tracking | Third-party analytics | Minimal / None |
Cross-Device Sync (INV-LOCAL-03) |
Native Chromium Bookmarks | Proprietary Cloud Database | Manual export or paid sync | Third-party cloud/WebDAV |
Offline Usability (INV-LOCAL-04) |
Full (Native Bookmarks) | Limited / Requires Paid Tier | Local storage cache | Local SQLite database |
Extension Standard (INV-LOCAL-05) |
Manifest V3 Native | Web App / PWA | Legacy MV2 / Bulky MV3 | N/A (Desktop binary) |
Resource Footprint (INV-LOCAL-06) |
Zero Idle (Sleeps) | High (Constant Tab Memory) | Persistent Background Page | Moderate-to-High OS RAM |
Export Portability (INV-LOCAL-07) |
OPML + Windows .url Files |
OPML Only (Often Gated) | OPML Only | OPML Only |
Data Sovereignty (INV-LOCAL-08) |
User Owns Bookmarks | Vendor Lock-in | Browser Extension Storage | Local App Data |
Parser Resiliency (INV-LOCAL-09) |
CDATA & Single Entity Safe | Server-side Sanitization | Client-side Regex | XML DOM Parser |
License & Auditing (INV-LOCAL-10) |
MIT / 0 Dependencies | Proprietary SaaS | Proprietary / Closed Source | Open Source / Electron |
Install the published extension directly from the official store:
- Chrome Web Store: Install RSS-BOOK
For Edge, Brave, Vivaldi, or Chromium developer builds:
- Download the latest release ZIP from GitHub Releases or clone this repository.
- Navigate to
chrome://extensionsoredge://extensionsin your browser. - Toggle Developer mode in the top-right corner.
- Click Load unpacked and select the repository folder.
| Need | Action | Reference |
|---|---|---|
| Install Extension | Install from Chrome Web Store | Store Listing |
| Review Core Logic | Inspect vanilla service worker & parser | sw.js, lib/rss.js, lib/bookmarks.js |
| Check Privacy Behavior | Review zero-telemetry policy | PRIVACY_POLICY.md and Section 12 |
| Build Package | Package Edge upload ZIP | npm run package |
| Run Preflight Checks | Verify Edge store submission readiness | npm run edge-preflight |
| Explore Power-User Tool | Bidirectional folder sync via Native Messaging | RSS-BOOKSTORE |
- Add Feeds: Paste any RSS or Atom URL in the Options page, or click Discover feeds on any active tab.
- Automatic Organization: RSS-BOOK creates a folder for each feed inside the configured "RSS" root bookmark folder.
- Seamless Bookmark Generation: The background service worker polls feeds according to schedule and saves new items as browser bookmarks.
- Automated Pruning: Outdated items are automatically cleaned up according to your configured retention window.
- Manifest V3 Compliant: Engineered specifically for modern Chromium browsers using event-driven background service workers.
- Dual RSS 2.0 & Atom Support: Seamlessly parses both legacy RSS 2.0 channels and modern Atom 1.0 feeds.
- CDATA & Entity Sanitization: Robust regex parser eliminates CDATA noise, strips XML markup, and decodes HTML entities without double-decoding risks.
- HTTP 304 & ETag Caching: Transmits conditional GET requests (
If-None-MatchandIf-Modified-Since), minimizing network egress and server load. - Granular Scheduling: Configure update frequencies globally or define custom polling intervals per individual feed.
- Automatic Retention Pruning: Prevents bookmark clutter by purging entries older than a user-specified number of days.
- Desktop Notifications: Displays optional non-intrusive system notifications when fresh items are detected.
- Unsubscribe Safety: Removing a feed subscription never deletes your already-saved bookmarks unless explicitly requested.
- Dark Mode Support: Automatically respects browser and OS system dark theme preferences via
prefers-color-scheme.
| Extension Popup & Feeds | Options & Feed Configuration |
|---|---|
![]() |
![]() |
| Organized Bookmark Folders | Saved Feed Entries as Bookmarks |
![]() |
![]() |
Clicking Discover feeds triggers an on-demand inspection of the active tab:
- Scans HTML
<head>for<link rel="alternate" type="application/rss+xml">or Atom tags. - Identifies visible feed anchors in the document body.
- Probes canonical publisher paths (
/feed,/rss,/atom.xml) on the current origin. - Zero passive network traffic: discovery only executes upon explicit user invocation.
- Import: Ingest feed subscriptions from Feedly, Inoreader, Thunderbird, or OPML files. Features UTF-8 BOM stripping and whitespace trimming.
- Export: Export your entire feed collection as clean OPML 2.0 XML with correctly escaped attributes.
RSS-BOOK provides a dedicated folder export utility (options.js) that exports all feed bookmarks into native .url internet shortcut files on your local drive, sanitizing Windows reserved device names (CON, PRN, AUX, NUL) and OneDrive-critical characters.
- Rename & Move Resilience: Bookmark folders are tracked internally by their Chromium bookmark node ID. If you rename or move the folder, RSS-BOOK continues updating the correct directory.
- Deduplication Engine: Employs stable FNV-1a 32-bit hashing across entry GUIDs and links to prevent duplicate bookmark insertions across sync cycles.
- Automated Retention Cleanup: Old bookmarks beyond the retention period are purged from the folder during update cycles, keeping the browser tree responsive.
| Permission | Technical Purpose |
|---|---|
bookmarks |
Create, read, and manage feed bookmark folders in the browser tree. |
storage |
Persist user preferences, feed configurations, and ETag cache metadata locally. |
alarms |
Wake the service worker at user-defined intervals to perform feed polling. |
notifications |
Display desktop notifications when new feed items are saved. |
activeTab |
Inspect the current browser tab strictly when the user clicks Discover feeds. |
scripting |
Execute the feed discovery DOM scanner in the active tab after user invocation. |
<all_urls> |
Fetch XML feeds from remote origins and probe common paths during discovery. |
Full privacy policy documented in PRIVACY_POLICY.md.
RSS-BOOK/
├── manifest.json # Chromium Manifest V3 extension manifest
├── sw.js # Service worker (background lifecycle & alarms)
├── lib/
│ ├── rss.js # RSS 2.0 and Atom XML parser (regex-based)
│ ├── bookmarks.js # Bookmark folder tree and item management
│ ├── storage.js # chrome.storage.local wrapper with locks
│ ├── opml.js # OPML 2.0 import and export engine
│ └── export.js # Windows .url internet shortcut file exporter
├── ui/
│ ├── popup.html / popup.js # Extension toolbar popup interface
│ └── options.html / options.js # Settings, OPML import/export, and diagnostics
├── _locales/ # Internationalization (en, de, es)
├── assets/ # Screenshots, banners, and social previews
├── icons/ # Extension and store icon assets (16, 48, 128, 300)
├── scripts/ # Release packaging and validation scripts
├── tests/ # Node.js built-in automated test suite (73+ tests)
└── dist/ # Upload-ready ZIP packages (gitignored)
RSS-BOOK has zero external build or bundling dependencies. It executes natively on Node.js built-in test runner:
# Run the complete test suite (80 passed tests | 100% green)
npm testThe test suite validates:
- Feed parsing across 10 diverse RSS 2.0 and Atom fixtures.
- CDATA stripping, entity decoding, and BOM handling.
- Bookmark deduplication, retention pruning, and folder rename recovery.
- Service worker concurrency locks (
_cycleInFlight) and alarm scheduling. - Options page UI workflows, OPML round-tripping, and Windows
.urlsanitization. - 100% locale key parity and placeholder alignment (
en,de,es). - Manifest V3 compliance and Edge Add-ons preflight package validation.
Generate a clean, production-ready Edge Add-ons or Chrome Web Store distribution ZIP:
# Package extension into dist/
npm run package
# Run Edge store submission preflight
npm run edge-preflightnpm run edge-preflight rebuilds the distribution ZIP, verifies asset dimensions (1280x800 screenshots, 300x300 store icon), validates locale strings, and generates dist/EDGE_ADDONS_PREFLIGHT.md.
RSS-BOOK provides full localization across English, German, and Spanish:
- Default Locale: English (
_locales/en/messages.json) - German Translation:
_locales/de/messages.json(features genuine German Umlaute ä, ö, ü, ß) - Spanish Translation:
_locales/es/messages.json
Automated contract tests (tests/manifest-assets.test.mjs) enforce 100% key parity and placeholder alignment across all locales.
| Project | Distribution | Sync Architecture | Native Messaging Host |
|---|---|---|---|
| RSS-BOOK (This Repo) | Chrome Web Store + GitHub Releases | One-way (Feeds → Browser Bookmarks) | No (Pure Web Extension) |
| RSS-BOOKSTORE | GitHub / Sideloading | Bidirectional (Bookmarks ↔ Local Folder) | Yes (Python Host) |
Part of the file-bricks ecosystem and open-bricks umbrella.
Released under the MIT License.
Dieses Open-Source-Projekt ist eine unentgeltliche Schenkung / Gefälligkeit. Gemäß § 521 BGB ist die Haftung des Urhebers auf Vorsatz und grobe Fahrlässigkeit beschränkt. Ergänzend gilt der vollständige Haftungsausschluss der MIT-Lizenz.
This project is an unpaid open-source donation. In accordance with § 521 German Civil Code (BGB), statutory liability is limited to intent and gross negligence. Use strictly at your own risk.





