Hammer:离线优先的开源小说写作应用,支持Docker自托管同步

对于严肃的小说创作者而言,写作工具的选择往往面临两难:云端应用便于同步却牺牲了隐私与掌控权,本地软件安全却难以跨设备协作。开源项目 Hammer 试图在两者之间找到平衡——它以「离线优先」为核心理念,同时提供了可选的自托管同步服务器。近日,开发者为其发布了官方多架构 Docker 镜像,将过去繁琐的部署过程缩短至五分钟。

什么是 Hammer:离线优先的小说写作应用
Hammer 是一款专为小说写作及世界观构建设计的开源应用,由 Darkrock Studios 自 2022 年起持续开发。它覆盖了几乎所有主流平台:Windows、macOS、Linux、Android 和 iOS。
它最鲜明的特征是默认完全离线——无需账号、无需注册、无需网络即可开始写作。这一设计理念在当下 SaaS 泛滥的写作工具市场中显得尤为难得。
所谓「离线优先」(Offline-First),是一种将本地设备作为数据主要存储和处理位置的软件架构思想。与云优先架构不同,离线优先应用在完全断网的环境下仍可提供全部核心功能。这一理念源于对网络可靠性的现实考量——飞机上、偏远地区、咖啡馆的不稳定 WiFi 都不应成为创作的障碍。在技术实现上,离线优先通常依赖冲突解决算法(如 CRDT——无冲突复制数据类型)来处理多设备离线编辑后的数据合并问题。近年来,随着用户对数据隐私和应用可靠性要求的提升,Obsidian、Logseq 等工具都采用了类似的本地优先策略。
数据格式的开放性:告别工具锁定
Hammer 真正的技术亮点在于它对数据主权的尊重。你的整个项目就是磁盘上的一个普通目录:
- 每个场景(scene)对应一个 Markdown 文件
- 每个百科条目(encyclopedia entry)对应一个 TOML 文件
TOML(Tom's Obvious Minimal Language)是由 GitHub 联合创始人 Tom Preston-Werner 于 2013 年设计的配置文件格式,其设计目标是语义明确、易于人类阅读,同时能无歧义地映射到哈希表数据结构。相比 JSON,TOML 支持注释且不需要大量花括号;相比 YAML,它避免了缩进敏感带来的解析歧义。TOML 广泛应用于 Rust 生态(Cargo.toml)、Python 项目(pyproject.toml)等领域。Hammer 选择 TOML 存储百科条目,使得每个词条的元数据(如分类、标签、关联关系)既能被程序精确解析,又能用任何文本编辑器直接修改。
这意味着你的作品内容是可 grep 搜索、可 diff 对比、可 rsync 同步的——即使脱离 Hammer 应用本身,这些文件依然是完全可用、可迁移的纯文本。对于担心工具锁定(vendor lock-in)的创作者来说,这种透明的数据结构提供了极强的安全感。相比之下,许多商业写作软件采用私有的二进制格式,一旦停止服务,用户数据便面临风险。
自托管同步服务器的核心能力
虽然 Hammer 本体完全离线可用,但可选的自托管同步服务器为它增加了两项关键能力:
- 多设备同步:在你自己掌控的服务器上,实现跨设备的项目同步,数据始终不经过第三方云。
- 网页发布视图:将某一章节发布到一个 URL,编辑或试读者(beta reader)无需安装任何软件,直接在浏览器中阅读并批注。
这一设计巧妙地兼顾了个人创作的私密性与协作环节的便利性。作者可以在写作阶段保持完全离线,仅在需要外部反馈时,才有选择地暴露特定内容。
Docker 镜像部署:五分钟搭建同步服务
过去,自托管 Hammer 同步服务器需要下载发行版 zip 包,并手动配置 systemd service unit,对非技术用户门槛较高。如今,官方镜像已发布至 GHCR(GitHub Container Registry):
GHCR 是 GitHub 于 2020 年推出的容器镜像托管服务,与 Docker Hub 类似但深度集成于 GitHub 生态系统。它允许开发者将 Docker 镜像与源代码仓库关联,使用 GitHub Actions 自动构建和发布镜像,并继承仓库的权限模型。相比 Docker Hub 的免费层限制(如匿名拉取速率限制、自动删除不活跃镜像等),GHCR 对公开镜像提供免费无限流量,且不会自动清理。对于开源项目而言,GHCR 提供了从源码到镜像的完整可审计链路——用户可以追溯某个镜像 tag 对应的具体代码提交。
curl -O https://raw.githubusercontent.com/Darkrock-Studios/hammer-editor/develop/docker/docker-compose.yml
docker compose up -d
仅此而已。它会拉取 ghcr.io/darkrock-studios/hammer-editor/server:latest,将所有持久化数据保存在一个命名卷(named volume)中,并在 127.0.0.1:8080 上提供纯 HTTP 服务,方便你放在已有的反向代理之后。
Docker 中的命名卷是 Docker 引擎管理的持久化存储机制,与绑定挂载(bind mount)不同,它由 Docker 自行管理存储位置(通常在 /var/lib/docker/volumes/ 下),具有更好的跨平台兼容性和更清晰的生命周期管理。命名卷在容器删除后仍然保留,支持通过 docker volume 命令进行备份、迁移和清理。对于数据库类应用,使用命名卷是推荐的最佳实践,因为它避免了文件权限映射问题,也便于 Docker Compose 的声明式管理。
部署细节亮点
这个 Docker 镜像在工程设计上考虑得相当周全:
- 无需外部数据库:镜像内置了进程内 PostgreSQL,默认部署真正做到单容器运行。若想接入已有的 Postgres,只需将
[storage]的type设为"remote",它会在首次连接时自动迁移 schema,compose 文件中已预留了注释掉的 sidecar 配置。
传统的 Docker 最佳实践建议「一个容器一个进程」,但 Hammer 选择在单容器中嵌入 PostgreSQL,这是一种务实的折中方案。这种「嵌入式数据库」模式大幅降低了部署复杂度——用户无需理解容器间网络、数据库连接字符串等概念。类似的做法在 Gitea(可内嵌 SQLite)、Mastodon 的单机部署方案中也有先例。代价是水平扩展受限,但对个人或小团队的写作同步场景,单机性能绑绑有余。Hammer 同时保留了连接外部 PostgreSQL 的选项,为未来扩展留出了空间。
- 多架构支持:同时提供
linux/amd64和linux/arm64,因此树莓派或 ARM VPS 都能顺利运行。 - 安全默认值:以非 root 用户(uid/gid 1000)运行,镜像内置 HEALTHCHECK 健康检查。
- 备份极简:所有持久化数据——数据库、缓存、配置、密钥环——都存放在
/data下,备份这一个卷即等于备份整个服务器。
安全与隐私保护机制
Hammer 在隐私保护上的态度非常明确:客户端与服务器均无任何追踪或分析代码。如果你确实需要访问统计,可选择自托管 Umami,但默认关闭,需手动配置。
Umami 是一款开源的网站分析工具,定位为 Google Analytics 的隐私友好替代品。它不使用 cookies、不追踪跨站行为、不采集个人身份信息,完全符合 GDPR 和 CCPA 等隐私法规。数据存储在用户自己的服务器上,界面简洁,资源占用极小。Umami 采用 MIT 许可证,支持 MySQL 和 PostgreSQL 作为后端存储。Hammer 选择推荐 Umami 而非其他分析方案,体现了其在隐私理念上的一致性——即使需要分析功能,也确保数据不流向第三方。
在部署安全方面,服务器默认采用邀请制——白名单开箱即启用,首个创建的账号自动成为管理员。这意味着你搭建实例后,不会无意中向整个互联网开放一个注册表单。
对于加密需求,Hammer 还提供了可选的静态加密(encryption at rest),配有密钥环和离线密钥轮换机制。静态加密指的是数据在存储介质上以加密形式保存,即使硬盘被物理窃取或服务器被非授权访问,攻击者也无法读取明文内容。密钥轮换(key rotation)则是定期更换加密密钥的安全实践,即使某个密钥被泄露,影响范围也被限制在该密钥有效期内的数据。Hammer 提供的「离线密钥轮换」意味着密钥更换操作可以在完全断网的环境下完成,避免密钥在网络传输中暴露。这种设计对处理敏感创作内容(如尚未发表的手稿)的作者尤为重要。
TLS 证书配置的注意事项
开发者坦诚地指出了一个「90 天后会咬人」的细节:如果你选择让 Hammer 自行在 443 端口终止 TLS(而非使用 Nginx、Caddy、Traefik 等反向代理),要注意它只在启动时读取证书。这意味着证书续期后,需要配置 deploy_hook 来重启容器,否则会遭遇证书过期问题。官方文档已记录此点,但仍是新手容易忽视的陷阱。推荐的做法仍是在前面挂一个反向代理来处理 TLS。
这里提到的「90 天」与 Let's Encrypt 的证书有效期直接相关。Let's Encrypt 是目前最广泛使用的免费 TLS 证书颁发机构,它颁发的证书有效期为 90 天(而非传统 CA 的一年或更长),目的是鼓励自动化续期,缩短密钥泄露后的风险窗口。大多数现代反向代理(如 Caddy)已内置了自动证书申请和续期功能,无需人工干预,这也是 Hammer 推荐使用反向代理的原因之一。
开源许可与社区生态
值得称道的是,Hammer 采用 MIT 许可证开源,这是最宽松的开源协议之一。MIT 许可证仅要求保留版权声明和许可声明,允许任何人自由使用、修改、分发代码,包括用于商业目的,且不要求衍生作品开源。相比 GPL 的 copyleft 要求或 Apache 2.0 的专利条款,MIT 的简洁性使其成为最受欢迎的开源许可证——据 GitHub 统计,超过 25% 的开源项目采用 MIT 协议。
开发者本人也保持了难得的坦诚——他自述是「老派 VPS 玩家」,对 Docker 相对陌生,主动向社区征求改进建议。这种开放姿态往往能吸引更多贡献者共同打磨项目。
此外,官方还运营着一个演示实例 hammer.ink,用户可以在上面体验其面向公众的功能。
总结:本地优先写作工具的成熟之选
Hammer 代表了一类越来越受欢迎的软件哲学:本地优先(local-first)+ 可选自托管。这一运动源于 Ink & Switch 实验室 2019 年发表的论文《Local-First Software: You Own Your Data, in spite of the Cloud》,该论文提出了七项理想原则:无需网络即可工作、快速响应、跨设备同步、支持协作、长期可用、隐私安全、用户拥有数据完全控制权。此后,这一理念催生了一批工具和技术,包括 CRDTs(如 Yjs、Automerge)、点对点同步协议(如 Hypercore)等,代表性产品包括 Obsidian、Anytype、Linear 等。
Hammer 既保留了纯文本文件的开放与可移植性,又通过 Docker 大幅降低了自托管同步的门槛。对于重视数据主权、不愿被云服务绑定的写作者——尤其是同时具备一定技术能力的创作者——Hammer 提供了一个兼具隐私、掌控力与协作便利的成熟选项。随着官方 Docker 镜像的落地,它距离「人人可用」又近了一步。
核心要点
相关推荐

Claude Code创建者建议:大改动别急着写代码,先对齐再动手
Claude Code创建者Boris分享AI编程协作最佳实践:面对大改动,先读仓库提问、确认方案再编码、写完立刻验证。掌握这套流程,避免AI沿错误方向返工,提升编程效率。

HydraNet-VSM架构解析:Mamba与注意力机制并行融合的推理新思路
深入解析HydraNet-VSM混合架构设计提案,探讨Mamba状态空间模型与Attention注意力机制并行融合方案,以及Verified Step Memory验证循环如何解决思维链推理不忠实问题。

Seed7编程语言:无GC实现内存安全的独特设计
深入解析Seed7编程语言如何在不依赖垃圾回收(GC)的情况下实现内存安全,探讨其AOT编译、可扩展语法、整数溢出检查等核心特性,以及与C++、Rust、Java等主流语言的对比。