受Taskwarrior启发的RSS/Atom feed阅读器,使用Git同步。
CLI RSS/Atom feed reader inspired by Taskwarrior, synced using Git

原始链接: https://github.com/kantord/blogtato

## blogtato:极简、离线优先的RSS/Atom阅读器 blogtato是一个命令行RSS/Atom订阅源阅读器,设计理念是简单和无干扰阅读,灵感来自Taskwarrior。它注重开箱即用,配置最少。 主要功能包括:订阅源、灵活的查询语言用于过滤和分组帖子(按源、日期、阅读状态)以及标记内容为已读。**至关重要的是,它完全离线工作**,不需要账户或服务器。 设备间的同步是可选的,通过**Git**实现,提供无冲突合并。只需克隆一个私有Git仓库即可同步,或者完全不进行同步而本地使用blogtato。 `blog feed add`、`blog sync`和`blog`(用于列出帖子)等命令是其核心操作。它将数据存储在JSONL文件中,并优先考虑小而精的功能集,以便于维护。blogtato旨在成为一种实用、简单的订阅源阅读解决方案,避免了典型现代RSS阅读器的复杂性。

## Blogtato:一个 Git 同步的订阅源阅读器 一个名为 **blogtato** (github.com/kantord) 的新型 RSS/Atom 订阅源阅读器最近在 Hacker News 上发布,其灵感来自 Taskwarrior。它专为那些喜欢简约、可配置工具,而非功能丰富的 GUI 应用程序的用户设计——类似于 vim 与 IDE 的争论。作者 kantord 欢迎提问,并澄清该工具是可访问的,尽管关于 CLI 与 TUI 术语存在讨论。 用户分享了资源,例如互联网订阅源列表 (github.com/rumca-js/Internet-feeds)。一个关键讨论的功能是离线访问,kantord 建议利用现有的工具,如 `wget` 和 `grep`,以及 blogtato 的导出功能,而不是将其内置。 一位评论者 susam 强调了 RSS 订阅源的持续相关性,指出它们是其个人网站的重要流量来源,通常超过搜索引擎,并且是“隐形社交网络”的重要组成部分。他们提倡更广泛地采用 OPML 文件来方便博客订阅源的导入。
相关文章

原文

A CLI RSS/Atom feed reader inspired by Taskwarrior.

demo

  • 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

git based synchronization is entire optional. blogtato can work entirely 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 your device(s), run the same blog clone to pull down your feeds and posts.

Don't worry about setting git sync up if you are just trying blogtato out: you can run blog clone user/repo later and your existing feeds will be merged with the remote automatically.

Once you set up your git-based sync, or if you decided to skip it, subscribe to your favorite feeds using blog feed add:

blog feed add https://michael.stapelberg.ch
blog feed add https://www.justinmklam.com

Fetch and list latest posts:

Read whatever you found interesting by referring to its shorthand

You can subscribe to blogtato releases to know when new features or fixes are available:

blog feed add https://github.com/kantord/blogtato/releases.atom
# 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
blog /w
blog /f

# 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 - list unread posts form 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

I built blogtato around the idea of subscription detox and simplicity. I just wanted to use a simple and RSS reader that is not distracting, but can be synced between different devices seamlessly without having to set up another user account and paying another monthly subscription fee.

blogtato uses a simple database that stores data in JSONL files and syncs them using git. From a performance standpoint, this is admittedly sub-optimal, and an quite esoteric design. At the same time, if you are comfortable with CLI tools you likely has access to a remote git host such as GitHub, GitLab or a Forgejo instance: and that's all blogtato needs to be able to keep data up to date on all of your devices. From a user perspective, this just works with effectively zero configuration.

blogtato's database uses a conflict-free design: even if you have diverging changes between different devices, you will never have to manually resolve conflicts. You can forget about git being there.

Network operations are always initiated by the user. There is no need for a continuously running server. And all operations that don't strictly need network access work offline.

It is my goal to keep the feature-set and the complexity of this project down, so that it can be maintained with minimal effort and can be considered to be "done".

The naming is meant to symbolize simplicity and pragmatic silliness: I just mashed the word "blog" together with the first word I could think of: potato.

联系我们 contact @ memedata.com