A clean terminal RSS and Atom ticker with live scrolling, keyboard navigation, and fast multi-feed setup.
Reaper Ticker is for people who want a simple news wire in the terminal without a bloated reader, sync service, or browser tab farm. It pulls multiple feeds, merges them into one time-ordered stream, and keeps the UI focused on reading.
Most RSS tools are either heavy, old, or trying to do too much. Reaper Ticker aims for a narrower target:
- one terminal window
- one merged feed
- clear keyboard controls
- readable defaults
- enough config to be useful without turning into a dashboard project
- Pulls from multiple RSS and Atom feeds.
- Merges entries into one chronological live feed.
- Auto-scrolls in a curses UI with manual browse mode when you want to stop.
- Opens the selected story in your default browser.
- Supports feed filters, source filters, and keyword filters.
- Includes multiple built-in theme presets.
- Works well as a lightweight terminal dashboard on macOS and Linux.
The recommended install path matches the other Offband Python CLI tools:
brew install pipx
pipx ensurepath
pipx install git+https://github.com/offband/reaper.gitAfter installing, restart your shell if pipx ensurepath asks you to, then run:
reaper --helpUpgrade from GitHub:
pipx upgrade reaperUninstall:
pipx uninstall reaperreaper config init
reaperIf --config is omitted, Reaper Ticker searches ~/.reaper/config.json first and then ./config.json.
Requires Python 3.11 or newer.
You can start from the packaged sample config:
reaper config initThat writes ~/.reaper/config.json. To overwrite an existing global config with the
current packaged defaults:
reaper config init --forceTo print the packaged default config without writing it:
reaper --dump-default-config > config.jsonFeeds in the packaged example are starter entries. If an entry has "enabled": false,
flip it to true before expecting it to appear in the ticker:
{
"name": "Example Feed",
"url": "https://example.com/feed.xml",
"enabled": true
}Validate before running:
reaper --validate-config --config config.jsonThe sample config includes a practical starter mix of news and tech feeds from:
- Hacker News
- BBC World
- NPR News
- Ars Technica
- Engadget
reaper --config /path/to/config.json
reaper --theme matrix --refresh-interval 120 --config /path/to/config.json
reaper --ordering oldest_first --density compact --config /path/to/config.json
reaper config path
reaper config init --stdout
reaper config show --resolved --config /path/to/config.json
reaper feed list --config /path/to/config.json
reaper theme list
reaper doctor --config /path/to/config.jsonq: quit?: toggle helpporSpace: pause or resume scrollingr: refresh feeds nowoorEnter: open the active item in your browserUp/Downorj/k: move selectionPageUp/PageDown: jump one pageu/d: jump half a pageg/G: jump to the top or bottom of the retained listn: return to the live item and resume auto-scroll
--theme,--header-title,--header-tagline--no-color,--no-splash--refresh-interval,--scroll-speed,--max-items--density,--ordering--include-keyword,--exclude-keyword--include-source,--exclude-source--disable-open-links--feed,--feed-file
Config precedence is: built-in defaults, then config file, then top-level flags.
Built-in presets:
defaultambermatrixicenewspaper
Example theme override:
{
"theme": {
"preset": "matrix",
"header_title": "REAPER TICKER",
"header_tagline": "GREEN ROOM FEED",
"palette": {
"selected": "magenta"
}
}
}python3 -m unittest discover -s tests -qReaper Ticker is intentionally narrow. It is not trying to be:
- a full read-later system
- a synchronized account-based RSS service
- a GUI feed manager
It is a terminal feed wire that starts quickly, looks clean, and stays out of the way.


