CLI RSS/Atom feed reader inspired by Taskwarrior, synced using Git
Source: Hacker News
A CLI RSS/Atom feed reader inspired by Taskwarrior.
Features
- Subscribe to RSS and Atom feeds
- Simple query language for filtering by feed, read status, and date, with grouping and export
- Git‑based sync across machines with conflict‑free merge (why git?)
- No accounts, no servers, no continuous network dependency
- Mark content as read
- Designed to be distraction‑free, minimalistic and work out of the box
Install
cargo install blogtato
Git sync
git‑based synchronization is entirely optional. blogtato can work offline on a single device.
To set up git synchronization, create a private repo on your git host, then:
On your first machine
blog clone user/repo
From now on, sync fetches feeds and pushes/pulls from the remote
(With no remote repository, blog sync just pulls the latest posts from all feeds)
blog sync
On additional devices, run the same blog clone to pull down your feeds and posts.
If you just want to try blogtato, you can skip the git setup and run blog clone user/repo later; existing feeds will merge automatically.
Quick start
Once you have (or skip) git‑based sync, subscribe to feeds:
blog feed add https://michael.stapelberg.ch
blog feed add https://www.justinmklam.com
Fetch and list the latest posts:
blog sync
blog
Read an item by its shorthand:
blog df read
Subscribe to blogtato releases to stay informed about new features or fixes:
blog feed add https://github.com/kantord/blogtato/releases.atom
Usage examples
Subscribe to a feed
blog feed add https://news.ycombinator.com/rss
Fetch new posts and sync with git remote
blog sync
Show posts (defaults to unread posts from the last 3 months, grouped by week)
blog
Group by date, week, or feed
blog /d # by date
blog /w # by week
blog /f # by feed
Combine groupings
blog /d /f
Filter by feed shorthand
blog @hn
Filter by read status
blog .unread
blog .read
blog .all
Filter by date
blog 1w..
blog 3m..1m
blog /d 2w..1w
Combine filters (e.g., list unread posts from HackerNews grouped by date)
blog @hn .unread /d
Open a post in the default browser
blog abc open
Print a post URL (useful with CLI browsers)
blog abc read
w3m $(blog abc read)
Mark a post as unread
blog abc unread
Export matching posts as JSONL
blog .all export
blog @myblog export
blog 1w.. export
List subscriptions
blog feed ls
Remove a feed
blog feed rm https://news.ycombinator.com/rss
blog feed rm @hn
Design philosophy
blogtato is built around subscription detox and simplicity. It provides a minimal, non‑distracting RSS reader that syncs seamlessly across devices without requiring additional user accounts or recurring fees.
Data is stored in JSONL files and synchronized via git. While this approach is not the most performance‑optimal, it leverages the ubiquitous availability of remote git hosts (GitHub, GitLab, Forgejo, etc.) and requires virtually zero configuration. The database uses a conflict‑free design, so divergent changes never need manual resolution—git operates transparently in the background.
All network operations are user‑initiated; there is no continuously running server, and offline usage works flawlessly. The project aims to stay lightweight and maintainable, keeping the feature set and complexity low enough to be considered “done”.
Naming
The name combines “blog” with the first whimsical word that came to mind: potato. It symbolizes simplicity and a touch of pragmatic silliness.
