Skip to main content

RSS CLI

A beautiful terminal RSS feed reader powered by Textual.

Python License PyPI

Features

  • Interactive TUI — Full terminal UI with keyboard navigation, not just text output
  • Source-type Tabs — Filter articles by source: All, RSS, Reddit, Twitter/X, Bookmarks
  • RSS Marketplace — Discover and subscribe to feeds by category or search (powered by Feedly)
  • Full Article Fetch — Press f to fetch the full article content from the web when RSS feeds only provide snippets
  • HTML → Markdown — Rich article rendering with proper headings, links, lists, code blocks, and more
  • Article Pagination — Browse 25 articles at a time with "Load more" for large feeds
  • Article Numbering — See your position: 1/62 shows article index and total count
  • Read Tracking — Articles are marked as read automatically
  • Bookmarks — Save articles with b and view them in the Bookmarks tab
  • Search — Filter articles by keyword across title, description, author, and feed
  • Feed Management — Add, remove, and browse RSS feeds interactively
  • Reddit & Twitter/X — Built-in support for Reddit RSS and Nitter (Twitter/X) feeds with instance fallback
  • Caching — Feeds are cached with configurable TTL (30 min default)
  • Parallel Fetching — All feeds fetched concurrently with async httpx
  • Browser Integration — Open articles in your default browser with o
  • Theme Cycling — Switch between dark themes with t
  • Refresh Notifications — See "Refreshing feeds…" and "✓ Refreshed X feeds · Y articles"

Install

pip install rss-cli

Or install from source:

git clone https://github.com/MohammedSaudAlsahli/rss-cli.git
cd rss-cli
uv sync

Usage

Interactive TUI (recommended)

rss

This launches the full terminal UI where you can:

Key Action
Enter Read selected article
f Fetch full article from the web
o Open article in browser
b Toggle bookmark
n / p Next / previous article (in reader)
a Add new feed
m Open RSS marketplace
d Delete a feed
s Search articles
r Refresh feeds
t Cycle theme
Esc Go back
q Quit
? Help

CLI Commands

rss add <url>       # Add a feed
rss remove <url>    # Remove a feed
rss list            # List all feeds
rss refresh         # Fetch all feeds
rss read            # Launch the TUI
rss --version       # Show version

Source Tabs

The left panel has tabs to filter articles by source type:

  • All — Every article from all feeds
  • RSS — Standard RSS/Atom feeds
  • Reddit — Reddit subreddit feeds (auto-detected from URL)
  • Twitter — Nitter/Twitter feeds (auto-detected from URL)
  • Bookmarks — Your saved articles

RSS Marketplace

Press m to open the marketplace where you can:

  • Browse curated categories (Tech, Programming, AI, Science, etc.)
  • Search for feeds by keyword
  • See subscriber counts for each feed
  • Press Enter to subscribe instantly

Full Article Fetch

When an RSS feed only provides a short snippet, press f in the article reader to:

  1. Fetch the full web page
  2. Extract the main article content using readability-lxml
  3. Convert HTML to Markdown for beautiful terminal rendering
  4. Cache the result for the session

Configuration

Config and data are stored in XDG-compliant directories:

  • Config: ~/.config/rss-cli/
  • Cache: ~/.cache/rss-cli/
  • Data: ~/.local/share/rss-cli/

Custom Settings

Create ~/.config/rss-cli/config.toml:

[settings]
cache_ttl_seconds = 1800       # Cache duration (default: 30 min)
max_articles_per_feed = 200    # Max articles per feed

[twitter]
nitter_instances = [
    "nitter.net",
    "xcancel.com",
    "nitter.poast.org",
    "nitter.privacyredirect.com",
]

Adding Feeds

RSS feeds:

rss add https://news.ycombinator.com/rss

Reddit subreddits (auto-detected):

rss add https://www.reddit.com/r/python/.rss

Twitter/X via Nitter (auto-detected):

rss add https://nitter.net/elonmusk/rss

Recommended RSS Feeds

Find more in the built-in marketplace (press m) or at rss.com/blog/popular-rss-feeds.

Development

# Install dependencies
uv sync

# Run tests
uv run pytest

# Run linter
uv run ruff check .

# Type check
uv run mypy rss_cli

# Run the app
uv run rss

Changelog

v0.3.0

  • Source-type tabs — Filter articles by All, RSS, Reddit, Twitter, Bookmarks
  • RSS Marketplace — Discover and subscribe to feeds by category or search
  • Full article fetch — Press f to fetch full article content from the web
  • HTML → Markdown — Rich rendering with headings, links, lists, code blocks
  • Article pagination — Browse 25 articles at a time with "Load more"
  • Article numbering — See position like 1/62 in the article list
  • Refresh notifications — "Refreshing feeds…" → "✓ Refreshed X feeds · Y articles"
  • DateTime fix — All datetimes are UTC-aware, preventing comparison errors
  • max_articles_per_feed raised from 50 to 200

v0.2.0

  • Reddit and Twitter/X feed support with Nitter fallback
  • Async feed fetching with httpx
  • OOP refactor — CSS, themes, utils, dialogs extracted

v0.1.0

  • Initial release

License

MIT © Mohammed Alsahli

Metadata

Release files for rss-cli 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rss-cli 0.3.0
File Size Uploaded
rss_cli-0.3.0.tar.gz 65.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rss-cli 0.3.0
File Interpreter ABI Platform
rss_cli-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 101.0 kB

Release files / rss_cli-0.3.0.tar.gz

Download URL rss_cli-0.3.0.tar.gz
Size 65.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4cfcb3f4879d3b6074fb47b78deed4267995ed3c097beedaae23a5c5e643e633
BLAKE2b-256 checksum
How to use checksums
ce6a482099ff6321d639010d4fc22707a9159ac0c47be2070fe7e698fe56bf88
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / rss_cli-0.3.0-py3-none-any.whl

Download URL rss_cli-0.3.0-py3-none-any.whl
Size 35.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
14d2214941e88b3673181213961a63c20a157b875f61dd8e64f5de124d5005d6
BLAKE2b-256 checksum
How to use checksums
22e11693410707b67a41de2287ae21f4496103d52d114025ee5b0a8be2bb5139
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.1.3

2 release files

0.1.2

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page