files.md
本地优先的 Markdown 笔记管理工具,Telegram Bot+Web 双入口,Go 后端+LCS 合并算法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
本地优先的 Markdown 笔记管理工具,Telegram Bot+Web 双入口,Go 后端+LCS 合并算法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
知识管理工具市场从不缺选手——Notion、Obsidian、Roam Research、Logseq……但几乎所有主流产品都有一个共同弱点:数据存在云端,即使用户「拥有」笔记,实际上是租用了服务。Zakirullin 在 README 中写道:「Own your data as plain local files. Own the software that opens those files. Local files and owned software last ages.」这句话道出了 files.md 的核心理念——用纯 .md 纯文本文件存储一切,通过一个精心设计的 Go 后端 + Web 前端提供现代化交互体验,让数据真正属于用户自己。这个项目他坚持了 5 年,3652★ 的 Star 证明了一个小众但坚定的用户群体对「Local-First」哲学的认可。
纯文本存储哲学:Files.md 的数据模型极其简单——用户的每一篇笔记就是一个 .md 文件,存储在本地目录中。系统通过 [[双向链接]] 语法实现笔记间的关联,并通过 cmd/backlink 工具定期自动注入反向链接。这让笔记库天然就是一个 Git 友好的知识图谱,可以与任何文本工具(Obsidian、Neovim、甚至 AI)无缝协作。
Go 后端架构:服务端采用 Go 语言编写,分为多个独立命令:
cmd/server:主服务器,提供 HTTP API + Telegram Bot 接口,支持用户认证(Token 机制)、数据同步(Conflict-free Replicated Data Type 合并算法)、媒体同步。cmd/backlink:后台脚本,定期扫描笔记库并插入双向链接。cmd/shifttime:时间调整工具,用于修改日记中的时间戳。cmd/tomdlinks:将其他格式转换为 Markdown 链接。Telegram Bot + Web PWA 双入口:Files.md 最独特的设计是同时支持 Telegram Bot 和 Web PWA 两种交互方式。用户可以通过 Telegram 直接发送消息创建笔记、设定任务、记录习惯——手机端无需安装任何 App,数据直接写入本地文件系统。Web 端提供完整的笔记管理界面(今日/Done/Later/Inbox 四个面板),Telegram Bot 实时同步更新。
冲突合并算法:这是代码库中最精妙的部分。当 Web 和 Telegram 同时修改了同一篇笔记,系统使用 LCS(最长公共子序列)算法进行三方合并(Three-way merge),保留所有不冲突的修改,自动解决冲突。这解决了「多端同步」的核心难题——同类产品通常依赖 CRDT 或 Operational Transform,而 Files.md 用更直观的方式实现了类似效果。
多模式工作流:支持 Chat(聊天模式)、Tasks(任务模式)、Notes(纯笔记模式)、Journal(日记模式)四种工作流,通过 Telegram Bot 的快捷命令(Quick Commands)和定时任务(Cron 调度)实现自动化。比如可以设定「每天早上 8 点自动创建日记模板」。
极简 Web 前端:Web 界面用原生 HTML/CSS/JS 实现,无任何前端框架依赖,gzip 压缩后单次传输极小。这让项目的认知负荷降到最低——一个 LLM 可以完全理解整个代码库。
| 维度 | 评估 |
|---|---|
| 架构风格 | 微服务架构(Go 后端 + 原生 HTML 前端,Telegram Bot 集成) |
| 核心语言 | Go 1.24 |
| Web 框架 | 原生 HTML/JS(无框架依赖) |
| 数据库 | 本地文件系统(通过 afero 抽象,支持多 OS) |
| 同步协议 | 自定义 HTTP 同步 + LCS 三方合并 |
| 第三方集成 | Telegram Bot(可选,web-only 模式也可运行) |
| 测试覆盖 | 完整测试套件(sync_test.go、merge_test.go 等) |
| 文档质量 | 高(英文 README + 中文翻译、部署文档、服务配置指南) |
cmd/backlink)才能生成,不支持实时更新,大型知识库可能面临链接不一致问题。tgtxt),与标准 CommonMark 或 Obsidian 方言存在差异,与其他笔记工具的互操作性有限。Local-First 软件运动正在获得越来越多开发者的认同——Notion 的宕机事件、Obsidian 的付费插件争议,都让人们意识到「数据在自己手里」的价值。Files.md 用 Go 实现了一个教科书级别的 Local-First 架构:文件系统即数据库、Telegram 即 UI、同步协议即 CRDT 替代方案。对于想要构建类似系统的开发者,这是一个极佳的学习范本。