CLI RSS/Atom feed reader inspired by Taskwarrior, synced using Git

Published: (March 8, 2026 at 09:16 AM EDT)
4 min read

Source: Hacker News

A CLI RSS/Atom feed reader inspired by Taskwarrior.

demo

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.

0 views
Back to Blog

Related posts

Read more »

Revamped RSS Feed Imports

Overview You can now add multiple RSS feed imports, monitor their status, and assign each one to different default authors or organizations. RSS feed imports h...