Hatsu 0.3.5 介绍与选型指南

Hatsu 0.3.5 认知选型篇:溯源 importantimport/hatsu(原候选 sunemu/hatsu 已 404 迁移)的静态站点 ActivityPub 桥接定位、Rust 架构、Feed 数据源与联邦矩阵,并与 Bridgy Fed、Bridgy、Mastodon 机器人账号路线做量化对比,查询日期 2026-11-02。

HatsuHatsuActivityPubFediverseRust语言2026/11/02

Hatsu 0.3.5 介绍与选型指南

目标:面向「拥有一个静态站点/博客,想让站点以 ActivityPub 账号身份接入联邦宇宙(可被搜索、可被关注、新文章自动推送到粉丝时间线、评论可回流显示)」的读者,讲清 Hatsu 是什么、怎么工作、边界在哪,并与 Bridgy Fed、Bridgy、Mastodon 机器人账号三条替代路线做量化对比。本文为认知溯源篇,全部信息来自官方文档站、官方 GitHub 仓库与发布订阅的联网取证,查询日期统一为 2026-11-02,未做本地实测;部署实测见本专栏《Docker Compose 部署指南》。

一、环境信息

本章说明本文的信息检索口径,供读者复核每一条结论的来源。

  • 组件与版本:Hatsu v0.3.5(代号 "Strobe Nights",查询当日官方 Releases 最新稳定版,发布于 2026-10-01,来源:https://github.com/importantimport/hatsu/releases.atom,查询日期 2026-11-02)。
  • 官方代码仓库:https://github.com/importantimport/hatsu(GitHub 仓库数字 ID 668140281)。⚠️ 早期资料/候选清单中的 sunemu/hatsu 系项目迁移前地址,查询当日访问返回 404(查询日期 2026-11-02)——Hatsu 现由 importantimport 组织维护,本文一律按 importantimport/hatsu 书写。
  • 官方文档站:https://hatsu.cli.rs(mdBook 构建,源码位于仓库 docs/ 目录;任务早期给出的 hatsu.dev 查询当日不可达,以 hatsu.cli.rs 为准)。
  • 代码许可:AGPL-3.0(来源:仓库 README「Licensed under AGPLv3」及 LICENSE 徽章,查询日期 2026-11-02)。
  • 热度锚点:GitHub 星数 258(来源:仓库页 HTML stargazerCount 字段与 shields.io 徽章双重取证,查询日期 2026-11-02);最近一次提交时间 2026 年 10 月(来源:shields.io last-commit 徽章,查询日期 2026-11-02)。
  • 运行环境要求:Rust MSRV 1.85+(来源:README 顶部 MSRV 徽章,查询日期 2026-11-02);官方制品为 ghcr.io 容器镜像与二进制 Release,支持 x86_64 与 aarch64。
  • 本文性质:A1 认知篇,仅联网溯源;实测数据(部署回显、资源占用、命令输出)见本专栏部署、配置与命令各篇。

二、软件概述

本章回答「Hatsu 是什么、解决什么问题、由谁维护」。

Hatsu(「初」)是一个自托管、全自动化的静态站点 ActivityPub 桥接器(ActivityPub Bridge for Static Sites)。它本身不是社交网络服务端,而是站在你的静态站点背后,以站点的身份与联邦宇宙(Fediverse)交互(来源:官方文档站 Introduction 与仓库 README,查询日期 2026-11-02)。官方给出的四件事:

  1. 用户可搜索:联邦用户搜索 @你的站点域名@你的域名(如 @catch-all@example.com)时,经 WebFinger 重定向到 Hatsu 实例上的对应账号;
  2. 文章可搜索:联邦用户搜索 https://example.com/hello-world 这类站点 URL 时,重定向到 Hatsu 实例上对应的 Note 对象;
  3. 关注即订阅:接受 Follow 请求,站点发布新文章(Feed 出现新条目)时自动向全部粉丝的收件箱推送 Create(Note);
  4. 互动可回流:接收联邦用户的回复/点赞/转发,通过 backfeed 机制回显到静态站点上。

官方强调「这些全部是自动化的——设置一次,之后什么都不用做」(README:Just set it up once and you won't need to do anything else)。

维护方:Hatsu 由 importantimport 社区组织维护(同组织还产出 KKna、Aoba 等配套项目,见第四章),主开发者 @kwaa 同时是 Nixpkgs 中 hatsu 包的维护者;项目通过 Matrix 房间 #importantimport:matrix.org 沟通(来源:README 徽章与文档站 Packaging Status 一节,查询日期 2026-11-02)。

核心事实速览(均标注来源,查询日期 2026-11-02):

维度事实来源
定位静态站点的 ActivityPub 桥接器(非社交服务端、非搜索引擎)hatsu.cli.rs Introduction
最新稳定版v0.3.5 "Strobe Nights"(2026-10-01)官方 releases.atom
技术栈Rust(axum + SeaORM + sqlx + activitypub-federation-rust),前端 Leptos 未上线README TODO 注释区与依赖说明
联邦库与 Lemmy 同用 Activitypub-Federation 库,官方自述「实际行为应与 Lemmy 类似」README「Fediverse compatibility」
数据库SQLite(推荐默认)或 PostgreSQL 二选一,无其他外部依赖文档站 Environments 一节(HATSU_DATABASE_URL 只接受 sqlite:/postgres: URL)
数据源站点的 JSON / Atom / RSS Feed(优先级 JSON > Atom > RSS),不要求 microformats2、不依赖 Webmention文档站 Feed 一节
监听端口3939(默认)文档站 Environments
许可AGPL-3.0README License
星数/活跃度258 星;最近提交 2026-10shields.io + 仓库页 HTML
部署形态ghcr.io 镜像(latest/beta/nightly 三通道)/ 二进制 Release / Nixpkgs / NUR / Flakes / AUR文档站 Install 各节

💡 说明:Hatsu 官方文档明确「Hatsu is still a Work-In-Progress」——0.x 版本线、扩展字段声明「不遵循 semver、随时可能破坏性变更」(Hatsu JSON Feed Extension 一节)。选型时必须把它当作快速演进的年轻项目而非成熟基础设施对待(查询日期 2026-11-02)。

三、核心架构

本章拆解 Hatsu 的内部组成与联邦协议层。

3.1 单进程桥接器 + 一个数据库

Hatsu 是单个 Rust 可执行文件(hatsu run)承载全部职责:WebFinger/NodeInfo/host-meta 等发现端点、ActivityPub 收件箱/发件箱、Feed 轮询器、Admin API。外部依赖只有一个数据库(SQLite 或 PostgreSQL),无 Redis、无消息队列、无搜索引擎组件(来源:文档站 Environments 与 Install 各节,查询日期 2026-11-02)。这一「单二进制 + 单库」形态直接决定了它的资源占用属于联邦组件中最轻的一档(实测数字见本专栏部署篇)。

数据流主线:站点 Feed →(定时拉取解析)→ Hatsu 数据库 →(Create/Update Note 活动)→ 粉丝实例收件箱;反向 联邦实例 →(Follow/Like/Announce/Create 活动投递)→ Hatsu 收件箱 →(入库供 backfeed 查询)→ 静态站点前端组件。

3.2 联邦协议栈与 HTTP 签名

官方文档「Federation in Hatsu」一节列出的协议与标准(查询日期 2026-11-02):

  • ActivityPub(Server-to-Server):发送 Accept(Follow)、Create(Note)、Update(Note);接收 Follow(Actor)、Undo(Follow)、Create(Note)、Like(Note)/Undo(Like)、Announce(Note)/Undo(Announce);
  • HTTP Signatures:README 明确启用 signed_fetch_actor——每个出站请求都带 HTTP 签名,从而兼容开启 secure fetch 模式的 Mastodon 实例与 GoToSocial(两者的访问控制都要求签名拉取);同时默认开启 http_signature_compat 以兼容 Pleroma 的旧签名实现;
  • WebFinger / NodeInfo / Web Host Metadata:账号发现与实例元数据;
  • 支持的 FEP:FEP-67ff(FEDERATION.md)、FEP-f1d5(NodeInfo in Fediverse Software)、FEP-fffd(Proxy Objects)、FEP-4adb(用 WebFinger 解标识符)、FEP-2c59(从 AP actor 发现 WebFinger 地址);
  • ** notable 差异**:无共享收件箱(No shared inbox)——每个 actor 独立 inbox,与 Mastodon 的实例级 shared inbox 模型不同。

💡 技术拓展:联邦宇宙的服务间协议不止 ActivityPub 一种。主要选项对比——

协议代表实现特点
ActivityPubMastodon、Lemmy、Akkoma、HatsuW3C 标准,收件箱/发件箱模型,生态事实标准
Nostr各类 relay/client密钥即身份,无服务器账户概念
AT ProtocolBluesky中心化 PDS + 独立 firehose 模型
Zot/Zot6Hubzilla跨实例身份漫游

Hatsu 官方明确「Hatsu is ActivityPub only, which means it doesn't handle Nostr, AT Protocol (Bluesky) or other protocols」——只接 AP 生态,这是它与 Bridgy Fed 最大的能力差异(来源:文档站 Comparison 一节,查询日期 2026-11-02)。

3.3 数据源层:Feed 而非 microformats2

与上一代桥接器(Bridgy/Bridgy Fed 依赖 Webmention + microformats2 标记)不同,Hatsu 用标准 Feed 订阅作为唯一数据源:站点首页 <link rel="alternate"> 自动发现 JSON/Atom/RSS feed,解析优先级 JSON > Atom > RSS;JSON Feed 用 serde 一等公民解析,Atom/RSS 经 feed-rs 转换(来源:文档站 Feed 一节,查询日期 2026-11-02)。这意味着任何 SSG(Hugo/Jekyll/Lume/Astro 等)默认产出的 feed.xml 即可接入,无需给 HTML 加微格式标记,也无需站点能收发 Webmention。

对象 ID 采用可预测映射:https://hatsu.local/posts/https://example.com/foo/bar——帖子 URL 直接编码进 Hatsu 的对象地址,因此重定向规则可以在纯静态文件层面写死(见 4.2)。

3.4 发现与重定向层

站点域名要让联邦「搜得到」,需要两类重定向(文档站 Redirecting 一节,查询日期 2026-11-02):

  1. .well-known/*(webfinger/nodeinfo/host-meta)→ 指向 Hatsu 实例;
  2. 接受 application/activity+json 的页面请求 → 指向 https://hatsu.local/posts/<页面URL>。

官方给出四种实现路径:静态文件+markup(把 well-known 内容抓成静态文件、页面加 AS2 alternate link,适用一切 SSG/托管)、_redirects 文件(Netlify/Cloudflare Pages)、平台配置(netlify.toml / vercel.json)、Aoba 中间件(Lume 插件 + Hono 中间件,importantimport 同生态项目);另有 FEP-612d 的 DNS TXT 记录方式(_apobjid.example.com https://hatsu.local/users/example.com)。

四、功能特性

本章列举与接入决策直接相关的功能面(依据官方文档站,查询日期 2026-11-02)。

4.1 接入与自动化

  • 全自动订阅发布:账号创建后 Hatsu 定期拉取站点 Feed,新条目自动以 Create(Note) 广播给粉丝,更新条目发 Update(Note);
  • v0.3.5 起出站请求携带 User-Agent(releases.atom 变更日志 #97),便于目标站点识别与放行;
  • 多账号单实例:一个 Hatsu 实例可桥接多个静态站点域名(Admin API 按域名建号,见本专栏命令篇);
  • 实例封禁:Admin API 支持 block-url/unblock-url,path 为 / 时按实例封禁、精确到 actor 时按账号封禁,收到活动时逐条匹配(文档站 Block Instances or Actors 一节)。

4.2 backfeed(互动回流)

把收到的联邦回复显示回静态站点的三条官方路线(文档站 Backfeed 一节,查询日期 2026-11-02):

路线机制成熟度
KKna同作者项目 @kkna/context + @kkna/preset-hatsu,前端自定义元素直接渲染官方推荐,最简单
Mastodon Comments@oom/mastodon-comments 组件,按 Hatsu 仿 Pleroma 的 /notice/<base64url> URL 反解出 /api/v1/statuses/<id>/context 查询回复树可用,需前端拼 base64url ID
Webmention以 Webmention 形式回流文档标注 TODO,未实现

4.3 生态与配套

  • Hatsu JSON Feed Extension:在 JSON Feed 里加 _hatsu 键定制账号头像/banner/别名(FEP-4adb/2c59 用),官方声明实验性、不守 semver;
  • Aoba:Lume/Hono 的 Hatsu 集成插件与中间件;
  • 打包状态:Nixpkgs(稳定版)、NUR sn0wm1x(含 beta)、Flakes(未测试)、AUR 均有维护者;macOS 不支持 Nix 路线。

4.4 兼容性矩阵现状

官方 Compatibility Chart 目前仅填了 Mastodon 一行(发送 Create(Note)/Accept(Follow) 与接收 Follow 均 ✅),GoToSocial、Misskey、Pleroma 行为空待测;官方口径是「Akkoma、Sharkey 等 fork 应随上游兼容,不单独列」(来源:文档站 Compatibility Chart,查询日期 2026-11-02)。矩阵未填 ≠ 不兼容(HTTP 签名设计正是为了过 GoToSocial/Mastodon 安全模式),但选型时应把「官方实测面只有 Mastodon」当作已知风险。

五、快速开始(最小可用示例)

官方 Docker 路线的最小配置形态(来源:文档站 Docker Installation 一节,原文照录,查询日期 2026-11-02):

docker run -d \
  --name hatsu \
  --restart unless-stopped \
  -p 3939:3939 \
  -v /opt/hatsu/hatsu.sqlite3:/app/hatsu.sqlite3 \
  -e HATSU_DATABASE_URL=sqlite://hatsu.sqlite3 \
  -e HATSU_DOMAIN={{hatsu-instance-domain}} \
  -e HATSU_LISTEN_HOST=0.0.0.0 \
  -e HATSU_PRIMARY_ACCOUNT={{your-static-site}} \
  -e HATSU_ACCESS_TOKEN=123e4567-e89b-12d3-a456-426614174000 \
  ghcr.io/importantimport/hatsu:{{version}}

要点:镜像三通道 latest(稳定)/beta/nightly;环境变量必须一次给全(无交互式初始化);HATSU_PRIMARY_ACCOUNT 是实例的签名主体账号且不可删除。本节仅为官方形态速览,可运行的完整实测部署(含 SQLite 与 PostgreSQL 两种后端、启动验证与排障)见本专栏《Hatsu 0.3.5 Docker Compose 部署指南》。

六、适用场景与限制

6.1 适用场景

  • 个人博客/作品集等静态站点想获得「被 @ 即可关注」的联邦身份,不想运营 Mastodon 实例;
  • 已有 Hugo/Jekyll/Astro 等 SSG 产出 feed,不愿改造 HTML 微格式的作者(对比 Bridgy 路线);
  • 需要低资源常驻服务(单二进制 + SQLite,树莓派级硬件即可,资源实测见部署篇);
  • 多站点:一个实例桥接多个域名。

6.2 限制与风险

  1. 0.x 项目,接口未稳定:官方自述 WIP,JSON Feed 扩展明确「subject to breaking changes」;
  2. 仅 ActivityPub:要同时接 Bluesky/Nostr 的读者应选 Bridgy Fed;
  3. 无公开公共实例(截至查询日):文档站写明「Until then, you'll need to self-host the instance or find a person running a Hatsu instance」——自托管几乎是唯一路径;
  4. 主账号必须真实可达且有有效 Feed:启动时校验 HATSU_PRIMARY_ACCOUNT,拉不到 Feed 直接退出(该行为实测复现与排障见部署篇常见问题);
  5. 兼容性矩阵大部分未填(见 4.4);
  6. 无共享收件箱:对强依赖 shared inbox 优化的对端实例可能有额外投递开销;
  7. backfeed 前端需自己拼:评论回流是前端组件级集成(KKna/oom-comments),不是开箱 UI;Webmention 回流未实现。

七、同类选型对比

「静态站点接入联邦」这一需求下的主要路线对比(星数与活跃度均经 shields.io/仓库页取证,查询日期 2026-11-02):

维度Hatsu 0.3.5Bridgy FedBridgy(原版)Mastodon 机器人账号
仓库/星数importantimport/hatsu,258★,最近提交 2026-10snarfed/bridgy-fed,1.3k★,最近提交 2026-11-01snarfed/bridgy,848★,最近提交 2026-10-28mastodon/mastodon(本体 40k+★,此处仅借实例)
形态自托管单二进制 + SQLite/PG自托管(Python,GAE 友好)或公共实例 bridgyfed.org公共服务为主(brid.gy),自托管需 Python 栈复用任意 Mastodon 账号 + 脚本发帖
数据源站点 Feed(JSON/Atom/RSS)Webmention + microformats2Webmention + microformats2无(人工/脚本搬运内容)
协议覆盖仅 ActivityPubActivityPub + Nostr + AT(Bluesky) + Email仅 Webmention(不建 AP 身份)仅 ActivityPub
被 @ 可搜索✅(well-known 重定向/FEP-612d)✅❌(无独立 actor)✅(真实账号)
新文章自动推送✅ 全自动(Feed 轮询)✅(需站点发 Webmention 或手动提醒)❌ 需手动/自建提醒⚠️ 需自写 RSS→toot 脚本
评论回流站点✅ KKna/oom-comments(Webmention 路线 TODO)✅✅ 本职就是它⚠️ 在 Mastodon 侧看,不回站
HTTP 签名✅ signed_fetch_actor(过 Mastodon secure fetch/GoToSocial)部分N/A✅(实例原生)
运维复杂度低(1 进程 1 库)中(Python + 多协议适配层)低但依赖公共服务低(复用现成实例)
主要短板0.x 未稳定、仅 AP、矩阵未填满要求站点 mf2 标记与 Webmention 端点不产生联邦身份,仅回流互动身份挂在第三方实例域名,非站点域名

选型结论:

  • 站点已有良好 microformats2 标记、且想要 Bluesky/Nostr 多协议 → Bridgy Fed;
  • 只想把博客变成「@example.com@你的域名 可关注」的 AP 身份、厌恶改造 HTML、希望一条 compose 起服务 → Hatsu;
  • 不想自托管、接受身份寄生在公共 Mastodon 实例 → 机器人账号路线。

💡 技术拓展:桥接器实现联邦身份的方式存在两种模型——「代理 actor」(桥接器为站点域名铸造 actor,站点通过重定向把发现流量让渡给它,Hatsu/Bridgy Fed 属此类)与「镜像账号」(在真实实例上注册账号搬运内容,机器人路线属此类)。前者身份域名=你的站点域名、可迁移;后者实现最快但身份不受站点控制。本文推荐的 Hatsu 属前者。

八、参考链接

Hatsu 0.3.5 介绍与选型指南 - Quzuo