惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Register - Security
The Register - Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
L
LangChain Blog
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Security @ Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
H
Hacker News: Front Page
L
Lohrmann on Cybersecurity
T
Troy Hunt's Blog
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
T
Threatpost
AWS News Blog
AWS News Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Tor Project blog
Google Online Security Blog
Google Online Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tenable Blog
W
WeLiveSecurity
博客园 - 叶小钗
K
Kaspersky official blog
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
Hacker News - Newest:
Hacker News - Newest: "LLM"
Engineering at Meta
Engineering at Meta
有赞技术团队
有赞技术团队
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
小众软件
小众软件
D
Docker
爱范儿
爱范儿
C
Cyber Attacks, Cyber Crime and Cyber Security
N
News and Events Feed by Topic
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net

Hacker News: Front Page

SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads GitHub - GainSec/AutoProber: Hardware hacker’s flying probe automation stack for agent-driven target discovery, microscope mapping, safety-monitored CNC motion, probe review, and controlled pin probing. Introducing Claude Opus 4.7 Qwen Studio The Future of Everything is Lies, I Guess: Where Do We Go From Here? GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh Virginia Bans Sale of Geolocation Data Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis Ancient DNA reveals pervasive directional selection across West Eurasia [pdf] AI cybersecurity is not proof of work Moving a large-scale metrics pipeline from StatsD to OpenTelemetry / Prometheus GitHub - Nightmare-Eclipse/RedSun: The Red Sun vulnerability repository GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. A Better Ludum Dare; Or, How to Ruin a Legacy GitHub - macOS26/Agent: Any AI, replaces Claude Code, Cursor, OpenClaw. Over 18 LLM providers (Claude, OpenAI, Gemini, Ollama, Zai, HF, Qwen) wired into a native Mac app that writes code, builds Xcode projects, bumps versions, manages git, automates Safari, use AppleScript, JS or Accessibility, extend Agent! w/ MCP Servers, run tasks from your iPhone via Messages. YouTube now lets you turn off Shorts I Made a Terminal Pager Burgers | マクドナルド公式 Commands — HackerNews CLI documentation ChatGPT for Excel PiCore - Raspberry Pi Port of Tiny Core Linux Live Nation illegally monopolized ticketing market, jury finds Google Broke Its Promise to Me. Now ICE Has My Data. Founding Engineer at Adaptional | Y Combinator CRISPR takes important step toward silencing Down syndrome’s extra chromosome GitHub - saffron-health/libretto: The AI toolkit for building reliable browser automations US v. Heppner (S.D.N.Y. 2026) no attorney-client privilege for AI chats [pdf] Unexpected €54k billing spike in 13 hours: Firebase browser key without API restrictions used for Gemini requests Fragments: April 14 Cal.com Goes Closed Source: Why AI Security Is Forcing Our Decision | Cal.com - Scheduling Software for Online Bookings Laravel raised money and now injects ads directly into your agent Codex Hacked a Samsung TV Tech Valuations Back to Pre-AI Boom Levels A perfectable programming language — Soter GitHub - halfwhey/claudraband: Claude Code for the Power User Partnership through Play: Investigating How Long-Distance Couples Use Digital Games to Facilitate Intimacy Textbooks and Methods of Note-Taking in Early Modern Europe (2008) Eternity in six hours: Intergalactic spreading of intelligent life (2013) Seven countries now generate 100% of their electricity from renewable energy Tell HN: OpenAI silently removed Study Mode from ChatGPT Pro Max 5x Quota Exhausted in 1.5 Hours Despite Moderate Usage Show HN: Oberon System 3 runs natively on Raspberry Pi 3 (with ready SD card) Tell HN: docker pull fails in spain due to football cloudflare block Bring Back Idiomatic Design No one owes you supply-chain security GitHub - xsawyerx/curl-doom: DOOM, played over cURL Apple update turns Czech mate for locked-out iPhone user The Grand Line Cache TTL silently regressed from 1h to 5m around early March 2026, causing quota and cost inflation Building a Z-Machine in the worst possible language The peril of laziness lost Iran war: We spoke to the man making Lego-style AI videos that experts say are powerful propaganda AI Will Be Met With Violence, and Nothing Good Will Come of It GitHub - duguyue100/midnight-captain: Inspired by Midnight Commander, tailored to my taste. How to build a `git diff` driver · Jamie Tanna | Software Engineer Center for Responsible, Decentralized Intelligence at Berkeley The Local Universe’s Expansion Rate Is Clearer Than Ever, but Still Doesn’t Add Up - A new synthesis of astronomical measurements confirms a persistent mismatch that could point to physics beyond current models The disturbing white paper Red Hat is trying to erase from the internet – OSnews NetBlocks (@netblocks@mastodon.social) The Future of Everything is Lies, I Guess: Annoyances ‘Abhorrent’: the inside story of the Polymarket gamblers betting millions on war Productive procrastination — Max van IJsselmuiden maps, territory and LMs 447 Terabytes per Square Centimetre at Zero Retention Energy: Non-Volatile Memory at the Atomic Scale on Fluorographane Show HN: Pardonned.com – A searchable database of US Pardons 20 Years on AWS and Never Not My Job The Seasons are Wrong The FAA wants gamers to apply for air traffic control jobs Artemis II crew splashes down near San Diego after historic moon mission Why weekends are under threat We gave an AI a 3 year retail lease in SF and asked it to make a profit | Andon Labs How a dancer with ALS used brainwaves to perform live On filing the corners off my MacBooks Installing every* Firefox extension OpenClaw’s memory is unreliable, and you don’t know when it will break Steve Blank Nowhere Is Safe Chimpanzees in Uganda locked in vicious 'civil war', say researchers watgo - a WebAssembly Toolkit for Go linux/Documentation/process/coding-assistants.rst at master · torvalds/linux GitHub - callumlocke/json-formatter: Makes JSON easy to read. Founding Product Engineer at Bild AI | Y Combinator A compelling title that is cryptic enough to get you to take action on it GitHub - Keychron/Keychron-Keyboards-Hardware-Design: Industrial design files for Keychron keyboards and mice. 100+ models with CAD assets in STEP, DXF, DWG, and PDF. Source-available, with commercial use allowed for original compatible accessories within the license terms. [ANNOUNCE] WireGuardNT v0.11 and WireGuard for Windows v0.6 Released 1D-Chess Helium Is Hard to Replace Keeping a Postgres queue healthy — PlanetScale Serenity Forge (@serenityforge.com) Our response to the Axios developer tool compromise Do Americans read print books, e-books or audiobooks more? Uncharted island soon to appear on nautical charts The Problem That Built an Industry Fragments: April 2 Python Release Python install manager 26.1 Bitcoin miners are losing $19,000 on every BTC produced as difficulty drops 7.8% God sleeps in the minerals Harness engineering: leveraging Codex in an agent-first world Apple Silicon and Virtual Machines: Beating the 2 VM Limit What have been the greatest intellectual achievements? The APL Programming Language Source Code
GitHub - bahdotsh/feedr: A feature-rich terminal-based RSS/Atom feed reader written in Rust.
bahdotshxx · 2026-05-16 · via Hacker News: Front Page

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.

Feedr Terminal RSS Reader

Demo

Feedr Demo

Features

  • Dashboard View: See the latest articles across all your feeds, sorted chronologically
  • Feed Management: Subscribe to and organize multiple RSS/Atom feeds
  • Feed Auto-Discovery: Paste any webpage URL and Feedr will detect and offer to subscribe to its RSS/Atom feeds
  • Starred Articles: Save articles for later with a dedicated starred view
  • Categories: Organize feeds into custom categories with create, rename, and delete support
  • Tree View: Browse feeds in a hierarchical tree grouped by category
  • Advanced Filtering: Filter articles by category, age, author, read status, starred status, and content length
  • Dual Themes: Switch between a dark cyberpunk theme and a light zen theme with t
  • Live Search: Instantly search across all feed titles and article content
  • Summary View: "What's New" screen shows articles added since your last session with per-feed stats
  • Read/Unread Tracking: Persistent read state tracking across sessions
  • Mark All Read: Quickly mark all visible items as read with m
  • Article Preview: Toggle an inline preview pane in the dashboard view
  • Link Extraction: Extract and browse all links from an article with l
  • Full-Text Extraction: Strip away summaries and read the actual article content inline via Mozilla Readability — manual on Shift+F, or auto-extract on refresh per feed with fulltext = true
  • Help Overlay: Press ? for a scrollable keybinding reference overlay
  • OPML Import: Bulk import feeds from OPML files via feedr --import <file.opml>
  • Browser Integration: Open articles in your default browser
  • Mouse Support: Click to select items and scroll with the mouse wheel
  • Background Refresh: Automatic feed updates with configurable intervals and smart rate limiting
  • Rate Limiting: Per-domain request throttling prevents "too many requests" errors (ideal for Reddit feeds)
  • Vim-Style Navigation: Use j/k alongside arrow keys for navigation
  • Rich Content Display: HTML-to-text conversion with clean article formatting
  • Authenticated Feeds: Support for custom HTTP headers per feed (e.g., Authorization: Bearer ...) for private/authenticated RSS feeds
  • Compact Mode: Automatic compact layout for small terminals (≤30 rows), with manual always/never override in config
  • CLI Config Management: Get, set, and list configuration from the command line (feedr config), or use the interactive TUI config editor (feedr config --tui)
  • Configurable Keybindings: Remap any key action via the [keybindings] section in config.toml
  • External-Command Hooks: Newsboat-style macros (pipe-to, exec) bound to keys, plus exec_on_new notifications fired per new item — all with shell-free argument templating
  • Configurable: Customize timeouts, themes, UI behavior, and default feeds via TOML config
  • XDG Compliant: Follows standard directory specifications for configuration and data storage

Installation

Prerequisites

Using Cargo Install (Recommended)

cargo install feedr

Arch Linux (AUR)

Feedr is available on the AUR. Install it using your preferred AUR helper:

paru -S feedr
# or
yay -S feedr

Build from Source

git clone https://github.com/bahdotsh/feedr.git
cd feedr
cargo build --release

The binary will be available at target/release/feedr.

Usage

Run the application:

feedr

OPML Import

Import feeds from an OPML file:

feedr --import feeds.opml

Configuration Management

View and modify settings from the command line:

feedr config list                      # List all settings with current values
feedr config get ui.theme              # Get a single value
feedr config set ui.theme light        # Set a value (with validation)
feedr config --tui                     # Open interactive TUI config editor

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

Quick Start

  1. When you open Feedr for the first time, press a to add a feed
  2. Enter a valid RSS feed URL (e.g., https://news.ycombinator.com/rss)
  3. You can also press 1, 2, or 3 to quickly add Hacker News, TechCrunch, or BBC News
  4. Use arrow keys (or j/k) to navigate and Enter to view items
  5. Press o to open the current article in your browser
  6. Press t to toggle between dark and light themes

Keyboard Controls

All keybindings below show their defaults. You can remap any action via the [keybindings] section in your config file — see Configurable Keybindings.

General Navigation

Key Action
Tab Cycle forward through views
Shift+Tab Cycle backward through views
q Go back (quit from Dashboard)
h / Esc / Backspace Go back one view
Home Return to Dashboard
Ctrl+Q Quit from any view
r Refresh all feeds
t Toggle dark/light theme
/ Search mode
? Help overlay (scrollable keybinding reference)

Dashboard View

Key Action
↑/↓ or k/j Navigate items
g / G or End Jump to top / bottom
Enter View selected item
f Filter articles
c Cycle category filter
Ctrl+C Open category management
a Add a new feed
s Toggle starred
Space Toggle read/unread
m Mark all items as read
p Toggle preview pane
Shift+J / Shift+K Scroll preview down / up
o Open link in browser
1/2/3 Quick-add demo feeds (HN, TechCrunch, BBC)

Feed List View

Key Action
q / h / Esc Go to dashboard
↑/↓ or k/j Navigate feeds
Enter View feed items
Space Expand/collapse category (tree view)
a Add a new feed
d Delete selected feed
c Assign category to feed

Feed Items View

Key Action
q / h / Esc / Backspace Back to feeds list
Home Go to dashboard
↑/↓ or k/j Navigate items
g / G or End Jump to top / bottom
Enter View item details
s Toggle starred
Space Toggle read/unread
m Mark all items as read
o Open item in browser

Item Detail View

Key Action
q / h / Esc / Backspace Back to feed items
↑/↓ or k/j Scroll content
Ctrl+U / Ctrl+D Scroll content (page)
Page Up / Page Down Scroll content (page)
g Jump to top
G / End Jump to bottom
s Toggle starred
o Open item in browser
l Extract and show all links
Shift+F Toggle/fetch full-text (Readability)

Starred View

Key Action
↑/↓ or k/j Navigate items
Enter View item details
s Remove from starred
o Open item in browser

Categories View

Key Action
n Create new category
e Rename category
d Delete category
Space Expand/collapse category
Enter Select category
r Refresh
? Help
h / Esc / q Back

Filter Mode (press f on Dashboard)

Key Action
c Filter by category
t Filter by time/age
a Filter by author
r Filter by read status
s Filter by starred status
l Filter by content length
x Clear all filters

Mouse Support

Action Effect
Left click Select item
Scroll up/down Navigate items

Configuration

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

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

[general]
max_dashboard_items = 100           # Maximum number of items shown on dashboard
auto_refresh_interval = 0           # Auto-refresh interval in seconds (0 = disabled)
refresh_enabled = false             # Enable automatic background refresh
refresh_rate_limit_delay = 2000     # Delay in milliseconds between requests to same domain

[network]
http_timeout = 15              # HTTP request timeout in seconds
user_agent = "Mozilla/5.0 (compatible; Feedr/1.0; +https://github.com/bahdotsh/feedr)"

[ui]
tick_rate = 100                # UI update rate in milliseconds
error_display_timeout = 3000   # Error message duration in milliseconds
theme = "dark"                 # Theme: "dark" (cyberpunk) or "light" (zen)
compact_mode = "auto"          # Compact layout: "auto", "always", or "never"

# Optional: Define default feeds to load on first run
[[default_feeds]]
url = "https://example.com/feed.xml"
category = "News"

# Authenticated feed with custom HTTP headers
[[default_feeds]]
url = "https://private.example.com/feed.xml"
[default_feeds.headers]
Authorization = "Bearer your_token_here"

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
  • theme: Choose between "dark" (cyberpunk aesthetic with neon colors) or "light" (zen minimalist with organic colors). Can also be toggled at runtime with t.
  • 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.

Background Refresh Example

To enable automatic refresh every 5 minutes with rate limiting:

[general]
refresh_enabled = true
auto_refresh_interval = 300  # 5 minutes
refresh_rate_limit_delay = 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:

[[default_feeds]]
url = "https://news.ycombinator.com/rss"
category = "Tech"

[[default_feeds]]
url = "https://example.com/feed.xml"
category = "News"

# Optional per-feed refresh threshold (seconds). When this elapses since
# the last refresh, the next auto-refresh tick is triggered — currently
# all feeds are refreshed together (no true selective per-feed refresh).
# Requires `general.refresh_enabled = true`.
[[default_feeds]]
url = "https://example.com/fast-feed.xml"
refresh_interval = 60

Authenticated Feeds

Some RSS feeds require authentication or custom HTTP headers. You can configure per-feed headers:

[[default_feeds]]
url = "https://private.example.com/feed.xml"
[default_feeds.headers]
Authorization = "Bearer your_api_token"

[[default_feeds]]
url = "https://another-api.example.com/rss"
[default_feeds.headers]
X-API-Key = "your_api_key"
Cookie = "session=abc123"

Headers are sent with every request for that feed, including refreshes.

Full-Text Extraction

Most RSS feeds ship only short summaries. Feedr can fetch the linked article URL and run Mozilla Readability (via the dom_smoothie crate) to extract the actual article body and render it inline.

  • Manual: in the article detail view, press Shift+F to extract the focused article. Press Shift+F again to toggle back to the original summary, or after a failure to retry.
  • Auto on refresh: set fulltext = true on a feed and Feedr will auto-extract newly-seen items on each refresh (same "no firehose" rule as exec_on_new — the first observation of a feed seeds silently).
[[default_feeds]]
url = "https://example.com/summary-only-feed.xml"
fulltext = true

Notes:

  • Extracted content is in-memory only — it is not persisted to disk. A restart re-extracts on demand.
  • Per-feed auth headers are not sent to the article URL (article URLs are typically third-party hosts; forwarding Authorization would leak credentials).
  • Pages with very short extracted bodies (likely JS-rendered or behind a wall) fail gracefully and fall back to showing the original summary.

External-Command Hooks

Feedr supports newsboat-style external commands for two workflows: macros (key-triggered chains that act on the focused article) and exec_on_new (a notification hook fired per newly-seen item after each refresh).

Commands are not run through a shell. Templates are tokenized once at config load, and %X placeholders are substituted into individual argv tokens — feed content can never break out of an argument. For pipes, redirection, or globbing, write a small shell script and invoke that.

Template Variables

Expanded in every argv token of macro and hook commands:

Variable Expands to
%t Article title
%u Article URL
%a Author
%d Formatted publish date
%f Feed title
%F Feed URL
%% Literal %

Macros

A macro binds a key to an ordered chain of steps. Trigger with <prefix><key> (default prefix is ,). Steps are separated by ;. An optional trailing -- "description" overrides the help-overlay label.

[macros]
y = 'open-in-browser ; pipe-to "yt-dlp %u"'
w = 'pipe-to "wallabag-cli add %u" -- "Save to Wallabag"'
n = 'pipe-to "tee /tmp/out.txt" stdin=metadata'

[macro_options]
prefix = ","                  # the macro-prefix key
pipe_default_stdin = "body"   # body | title | url | metadata | none

Step kinds:

  • <action> — invoke a built-in action. Supported in macros: open-in-browser, toggle-star, toggle-read, mark-all-read, refresh, toggle-theme, extract-links, fetch-full-text, help.
  • pipe-to "cmd %u" [stdin=…] — suspend the TUI, run the command, and pipe article content to its stdin. stdin is one of body (default), title, url, metadata, or none.
  • exec "cmd %u" — spawn the command detached (no stdin, no terminal takeover).

Chains halt on the first step error. Press Esc after the prefix to cancel; an unbound follow-up surfaces a "No macro bound" error. Macros are also rendered in the help overlay (?).

exec_on_new Notifications

Fire a command once per newly-seen item after each refresh. The first successful fetch of each feed seeds the seen-set silently — you do not get a firehose on initial load or first run.

[hooks]
exec_on_new = 'notify-send "New: %t" "%f"'

Children are spawned detached so the TUI never blocks on them. Crash semantics are at-most-once: feedr persists the seen-set before spawning, so a kill mid-fire loses a notification rather than re-firing on the next launch. Prefer idempotent commands (e.g. wallabag-cli add is safe; mail-me is not).

Security Notes

  • The shell is never invoked, so feed content in %t / %a / etc. cannot escape an argument.
  • Do not wrap your command in sh -c "... %t ..." — that reintroduces shell injection through item titles. Write a script file and invoke it instead.
  • ~ / $HOME / $VAR are not expanded — use absolute paths.
  • If a macro's command template has unbalanced quotes or names an unknown action, feedr surfaces a startup warning rather than failing silently at trigger time.

Configurable Keybindings

Remap any action by adding a [keybindings] section to your config file. Each action can be bound to a single key string or an array of keys:

[keybindings]
quit = "x"                          # Single key
move_up = ["Up", "k", "w"]         # Multiple keys
force_quit = "Ctrl+x"              # Modifier keys
toggle_theme = "F5"                # Function keys

Available actions:

Action Default Description
quit q Go back / quit from Dashboard
force_quit Ctrl+q Quit from any view
back h, Esc, Backspace Go back one view
home Home Return to Dashboard
toggle_theme t Switch dark/light theme
refresh r Refresh all feeds
help ? Show help overlay
open_search / Enter search mode
move_up Up, k Navigate up
move_down Down, j Navigate down
page_up PageUp, Ctrl+u Page up
page_down PageDown, Ctrl+d Page down
jump_top g Jump to top
jump_bottom G, End Jump to bottom
select Enter Select / open
add_feed a Add new feed
delete_feed d Delete selected feed
toggle_read Space Toggle read/unread
toggle_star s Toggle starred
mark_all_read m Mark all items as read
open_in_browser o Open in browser
toggle_preview p Toggle preview pane
open_filter f Open filter mode
cycle_category c Cycle category filter
open_category_management Ctrl+c Category management
assign_category c Assign category to feed
extract_links l Extract links from article
fetch_full_text Shift+F Toggle/fetch full-text (Readability)
scroll_preview_up Shift+K, Shift+Up Scroll preview up
scroll_preview_down Shift+J, Shift+Down Scroll preview down
toggle_expand Space Expand/collapse in tree view
next_tab Tab Next view
prev_tab Shift+Tab Previous view

Supported key formats: Single characters (q, ?, /), special keys (Enter, Space, Tab, Esc, Backspace, Up, Down, Left, Right, Home, End, PageUp, PageDown, Delete, F1F5), and modifier combos (Ctrl+q, Shift+Tab, Alt+x).

Data Storage

Feedr stores your bookmarks, categories, read/unread state, and starred articles 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 (with gzip/deflate/brotli support)
  • feed-rs: RSS and Atom feed parsing
  • html2text: HTML to text conversion
  • chrono: Date and time handling
  • serde: Serialization/deserialization
  • clap: Command-line argument parsing
  • opml: OPML import support
  • toml: Configuration file parsing
  • scraper: HTML parsing for feed auto-discovery
  • url: URL parsing and manipulation
  • dom_smoothie: Mozilla Readability port for full-text extraction
  • encoding_rs: Charset detection for non-UTF-8 article pages
  • shlex: Shell-style tokenization for macro/hook command templates

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request