Notion Sync

🔄 Markdown 与 Notion 的双向同步桥梁

开源双向同步工具,将本地 Markdown 与 Notion 页面无缝桥接,支持变更监控、批量更新与团队协作,适合研究追踪与项目管理场景。

收藏
11.6k
安装
3.9k
版本
2.5.1
CLS 安全性认证2026-07-01
点击查看完整报告 >

使用说明

核心用法

Notion Sync 是一套基于 Node.js 的 CLI 工具集,提供本地 Markdown 与 Notion 工作空间之间的双向同步能力。核心操作涵盖八大模块:

1. 搜索与查询search-notion.js 支持标题/内容检索,query-database.js 提供高级过滤与排序
2. 页面属性管理 — 单页更新(update-page-properties.js)与批量更新(batch-update.js)支持 select、multi_select、checkbox、date 等多种类型

3. Markdown ↔ Notion 同步md-to-notion.js 推送带格式的 Markdown(含代码高亮、列表、分隔线),notion-to-md.js 拉取并转换为本地文件

4. 变更监控watch-notion.js 检测页面编辑时间戳,输出 JSON 状态供自动化工作流集成

5. 数据库管理 — 添加条目、检视 schema、归档页面

显著优点

  • 零依赖:仅使用 Node.js 内置模块(https、fs),无需 npm install
  • 安全凭证管理:支持 token 文件、stdin 管道、环境变量三种方式,明确拒绝命令行裸传(v2.0 起 --token 被移除)
  • 自动化友好:全局 --json 标志确保 stdout 机器可读,stderr 用于进度日志
  • 速率限制适配:内置 300-350ms 延迟,自动处理 Notion API 的 3 req/s 限制
  • 批量处理能力:支持查询驱动或 stdin 传入 ID 的批量属性更新,带 --dry-run 预览

局限性与潜在缺点

  • 属性初始化限制:数据库页面创建后,Type、Tags、Status 等属性需手动在 Notion UI 补充,API 对 inline database 的属性写入存在稳定性问题
  • 大文件性能:超过 1000 个 block 的 Markdown 因分批次上传+限速,可能耗时数分钟
  • 格式兼容性:复杂表格、三级以上嵌套列表转换可能不完美
  • 状态文件管理watch-notion.js 默认使用相对路径 memory/notion-watch-state.json,多工作目录场景需显式指定 --state-file

适合人群

  • 需要本地优先写作 + Notion 协作的创作者(如 newsletter 作者、技术写作者)
  • 研究团队:本地生成报告后自动归档至 Notion 数据库,供成员标注元数据
  • 项目经理:批量更新任务状态、监控页面变更触发 CI/CD 通知
  • 隐私敏感用户:希望 token 不落盘进程列表、支持文件权限控制(chmod 600)

常规风险

  • Token 泄露:虽支持安全传递方式,但用户仍可能误将 ~/.notion-token 提交至 Git
  • 误归档delete-notion-page.js 实际执行 archive 而非永久删除,数据可恢复但需手动操作
  • API 变更:Notion API 的速率限制或响应格式调整可能导致脚本异常,需关注上游更新
  • 状态文件污染:未清理的 notion-watch-state.json 可能在长期运行后累积过期页面记录

安全解读

核心用法

notion-sync 是一套基于 Node.js 的 Notion 工作流自动化工具,提供 Markdown 与 Notion 页面的双向同步、数据库查询与批量更新、以及页面变更监控能力。

主要功能模块:

1. 双向内容同步

  • md-to-notion.js: 将 Markdown 文件推送至 Notion,支持标题、粗体/斜体、链接、列表、代码块等完整格式转换
  • notion-to-md.js: 将 Notion 页面内容拉回本地转为 Markdown

2. 数据库操作

  • query-database.js: 支持复杂过滤条件(select/multi_select/date/checkbox/number 等)和排序查询
  • batch-update.js: 批量更新页面属性,支持 --dry-run 预览和限速保护
  • add-to-database.js: 将 Markdown 内容作为新页面插入数据库

3. 变更监控

  • watch-notion.js: 对比 Notion 页面 lastEditedTime 与本地状态文件,检测外部编辑并输出 JSON 结果,可集成 Cron 实现自动化监控

4. 辅助工具

  • search-notion.js: 工作空间全局搜索
  • update-page-properties.js: 单页面属性更新
  • get-database-schema.js: 数据库结构检查

使用前提:需创建 Notion Integration 并获取 Token(ntn_secret_ 开头),将目标页面/数据库分享给该 Integration。

---

显著优点

  • 零第三方依赖:仅使用 Node.js 内置模块(https/fs/path),无供应链攻击风险
  • 安全凭证处理:明确拒绝命令行直接传 Token,支持 --token-file--token-stdin 及环境变量三种安全方式
  • 完善的速率限制:自动 300-350ms 请求间隔,符合 Notion API 限制
  • 块级批量处理:自动将大文件拆分为 100 块/批次的请求,并处理 2000 字符富文本限制
  • 机器可读输出:全局 --json 模式,stdout 输出结构化数据,stderr 输出进度日志
  • 状态持久化:监控状态可自定义存储路径,支持 ~ 扩展

---

潜在缺点与局限性

| 局限 | 说明 |
|------|------|
| 数据库属性初始化 | 新增页面后,Type/Tags/Status 等属性需在 Notion UI 手动设置,API 对行内数据库的属性更新支持不稳定 |
| 大文件同步慢 | >1000 块的超大 Markdown 因限速可能耗时数分钟 |
| 格式转换边界 | 复杂表格、嵌套层级 >3 的列表转换可能不完美 |
| 仅支持 Node ≥18 | 需要较新的运行时环境 |
| 无实时 WebSocket | 变更监控依赖轮询,非即时推送 |

---

适合人群

  • 知识工作者:需要本地 Markdown 编辑与 Notion 协作编辑混合工作流
  • 研究团队:通过数据库追踪文献、实验记录、洞察产出
  • 内容创作者: newsletter/博客草稿的本地版本管理与 Notion 发布
  • 项目管理:轻量级项目数据库的批量状态更新与归档
  • 自动化爱好者:结合 CI/Cron 实现文档同步流水线

---

常规风险

1. Token 泄露风险:虽然工具本身安全处理凭证,但 ~/.notion-token 文件需设置 chmod 600 权限,避免多用户环境泄露
2. 状态文件位置:默认 ./memory/notion-watch-state.json 可能位于共享目录,建议显式指定 --state-file ~/.cache/...

3. API 权限范围:Integration 共享的页面/数据库即该 Token 可访问范围,需遵循最小权限原则

4. 来源可信度:T3 级别个人开发者维护,高敏感场景建议 fork 后自行审查维护

5. 数据一致性:双向同步无内置冲突解决机制,需人工协调本地与 Notion 的编辑时间窗口

Notion Sync 内容

references文件夹
scripts文件夹
手动下载zip · 31.7 kB
API-REFERENCE.mdtext/markdown
请选择文件