A beautiful terminal RSS feed reader powered by Textual
Project description
RSS CLI
A beautiful terminal RSS feed reader powered by Textual.
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
fto 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/62shows article index and total count - Read Tracking — Articles are marked as read automatically
- Bookmarks — Save articles with
band 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
Enterto subscribe instantly
Full Article Fetch
When an RSS feed only provides a short snippet, press f in the article reader to:
- Fetch the full web page
- Extract the main article content using readability-lxml
- Convert HTML to Markdown for beautiful terminal rendering
- 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
- Hacker News — Tech news
- BBC News — World news
- TechCrunch — Tech startup news
- The Verge — Technology and culture
- r/Python — Python community
- r/Programming — Programming discussion
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
fto 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/62in 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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rss_cli-0.3.0.tar.gz.
File metadata
- Download URL: rss_cli-0.3.0.tar.gz
- Upload date:
- Size: 65.2 kB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cfcb3f4879d3b6074fb47b78deed4267995ed3c097beedaae23a5c5e643e633
|
|
| MD5 |
d2b3cb2ebccfe4e58a1e8dc14e670b52
|
|
| BLAKE2b-256 |
ce6a482099ff6321d639010d4fc22707a9159ac0c47be2070fe7e698fe56bf88
|
File details
Details for the file rss_cli-0.3.0-py3-none-any.whl.
File metadata
- Download URL: rss_cli-0.3.0-py3-none-any.whl
- Upload date:
- Size: 35.8 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14d2214941e88b3673181213961a63c20a157b875f61dd8e64f5de124d5005d6
|
|
| MD5 |
8482b0cbbaded618f4cc0e8a7d9db011
|
|
| BLAKE2b-256 |
22e11693410707b67a41de2287ae21f4496103d52d114025ee5b0a8be2bb5139
|