{"id":32443716,"url":"https://github.com/bahdotsh/feedr","last_synced_at":"2026-03-06T09:07:45.847Z","repository":{"id":285761326,"uuid":"959219384","full_name":"bahdotsh/feedr","owner":"bahdotsh","description":"A feature-rich terminal-based RSS/Atom feed reader written in Rust.","archived":false,"fork":false,"pushed_at":"2025-10-17T13:36:26.000Z","size":5019,"stargazers_count":87,"open_issues_count":1,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-18T09:46:21.096Z","etag":null,"topics":["atom","atom-feed","atom-feed-reader","cli","hacktoberfest","ratatui","rss","rss-aggregator","rss-feed","rss-reader","rust","tui"],"latest_commit_sha":null,"homepage":"https://github.com/bahdotsh/feedr","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bahdotsh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-02T12:55:32.000Z","updated_at":"2025-10-18T07:22:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"42202ad8-01ab-4d4d-95ab-88d82efb51c0","html_url":"https://github.com/bahdotsh/feedr","commit_stats":null,"previous_names":["bahdotsh/feedr"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bahdotsh/feedr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahdotsh%2Ffeedr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahdotsh%2Ffeedr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahdotsh%2Ffeedr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahdotsh%2Ffeedr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bahdotsh","download_url":"https://codeload.github.com/bahdotsh/feedr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahdotsh%2Ffeedr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281051353,"owners_count":26435741,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-26T02:00:06.575Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atom","atom-feed","atom-feed-reader","cli","hacktoberfest","ratatui","rss","rss-aggregator","rss-feed","rss-reader","rust","tui"],"created_at":"2025-10-26T03:01:37.724Z","updated_at":"2026-03-06T09:07:45.817Z","avatar_url":"https://github.com/bahdotsh.png","language":"Rust","readme":"# Feedr - Terminal RSS Feed Reader 📰\n\nFeedr 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.\n\n![Feedr Terminal RSS Reader](assets/images/feedr.png)\n\n## Demo\n\n![Feedr Demo](demo.gif)\n\n## Features\n\n- **Dashboard View**: See the latest articles across all your feeds, sorted chronologically\n- **Feed Management**: Subscribe to and organize multiple RSS/Atom feeds\n- **Starred Articles**: Save articles for later with a dedicated starred view\n- **Categories**: Organize feeds into custom categories with create, rename, and delete support\n- **Advanced Filtering**: Filter articles by category, age, author, read status, starred status, and content length\n- **Dual Themes**: Switch between a dark cyberpunk theme and a light zen theme with `t`\n- **Live Search**: Instantly search across all feed titles and article content\n- **Summary View**: \"What's New\" screen shows articles added since your last session with per-feed stats\n- **Read/Unread Tracking**: Persistent read state tracking across sessions\n- **Article Preview**: Toggle an inline preview pane in the feed items view\n- **OPML Import**: Bulk import feeds from OPML files via `feedr --import \u003cfile.opml\u003e`\n- **Browser Integration**: Open articles in your default browser\n- **Background Refresh**: Automatic feed updates with configurable intervals and smart rate limiting\n- **Rate Limiting**: Per-domain request throttling prevents \"too many requests\" errors (ideal for Reddit feeds)\n- **Vim-Style Navigation**: Use `j`/`k` alongside arrow keys for navigation\n- **Rich Content Display**: HTML-to-text conversion with clean article formatting\n- **Authenticated Feeds**: Support for custom HTTP headers per feed (e.g., `Authorization: Bearer ...`) for private/authenticated RSS feeds\n- **Compact Mode**: Automatic compact layout for small terminals (≤30 rows), with manual `always`/`never` override in config\n- **CLI Config Management**: Get, set, and list configuration from the command line (`feedr config`), or use the interactive TUI config editor (`feedr config --tui`)\n- **Configurable**: Customize timeouts, themes, UI behavior, and default feeds via TOML config\n- **XDG Compliant**: Follows standard directory specifications for configuration and data storage\n\n## Installation\n\n### Prerequisites\n\n- Rust and Cargo (install from [https://rustup.rs/](https://rustup.rs/))\n\n### Using Cargo Install (Recommended)\n```bash\ncargo install feedr\n```\n\n### Arch Linux (AUR)\nFeedr is available on the [AUR](https://aur.archlinux.org/packages/feedr). Install it using your preferred AUR helper:\n```bash\nparu -S feedr\n# or\nyay -S feedr\n```\n\n### Build from Source\n```bash\ngit clone https://github.com/bahdotsh/feedr.git\ncd feedr\ncargo build --release\n```\n\nThe binary will be available at `target/release/feedr`.\n\n## Usage\n\nRun the application:\n\n```bash\nfeedr\n```\n\n### OPML Import\n\nImport feeds from an OPML file:\n```bash\nfeedr --import feeds.opml\n```\n\n### Configuration Management\n\nView and modify settings from the command line:\n```bash\nfeedr config list                      # List all settings with current values\nfeedr config get ui.theme              # Get a single value\nfeedr config set ui.theme light        # Set a value (with validation)\nfeedr config --tui                     # Open interactive TUI config editor\n```\n\nAvailable config keys use dot-notation (e.g. `general.max_dashboard_items`, `network.http_timeout`, `ui.theme`, `ui.compact_mode`). Run `feedr config list` to see all keys. Feed management (`default_feeds`) is only available through the TUI editor.\n\n### Quick Start\n1. When you open Feedr for the first time, press `a` to add a feed\n2. Enter a valid RSS feed URL (e.g., `https://news.ycombinator.com/rss`)\n3. You can also press `1`, `2`, or `3` to quickly add Hacker News, TechCrunch, or BBC News\n4. Use arrow keys (or `j`/`k`) to navigate and `Enter` to view items\n5. Press `o` to open the current article in your browser\n6. Press `t` to toggle between dark and light themes\n\n### Keyboard Controls\n\n#### General Navigation\n| Key | Action |\n|-----|--------|\n| `Tab` | Cycle forward through views |\n| `Shift+Tab` | Cycle backward through views |\n| `q` | Go back (quit from Dashboard) |\n| `Ctrl+Q` | Quit from any view |\n| `r` | Refresh all feeds |\n| `t` | Toggle dark/light theme |\n| `/` | Search mode |\n\n#### Dashboard View\n| Key | Action |\n|-----|--------|\n| `↑/↓` or `k/j` | Navigate items |\n| `Enter` | View selected item |\n| `f` | Filter articles |\n| `c` / `Ctrl+C` | Category management |\n| `a` | Add a new feed |\n| `s` | Toggle starred |\n| `Space` | Toggle read/unread |\n| `p` | Toggle preview pane |\n| `o` | Open link in browser |\n| `1/2/3` | Quick-add demo feeds (HN, TechCrunch, BBC) |\n\n#### Feed List View\n| Key | Action |\n|-----|--------|\n| `q` / `h` / `Esc` | Go to dashboard |\n| `↑/↓` or `k/j` | Navigate feeds |\n| `Enter` | View feed items |\n| `a` | Add a new feed |\n| `d` | Delete selected feed |\n\n#### Feed Items View\n| Key | Action |\n|-----|--------|\n| `q` / `h` / `Esc` / `Backspace` | Back to feeds list |\n| `Home` | Go to dashboard |\n| `↑/↓` or `k/j` | Navigate items |\n| `Enter` | View item details |\n| `s` | Toggle starred |\n| `Space` | Toggle read/unread |\n| `o` | Open item in browser |\n\n#### Item Detail View\n| Key | Action |\n|-----|--------|\n| `q` / `h` / `Esc` / `Backspace` | Back to feed items |\n| `↑/↓` or `u/d` | Scroll content |\n| `Page Up` / `Page Down` | Scroll content (page) |\n| `g` | Jump to top |\n| `G` / `End` | Jump to bottom |\n| `s` / `Space` | Toggle starred |\n| `o` | Open item in browser |\n\n#### Categories View\n| Key | Action |\n|-----|--------|\n| `n` | Create new category |\n| `e` | Rename category |\n| `d` | Delete category |\n| `Space` | Expand/collapse category |\n| `h` / `Esc` | Back |\n\n#### Filter Mode (press `f` on Dashboard)\n| Key | Action |\n|-----|--------|\n| `c` | Filter by category |\n| `t` | Filter by time/age |\n| `a` | Filter by author |\n| `r` | Filter by read status |\n| `s` | Filter by starred status |\n| `l` | Filter by content length |\n| `x` | Clear all filters |\n\n## Configuration\n\nFeedr supports customization through a TOML configuration file that follows XDG Base Directory specifications. You can edit the file directly, use `feedr config get/set` from the command line, or use `feedr config --tui` for an interactive editor.\n\n### Configuration File Location\n\n- **Linux/macOS**: `~/.config/feedr/config.toml`\n- **Windows**: `%APPDATA%\\feedr\\config.toml`\n\nThe configuration file is automatically generated with default values on first run if it doesn't exist.\n\n### Available Settings\n\n```toml\n# Feedr Configuration File\n\n[general]\nmax_dashboard_items = 100           # Maximum number of items shown on dashboard\nauto_refresh_interval = 0           # Auto-refresh interval in seconds (0 = disabled)\nrefresh_enabled = false             # Enable automatic background refresh\nrefresh_rate_limit_delay = 2000     # Delay in milliseconds between requests to same domain\n\n[network]\nhttp_timeout = 15              # HTTP request timeout in seconds\nuser_agent = \"Mozilla/5.0 (compatible; Feedr/1.0; +https://github.com/bahdotsh/feedr)\"\n\n[ui]\ntick_rate = 100                # UI update rate in milliseconds\nerror_display_timeout = 3000   # Error message duration in milliseconds\ntheme = \"dark\"                 # Theme: \"dark\" (cyberpunk) or \"light\" (zen)\ncompact_mode = \"auto\"          # Compact layout: \"auto\", \"always\", or \"never\"\n\n# Optional: Define default feeds to load on first run\n[[default_feeds]]\nurl = \"https://example.com/feed.xml\"\ncategory = \"News\"\n\n# Authenticated feed with custom HTTP headers\n[[default_feeds]]\nurl = \"https://private.example.com/feed.xml\"\n[default_feeds.headers]\nAuthorization = \"Bearer your_token_here\"\n```\n\n### Configuration Options Explained\n\n#### General Settings\n- **max_dashboard_items**: Controls how many items are displayed on the dashboard (default: 100)\n- **auto_refresh_interval**: Automatically refresh feeds at specified interval in seconds (0 disables auto-refresh)\n- **refresh_enabled**: Master switch to enable/disable automatic background refresh (default: false)\n- **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.\n\n#### Network Settings\n- **http_timeout**: Timeout for HTTP requests when fetching feeds (useful for slow connections)\n- **user_agent**: Custom User-Agent string for HTTP requests\n\n#### UI Settings\n- **tick_rate**: How frequently the UI updates in milliseconds (lower = more responsive, higher = less CPU usage)\n- **error_display_timeout**: How long error messages are displayed in milliseconds\n- **theme**: Choose between `\"dark\"` (cyberpunk aesthetic with neon colors) or `\"light\"` (zen minimalist with organic colors). Can also be toggled at runtime with `t`.\n- **compact_mode**: Controls the compact layout for small terminals. `\"auto\"` (default) enables compact mode when terminal height is ≤30 rows, `\"always\"` forces compact mode, and `\"never\"` disables it. Compact mode uses single-line items, a minimal title bar, and an abbreviated help bar to maximize screen real estate.\n\n#### Background Refresh Example\nTo enable automatic refresh every 5 minutes with rate limiting:\n```toml\n[general]\nrefresh_enabled = true\nauto_refresh_interval = 300  # 5 minutes\nrefresh_rate_limit_delay = 2000  # 2 seconds between requests to same domain\n```\n\n**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.\n\n#### Default Feeds\nYou can define feeds to be automatically loaded on first run:\n```toml\n[[default_feeds]]\nurl = \"https://news.ycombinator.com/rss\"\ncategory = \"Tech\"\n\n[[default_feeds]]\nurl = \"https://example.com/feed.xml\"\ncategory = \"News\"\n```\n\n#### Authenticated Feeds\nSome RSS feeds require authentication or custom HTTP headers. You can configure per-feed headers:\n```toml\n[[default_feeds]]\nurl = \"https://private.example.com/feed.xml\"\n[default_feeds.headers]\nAuthorization = \"Bearer your_api_token\"\n\n[[default_feeds]]\nurl = \"https://another-api.example.com/rss\"\n[default_feeds.headers]\nX-API-Key = \"your_api_key\"\nCookie = \"session=abc123\"\n```\nHeaders are sent with every request for that feed, including refreshes.\n\n### Data Storage\n\nFeedr stores your bookmarks, categories, read/unread state, and starred articles in:\n- **Linux/macOS**: `~/.local/share/feedr/feedr_data.json`\n- **Windows**: `%LOCALAPPDATA%\\feedr\\feedr_data.json`\n\n### Backwards Compatibility\n\nFeedr 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.\n\n## Dependencies\n\n- **[ratatui](https://github.com/ratatui-org/ratatui)**: Terminal UI framework\n- **[crossterm](https://github.com/crossterm-rs/crossterm)**: Terminal manipulation\n- **[reqwest](https://github.com/seanmonstar/reqwest)**: HTTP client (with gzip/deflate/brotli support)\n- **[feed-rs](https://github.com/feed-rs/feed-rs)**: RSS and Atom feed parsing\n- **[html2text](https://github.com/servo/html5ever)**: HTML to text conversion\n- **[chrono](https://github.com/chronotope/chrono)**: Date and time handling\n- **[serde](https://github.com/serde-rs/serde)**: Serialization/deserialization\n- **[clap](https://github.com/clap-rs/clap)**: Command-line argument parsing\n- **[opml](https://github.com/Holllo/opml)**: OPML import support\n- **[toml](https://github.com/toml-rs/toml)**: Configuration file parsing\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n","funding_links":[],"categories":["Rust","💻 Apps"],"sub_categories":["🚀 Productivity and Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbahdotsh%2Ffeedr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbahdotsh%2Ffeedr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbahdotsh%2Ffeedr/lists"}