reader
Reader is a Python library for building feed reader applications. It handles Atom, RSS, and JSON feeds, stores them in a database, allows marking, tagging, filtering, full-text search, and OPML import/export. Includes optional Flask web app and CLI.
Smart Download
Visit Project Homepage
No installer available yet — head to the source repository
A Python feed reader library with storage, search, and optional web interface.
Core Features
- Supports Atom, RSS, and JSON feeds
- Mark as read/important, add custom tags and metadata
- Full-text search with keyword highlighting
- OPML import/export for migration
- Plugin system for extensions
What It Can't Do
- •Reader is a library, not a standalone app; use the included Flask app or build your own UI,Default backend is SQLite; performance may degrade with large datasets; no other backends are natively supported yet,Full-text search requires calling update_search() first to build the index,Some Python versions may require additional dependencies; see official docs
Use Cases
- Self-hosted personalized RSS reader
- Embed feed management into existing Python apps
- Batch fetch and analyze news/podcast feeds
Detailed Introduction
Reader is a Python library for building feed reader applications. It handles Atom, RSS, and JSON feeds, storing them in a database, marking articles read/important, adding tags, filtering, full-text search, and OPML import/export. It provides stable APIs, excellent test coverage, and type hints. Optional Flask web app and command-line interface are included. Unlike feedparser (parse-only), Reader offers a full backend without framework dependency.
Troubleshooting & FAQ (2)
TroubleshootingHow to fix reader 3.24 sqlite3.OperationalError: 'user-defined function raised exception' during startup migration?
Upgrade to reader 3.25 or newer, which fixes the schema v43 to v44 migration:
python -m pip install --upgrade 'reader>=3.25'
Stop the app and back up the SQLite database before upgrading. Version 3.25 handles author strings with multiple parenthesized groups, source JSON objects missing author, and removal of the stale author key after adding authors.
If you must use 3.24, apply these emergency workarounds with sqlite3 your-database.db after making a backup:
1. Before starting 3.24 for the first time, clear authors containing two parenthesized groups:UPDATE entries SET author = NULL WHERE author LIKE '%(%)%(%)%';
2. Add a null author key to legacy source JSON that lacks it:UPDATE entries SET source = json_set(source, '$.author', json('null')) WHERE source IS NOT NULL AND json_type(source) = 'object' AND json_type(source, '$.author') IS NULL;
3. Start reader 3.24 and let the migration run.
4. If endpoints then fail with TypeError: EntrySource.__init__() got an unexpected keyword argument 'author', remove the stale key:UPDATE entries SET source = json_remove(source, '$.author') WHERE source IS NOT NULL AND json_type(source, '$.author') IS NOT NULL;
Prefer upgrading to 3.25 rather than modifying the database manually.
TroubleshootingHow to deduplicate feed entries when item IDs change and content-based deduplication fails?
Use the .dedupe.once.title plugin feature after verifying: 1) old entries have no duplicate titles, 2) most new entries share exact titles with old ones. Apply .dedupe.once.title to deduplicate based on title matching. Note: The plugin does not yet automate these checks; manual verification is required.
Tags
Getting Started
Download installer
Click the button above to download the installer for your system
Install the software
Double-click the downloaded installer and follow the prompts
Step 1: Install via pip: pip install reader
Step 2: Import and create a reader: from reader import make_reader; reader = make_reader('feeds.db')
Step 3: Add a feed and update: reader.add_feed('https://example.com/feed'); reader.update_feeds()
- Step 1: Install via pip: pip install reader
- Step 2: Import and create a reader: from reader import make_reader; reader = make_reader('feeds.db')
- Step 3: Add a feed and update: reader.add_feed('https://example.com/feed'); reader.update_feeds()
Checksum not available
This project has not published a SHA-256 checksum on its GitHub Release page
SHA256 Checksum
No checksum available
Download directly from GitHub Releases and verify file integrity yourself
All SHA-256 checksums on this platform are extracted from the project's official GitHub Release page, without any modification. You can independently verify them on the GitHub Releases page.
Open Source Transparency
View GitHub SourceUninstall Info
Run pip uninstall reader to remove the library. Manually delete the database file (e.g., feeds.db) if needed.
No Extra Dependencies
Ready to use after download. No additional runtime required.
Having issues? Check the FAQ below
2 FAQs
Similar Projects
Visual Studio Code (Code - OSS)
A free, open-source code editor by Microsoft with rich extensions, debugging, and Git integration. The most popular developer tool worldwide.
opencode
OpenCode is a free, open-source AI coding agent that helps you write, refactor, and understand code. It offers two built-in modes: a full-access 'build' agent for active coding and a read-only 'plan' agent for safe exploration.
scrcpy
Display and control your Android device from your computer via USB or TCP/IP. No root required, high performance, low latency, supports audio and video mirroring.