Notesnook:端到端加密笔记应用的开源全平台实现
完全开源且端到端加密的笔记替代 Evernote。
秒懂
- 它是什么?
- Notesnook 是一个以 Evernote 替代品为目标的笔记应用,全平台客户端与核心代码均开源,使用 XChaCha20-Poly1305 和 Argon2 实现零知识加密。本文基于其仓库结构、README 与发布记录,分析它的架构、运行方式与适用边界。
- 适合谁用?
- Notesnook 适合那些需要跨平台笔记同步、且不愿在隐私和功能之间妥协的个人用户或小团队,尤其是已经受够 Evernote 的封闭生态和订阅费用的人。它不适合需要自建服务器、完全离线运行或对 GPL-3.0 许可证有合规顾虑的企业,因为其同步依赖官方服务,且核心代码采用强 copyleft 协议。
- 能商用吗?
- 可以,但有条件。GPL-3.0 是 copyleft 许可证:如果你分发包含它的软件,就必须以同一许可证公开该软件的源代码。只在内部运行、不对外分发,则不会触发这项义务。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 TypeScript(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它要解决什么问题,为谁而写
笔记应用市场长期被 Evernote 这类闭源产品主导,用户把大量私人文本交给服务商,却无法验证服务器上到底发生了什么。Notesnook 的目标很直接:做一个 Evernote 的替代品,同时把「零知识」作为卖点。所谓零知识,按 README 的说法,就是所有加密都在设备端完成,服务器只存储密文。它面向的是两类人:一类是隐私敏感的个人用户,不想在便利性和安全之间做取舍;另一类是开发者,想审查或修改一个真实可用的笔记产品。这个仓库不是玩具,它包含 Web、桌面、移动端、浏览器剪藏扩展,以及共享的核心逻辑包,覆盖了主流使用场景。
加密机制:XChaCha20 与 Argon2 的分工
README 明确列出了两种密码学原语:XChaCha20-Poly1305 用于数据加密,Argon2 用于密钥派生。这是一个常见的组合,前者是经过认证的流密码,提供机密性和完整性;后者是抗 GPU 暴力破解的内存硬哈希函数,用来把用户密码转换成加密密钥。关键点在于,加密发生在设备端,这意味着服务端即使被攻破,攻击者拿到的也是密文。但这里有一个需要用户自行判断的细节:密码强度直接决定安全性。如果用户设置一个弱密码,Argon2 只能拖慢暴力破解,不能阻止它。Notesnook 提供了 Vericrypt 工具,声称可以验证加密声明,但 README 没有说明验证的具体步骤,这需要用户自己去官网尝试。
Monorepo 架构:核心与平台的分离
仓库采用 monorepo 结构,核心逻辑集中在 packages 目录,平台代码在 apps 目录。最值得注意的是 @notesnook/core,它被描述为「所有平台之间的共享核心」。这意味着笔记的增删改查、加密解密、同步逻辑都独立于界面层。@notesnook/crypto 是对 libsodium 的封装,而 @notesnook/sodium 则让这个加密库同时支持 Node.js 和浏览器环境。这种分层有一个实际好处:如果你只想在自有工具中嵌入笔记逻辑,理论上可以只依赖 core 和 crypto 包,而不必碰 React 或 Electron。但 README 也承认,代码处于「混合状态」,新代码用 TypeScript,旧代码仍是 JavaScript,这会给阅读和贡献带来一些摩擦。
从源码到运行:技术栈与启动路径
Notesnook 的技术栈很集中:前端全部用 React,移动端用 React Native,桌面端用 Electron,包管理统一用 NPM,README 特别强调不用 Yarn 或 PNPM。要运行它,你需要先克隆仓库,然后在根目录执行 npm install,再进入具体的 app 目录。例如,Web 客户端在 apps/web,桌面端在 apps/desktop,移动端在 apps/mobile。每个子项目都有独立的架构说明,README 建议开发者参考这些文档。但这里有个现实问题:仓库没有提供一键启动的根级脚本,你必须先弄清楚每个 app 的 package.json 里的命令。对于只想快速体验的用户,直接下载官方编译好的客户端更省事,源码更适合那些想改代码或审查实现的人。
同步与账号:为什么必须用邮箱注册
Notesnook 要求用户提供邮箱地址才能使用,这一点在 README 的附加资源中专门有一篇博客解释。虽然 README 没有展开细节,但可以推断,邮箱是账号恢复和跨设备同步的锚点。在端到端加密系统中,密码本身不存储在服务器上,如果用户忘记密码,邮箱可能是唯一的恢复途径。这是一个典型的设计权衡:为了零知识,你放弃了「重置密码」这种便利功能,因为服务器没有能力帮你恢复密钥。如果你需要完全离线使用,不注册账号,Notesnook 可能并不适合,因为它的同步模型依赖官方服务。这个限制对重视本地优先的用户来说是一个明确的警告。
导入与迁移:从 Evernote 离开的成本
README 提供了一个专门的导入指南,帮助用户从其他应用迁移数据。这暗示 Notesnook 团队意识到,替代 Evernote 的最大障碍不是功能缺失,而是历史数据的迁移。导入工具的具体支持格式在 README 中没有列出,需要去官网帮助页面确认。这是一个实际的痛点:如果你有几千条 Evernote 笔记,迁移过程可能涉及格式转换、附件处理和标签映射。Notesnook 的加密设计也让迁移变得复杂,因为导入的数据必须先在设备端加密,再上传。这意味着导入过程不是简单的文件复制,而是重新加密。对于尝试迁移的用户,建议先导入少量笔记测试格式兼容性,再决定是否全量迁移。
局限性与替代方案的对比
Notesnook 最明显的局限是它依赖官方同步服务,无法自托管。虽然代码开源,但服务端并非用户可以自由部署的组件,至少 README 没有提供任何自托管说明。这与 Joplin 形成鲜明对比,Joplin 允许用户将笔记同步到自选的 WebDAV、Nextcloud 或 S3,服务器完全由用户控制。Joplin 也支持端到端加密,但它的加密默认关闭,需要用户手动启用,而 Notesnook 是默认强制加密。另一个替代品是 Standard Notes,它也采用端到端加密和开源策略,但它的编辑器生态是付费订阅制,而 Notesnook 声称完全免费。如果你需要服务器自治权,Notesnook 是错误的选择;如果你想要开箱即用的零知识体验,它比 Joplin 更省心。
许可证与维护成本
Notesnook 采用 GPL-3.0 许可证,这是一个强 copyleft 协议。这意味着如果你基于其代码开发衍生作品,并以任何形式分发,你必须以 GPL-3.0 协议开源整个衍生作品。对于个人用户或内部工具,这不是问题;但对于商业公司,尤其是想集成 Notesnook 核心到闭源产品中的团队,这是一个法律红线。维护方面,仓库最近一次推送是 2026 年 8 月,Android 版本发布频率大约每两周一次,桌面版也保持更新,这表明项目处于活跃维护状态。但活跃维护也意味着升级成本:你需要跟踪每个新版本的加密逻辑或数据格式变化,尤其是在跨平台同步时,版本不一致可能导致兼容问题。在采用前,务必阅读 GPL-3.0 的完整条款,并确认你的使用场景不违反其分发要求。
编辑结论
Notesnook 适合那些需要跨平台笔记同步、且不愿在隐私和功能之间妥协的个人用户或小团队,尤其是已经受够 Evernote 的封闭生态和订阅费用的人。它不适合需要自建服务器、完全离线运行或对 GPL-3.0 许可证有合规顾虑的企业,因为其同步依赖官方服务,且核心代码采用强 copyleft 协议。在采用前,你应该先验证两件事:一是通过官方提供的 Vericrypt 工具确认加密声明,二是检查其导入工具是否覆盖你当前笔记来源的格式,因为迁移成本往往比加密本身更现实。最终判断是:Notesnook 用开源换取了可审计性,但它的可用性取决于官方服务持续运营,这不是一个可以完全脱离厂商的解决方案。
社区笔记