A local-first desktop RSS reader with optional AI tools.
Overview • Features • What's New • Download • Development • Architecture
RSS Reader is a Tauri 2 desktop app for reading RSS, Atom, and JSON feeds. It stores data locally in SQLite, keeps feed updates efficient with conditional requests, and adds optional AI workflows for summaries, translation, and article scoring.
The app is designed for a native macOS workflow: Command+W closes the window while keeping the app alive in the Dock, and Command+Q exits the app.
- Subscribe to RSS, Atom, and JSON feeds.
- Import and export subscriptions with OPML.
- Browse all, unread, starred, and favorite articles.
- Organize articles with feeds, tags, and groups.
- Search articles with local full-text search.
- Handle large article lists with virtualized rendering.
- Store articles, feeds, rules, and settings locally.
- Use
ETagandLast-Modifiedto skip unchanged feed downloads. - Run feed refresh work in Rust with bounded concurrency.
- Keep a lightweight background scheduler when the main window is closed.
- Pause UI-heavy and AI-heavy work when no window is open.
- Load article rendering, sanitizing, markdown parsing, and code highlighting only when needed.
- Use a bounded
rss-media://proxy for media that needs caching or range requests. - Load video embeds only after user action.
- Configure OpenAI or Anthropic-compatible AI profiles.
- Generate single-article summaries.
- Translate article content.
- Generate batch digests for multiple articles.
- Use automation rules and AI scoring to classify or highlight articles.
- Keep API keys in local app settings.
- Native macOS menu behavior for close, reopen, hide, and quit.
- Keyboard shortcuts with a settings switch to enable or disable them.
- Light, dark, and system themes.
- Context menus and batch actions for common article operations.
- Interface translations for English, Chinese, Russian, Spanish, French, and Arabic.
- Standard macOS lifecycle:
Command+Wcloses the window,Command+Qquits the app. - Lower hidden-state resource use by destroying the WebView when the window is closed.
- Rust-backed background refresh and cleanup scheduling.
- Conditional feed fetching with
ETagandLast-Modified. - Lazy article rendering and lighter media loading.
- Shortcut enable switch in settings.
- Fixes for route restore, settings navigation, feed count refresh, and article read state sync.
Ready-to-use builds are published on the GitHub Releases page.
The current release target is macOS. Windows and Linux support are kept in the Tauri configuration, but release testing currently focuses on macOS.
git clone https://github.com/JinxinWonderWorld/RSS-Reader.git
cd RSS-Reader
npm install
npm run tauri:dev| Command | Description |
|---|---|
npm run dev |
Run the Vite frontend only |
npm run build |
Type-check and build the frontend |
npm run tauri:dev |
Run the full Tauri app in development |
npm run tauri:build |
Build the release app bundle |
npm test -- --run |
Run frontend tests |
npm run lint |
Run ESLint |
cargo test --manifest-path src-tauri/Cargo.toml |
Run Rust tests |
src-tauri/src/app_runtime.rs: runtime state, background scheduling, and cleanup gates.src-tauri/src/window_lifecycle.rs: macOS window close, reopen, and state restore behavior.src-tauri/src/feed/: feed fetching, conditional requests, and parsing.src-tauri/src/db/: SQLite schema and data access.src-tauri/src/media_protocol.rs: bounded media proxy and range responses.src-tauri/src/ai.rs: AI summary, translation, batch digest, and queue processing.src/services/runtime.ts: frontend bridge for Rust runtime commands.src/stores/: Zustand stores for feeds, settings, rules, UI state, and search history.src/components/: React UI components and lazy-loaded article rendering.
