R

reader

536 stars·Developer Tools·SHA-256 checksum verified

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)

Troubleshooting
How 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.

GitHub Issue #405
Troubleshooting
How 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.

GitHub Issue #322

Tags

feed-readerrssatompythonlibraryopmlfull-text-search

Getting Started

1

Download installer

Click the button above to download the installer for your system

2

Install the software

Double-click the downloaded installer and follow the prompts

3

Step 1: Install via pip: pip install reader

4

Step 2: Import and create a reader: from reader import make_reader; reader = make_reader('feeds.db')

5

Step 3: Add a feed and update: reader.add_feed('https://example.com/feed'); reader.update_feeds()

Install Guide
  1. Step 1: Install via pip: pip install reader
  2. Step 2: Import and create a reader: from reader import make_reader; reader = make_reader('feeds.db')
  3. Step 3: Add a feed and update: reader.add_feed('https://example.com/feed'); reader.update_feeds()
File Integrity

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 Source
Environment Guide

Uninstall 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.

Project Info
LicenseBSD-3-Clause
Last Updated2026-10-15 08:52:22
GitHub RepositoryOfficial Website

Having issues? Check the FAQ below

2 FAQs

Similar Projects