Thanks to visit codestin.com
Credit goes to lib.rs

#rss #terminal #cli

app rsso

A minimal RSS feed organiser for the command line

3 releases (breaking)

Uses new Rust 2024

0.3.0 Dec 8, 2025
0.2.0 Dec 3, 2025
0.1.0 Dec 2, 2025

#787 in Command line utilities

MIT license

32KB
628 lines

rsso

rsso is a minimal RSS feed organiser for the command line.

Keep up to date with feeds that you care about, or just find something to read over coffee, in a distraction-free environment.

Install

cargo install rsso

Or from source:

git clone https://github.com/jacklorusso/rsso
cd rsso
cargo install --path .

Features

Subscribe to feeds, and optionally provide an alias

rsso sub https://blog.rust-lang.org/feed.xml
rsso sub https://blog.rust-lang.org/feed.xml --alias rust

Unsubscribe

rsso unsub rust

List subscribed feeds

rsso list

Show latest items

rsso

To override the default, you can specify with -n <desired-number> or change the default in your config file.

rsso -n 50

Show items for one feed:

rsso feed rust
rsso feed rust -n 10

Refresh feeds manually:

rsso refresh
rsso refresh rust

Text-based output plays nice with other tools --- for example:

rsso feed rust | grep nightly

Optional config file

Create ~/.config/rsso/config.toml to override defaults:

default_limit = 20
refresh_age_mins = 60
new_line_between_items = false
max_history_per_feed = 2200

History retention

Control how much item history is kept per feed:

max_history_per_feed = 200

rsso trims older items whenever a feed is refreshed, to keep reads and writes to state fast.

Important: If you run:

rsso feed rust -n 500

but your config says:

max_history_per_feed = 200

you will still only see 200 items. You would need to override the default if you are looking to list more than the default maximum of 200 items for a single feed.

State file

State is stored in a platform‑appropriate location:

  • Linux: ~/.local/share/rsso/state.json
  • macOS: ~/Library/Application Support/rsso/state.json
  • Windows: %APPDATA%\rsso\state.json

You can override this:

state_file = "/custom/path.json"

Be careful though! If you don't move your original state file to this location, or if you somehow delete this file, you'll be starting fresh.


TODO

  • [] OPML import/export
  • [] Tags / groups

License

MIT

Dependencies

~16–35MB
~540K SLoC