Feedr - Terminal RSS Feed Reader 📰
Feedr is a feature-rich terminal-based RSS feed reader written in Rust. It provides a clean, intuitive TUI interface for managing and reading RSS feeds with elegant visuals and smooth keyboard navigation.

Features
- Dashboard View: See the latest articles across all your feeds
- Feed Management: Subscribe to and organize multiple RSS feeds
- Rich Content Display: Beautiful formatting of articles with HTML-to-text conversion
- Smart Search: Quickly find content across all your feeds
- Browser Integration: Open articles in your default browser
- Background Refresh: Automatic feed updates with configurable intervals and smart rate limiting
- Rate Limiting: Prevents "too many requests" errors with per-domain request throttling (ideal for Reddit feeds)
- Configurable: Customize timeouts, UI behavior, and default feeds via TOML config file
- XDG Compliant: Follows standard directory specifications for configuration and data storage
Installation
Prerequisites
- Rust and Cargo (install from https://rustup.rs/)
Using Cargo Install (Recommended)
Build from Source
The binary will be available at target/release/feedr.
Usage
Run the application:
Quick Start
- When you open Feedr for the first time, press
ato add a feed - Enter a valid RSS feed URL (e.g.,
https://news.ycombinator.com/rss) - Use arrow keys to navigate and
Enterto view items - Press
oto open the current article in your browser
Keyboard Controls
General Navigation
| Key | Action |
|---|---|
Tab |
Cycle between views |
q |
Quit application |
r |
Refresh all feeds |
/ |
Search mode |
Dashboard View
| Key | Action |
|---|---|
f |
Go to feeds list |
a |
Add a new feed |
↑/↓ |
Navigate items |
Enter |
View selected item |
o |
Open link in browser |
Feed List View
| Key | Action |
|---|---|
h / Esc |
Go to dashboard |
a |
Add a new feed |
d |
Delete selected feed |
↑/↓ |
Navigate feeds |
Enter |
View feed items |
Feed Items View
| Key | Action |
|---|---|
h / Esc |
Back to feeds list |
Home |
Go to dashboard |
↑/↓ |
Navigate items |
Enter |
View item details |
o |
Open item in browser |
Item Detail View
| Key | Action |
|---|---|
h / Esc |
Back to feed items |
Home |
Go to dashboard |
o |
Open item in browser |
Configuration
Feedr supports customization through a TOML configuration file that follows XDG Base Directory specifications.
Configuration File Location
- Linux/macOS:
~/.config/feedr/config.toml - Windows:
%APPDATA%\feedr\config.toml
The configuration file is automatically generated with default values on first run if it doesn't exist.
Available Settings
# Feedr Configuration File
[]
= 100 # Maximum number of items shown on dashboard
= 0 # Auto-refresh interval in seconds (0 = disabled)
= false # Enable automatic background refresh
= 2000 # Delay in milliseconds between requests to same domain
[]
= 15 # HTTP request timeout in seconds
= "Mozilla/5.0 (compatible; Feedr/1.0; +https://github.com/bahdotsh/feedr)"
[]
= 100 # UI update rate in milliseconds
= 3000 # Error message duration in milliseconds
# Optional: Define default feeds to load on first run
[[]]
= "https://example.com/feed.xml"
= "News"
Configuration Options Explained
General Settings
- max_dashboard_items: Controls how many items are displayed on the dashboard (default: 100)
- auto_refresh_interval: Automatically refresh feeds at specified interval in seconds (0 disables auto-refresh)
- refresh_enabled: Master switch to enable/disable automatic background refresh (default: false)
- refresh_rate_limit_delay: Delay in milliseconds between requests to the same domain to prevent "too many requests" errors (default: 2000ms). This is especially useful for Reddit feeds and other rate-limited services.
Network Settings
- http_timeout: Timeout for HTTP requests when fetching feeds (useful for slow connections)
- user_agent: Custom User-Agent string for HTTP requests
UI Settings
- tick_rate: How frequently the UI updates in milliseconds (lower = more responsive, higher = less CPU usage)
- error_display_timeout: How long error messages are displayed in milliseconds
Background Refresh Example
To enable automatic refresh every 5 minutes with rate limiting:
[]
= true
= 300 # 5 minutes
= 2000 # 2 seconds between requests to same domain
Note: Rate limiting groups feeds by domain and staggers requests to prevent hitting API limits. For example, if you have multiple Reddit feeds, they will be fetched with a 2-second delay between each request to avoid getting blocked.
Default Feeds
You can define feeds to be automatically loaded on first run:
[[]]
= "https://news.ycombinator.com/rss"
= "Tech"
[[]]
= "https://example.com/feed.xml"
= "News"
Data Storage
Feedr stores your bookmarks, categories, and read items in:
- Linux/macOS:
~/.local/share/feedr/feedr_data.json - Windows:
%LOCALAPPDATA%\feedr\feedr_data.json
Backwards Compatibility
Feedr automatically migrates data from older versions to the new XDG-compliant locations. Your existing data will be preserved and automatically moved to the correct location on first run.
Dependencies
- ratatui: Terminal UI framework
- crossterm: Terminal manipulation
- reqwest: HTTP client
- rss: RSS parsing
- html2text: HTML to text conversion
- chrono: Date and time handling
- serde: Serialization/deserialization
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request