A high-performance terminal RSS reader with AI-powered summarization and rich content display.
# Install via Homebrew (macOS/Linux)
brew tap kenxcomp/tap && brew install kenseader
# Start daemon & TUI
brew services start kenseader
kenseader run- π₯οΈ Terminal UI - Beautiful TUI built with ratatui
- β¨οΈ Vim-Style Navigation - Full vim keybindings for efficient navigation
- π€ AI Summarization - Automatic article summaries via Claude, Gemini, OpenAI
- π― Smart Filtering - AI-powered relevance scoring based on your interests
- π·οΈ Style Classification - AI classifies articles by style, tone, and length
- πΌοΈ Inline Images - Images displayed at original positions (Sixel/Kitty/iTerm2/Halfblocks)
- π Real-time Search -
/to search,n/Nto navigate matches - π¦ RSSHub Support - Native
rsshub://protocol for easy subscriptions - π Batch Selection - Yazi-style selection with
Spaceand Visual mode withv - π Reading History - Navigate history with
u(back) andCtrl+r(forward) - π Background Scheduler - Auto-refresh, cleanup, and AI processing
- πΎ SQLite Storage - Fast, local database for feeds and articles
- β¨ Smooth Scrolling - nvim-like smooth scroll animations with configurable easing
| Terminal | macOS | Linux | Windows | Image Protocol |
|---|---|---|---|---|
| iTerm2 | β | - | - | iTerm2 Inline |
| Kitty | β | β | - | Kitty Graphics |
| WezTerm | β | β | β | iTerm2 Inline |
| foot | - | β | - | Sixel |
| Others | β | β | β | Halfblocks |
π¦ Installation (more options)
# Add the tap
brew tap kenxcomp/tap
# Install kenseader
brew install kenseader
# Start the daemon as a background service (recommended)
brew services start kenseader
# Or start manually
kenseader daemon start
# Run the TUI
kenseader run# Clone the repository
git clone https://github.com/kenxcomp/kenseader.git
cd kenseader
# Build release binary
cargo build --release
# Binary will be at ./target/release/kenseader- Rust 1.70+
- SQLite (bundled via sqlx)
- Terminal with true color support (required for image display)
Kenseader uses a client-server architecture with the TUI and daemon running as separate processes:
βββββββββββββββββββ Unix Socket βββββββββββββββββββββββ
β kenseader run β ββββββββββββββββββββββββββΊ β kenseader daemon β
β (Pure TUI) β JSON-RPC Protocol β (Backend Service) β
βββββββββββββββββββ βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β SQLite DB β
βββββββββββββββββββββββ
- Daemon (
kenseader daemon start): Handles all backend operations - feed refresh, article cleanup, AI summarization, database access - TUI (
kenseader run): Pure frontend that communicates with daemon via IPC - IPC Socket:
~/.local/share/kenseader/kenseader.sock(Unix socket)
# 1. Subscribe to feeds (can be done without daemon)
kenseader subscribe --url https://hnrss.org/frontpage --name "Hacker News"
kenseader -s https://blog.rust-lang.org/feed.xml -n "Rust Blog"
# 2. Start the daemon (REQUIRED before running TUI)
kenseader daemon start
# 3. Launch the TUI
kenseader run
# 4. When done, stop the daemon
kenseader daemon stopImportant: The TUI requires the daemon to be running. If you try to run
kenseader runwithout starting the daemon first, you'll see an error message.
| Command | Description |
|---|---|
run |
Start the TUI interface |
run --read-mode |
Start TUI in read-mode (direct database access, no daemon required) |
subscribe |
Subscribe to an RSS feed |
unsubscribe |
Unsubscribe from a feed |
import |
Import subscriptions from OPML file |
list |
List all subscriptions |
refresh |
Refresh all feeds |
cleanup |
Clean up old articles |
daemon start |
Start background daemon for auto-refresh and summarization |
daemon stop |
Stop the background daemon |
daemon status |
Check if daemon is running |
| Key | Action |
|---|---|
h/j/k/l |
Vim-style navigation |
gg / G |
Jump to top/bottom |
Enter |
Select article / Open fullscreen image |
b |
Open in browser |
s |
Toggle saved/bookmark |
d |
Toggle read/unread |
r |
Refresh feeds |
i |
Toggle unread-only mode |
/ |
Search |
q |
Quit |
See full keybindings documentation for all shortcuts.
Configuration file: ~/.config/kenseader/config.toml
[ai]
enabled = true
provider = "claude_cli" # claude_cli, gemini_cli, openai, gemini_api, claude_api
summary_language = "English"
[ui]
image_preview = true
[ui.scroll]
smooth_enabled = true # Enable smooth scrolling (default: true)
animation_duration_ms = 150 # Animation duration in milliseconds
easing = "cubic" # Easing: none, linear, cubic, quintic, easeout
[sync]
refresh_interval_secs = 3600See full configuration documentation for all options.
| Topic | Description |
|---|---|
| Configuration | Full config reference, keybinding customization, RSSHub setup |
| Keybindings | Complete keyboard shortcuts reference |
| Image Display | Image protocols, terminal compatibility, troubleshooting |
| AI Providers | CLI/API providers, batch summarization, smart filtering |
| Background Daemon | Scheduled tasks, IPC API, configuration |
| Cloud Sync | iCloud/Dropbox sync, read-mode for multi-device |
kenseader/
βββ crates/
β βββ kenseader-cli/ # CLI application and main entry point
β βββ kenseader-core/ # Core library (feed parsing, storage, AI)
β βββ kenseader-tui/ # Terminal UI components
βββ Cargo.toml # Workspace configuration
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- π Report bugs
- π‘ Request features
- π§ Submit PRs
MIT

