cheedfdf198 downloadsSync annotations, notes, and mind maps from MarginNote 4.
将 MarginNote 4 的批注、笔记和思维导图同步到 Obsidian 的插件。
Sync MarginNote 4 annotations, highlights, notes, and mind maps to Obsidian.
| 设置面板 - 学习集 | 设置面板 - 自动同步 | Markdown 输出 | 思维导图画布 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
MarginNotes.sqlite),无需手动导出或备份Z* 表结构,兼容 MarginNote 版本更新<目标文件夹>/<学习集名称>/,未分类书籍直接放在目标文件夹.canvas 文件,带自动布局和色彩映射> [!note] Callout 格式渲染批注,[[wikilink]] 引用 Canvasmarginnote4app://note/<UUID> 深度链接,一键跳回 MN4 对应位置Cmd+P → "Sync MarginNote notes".pdf/.epub 后缀,下划线替换为空格)mindLinks 关系重建父子树,按章节优先→页码→字母顺序排序sqlite3 CLI)MN4 数据库默认使用 WAL 模式,读取操作不阻塞 MN4 正常运行。
在 Obsidian 设置 → 第三方插件 → 浏览 → 搜索 "MarginNote Sync" → 安装并启用。
Cheendf/marginnote-obsidian-sync# 将 <vault> 替换为你的仓库名
cp -r marginnote-obsidian-sync \
"<vault>/.obsidian/plugins/marginnote-sync"
开发调试可使用符号链接:
ln -s /path/to/marginnote-obsidian-sync \
"<vault>/.obsidian/plugins/marginnote-sync"
进入 Obsidian → 设置 → MarginNote Sync:
| 设置项 | 说明 |
|---|---|
| Database path | MarginNote 数据库的完整路径。默认路径:~/Library/Containers/QReader.MarginStudy.easy/Data/Library/Private Documents/MN4NotebookDatabase/0/MarginNotes.sqlite |
| Discover | 点击后自动扫描数据库中的学习集,并全选。每次 Discover 会触发一次全量同步 |
| Study sets | Discover 后显示所有学习集的列表。每个学习集显示名称和包含的书籍数量。可单独勾选需要同步的学习集 |
| Sync unassigned books | 是否同步不属于任何学习集的书籍 |
| Target folder | 生成的 Markdown/Canvas 文件保存在仓库中的哪个目录(默认 MarginNote) |
| Auto sync | 启用定时自动同步 |
| Sync interval | 自动同步间隔(1–60 分钟),仅在启用 Auto sync 时显示 |
| Force full resync | 重置时间戳,下次同步时重新生成所有文件 |
Cmd+P → "Sync MarginNote notes"在设置中启用 Auto sync 并设置间隔时间,插件将在后台定时同步。
在设置面板中点击 Force full resync 按钮,然后手动执行一次同步。
每次更改学习集勾选状态,插件会自动触发全量同步以确保输出文件与选择一致。
每本书/PDF 生成一个 .md 文件:
---
title: "书名"
author: "作者"
source: "MarginNote 4"
date: "2025-06-01"
total_annotations: 42
page_range: "10-156"
---
# 书名
## Highlights & Notes
### 章节名
#### Page 10
> [!note] Highlight
> 高亮文本内容
**Note:** 你的笔记
*→ 思维导图节点标题*
*(color: Yellow)*
[Open in MarginNote](marginnote4app://note/UUID)
## Mind Map
> [!info] Mind Map
> 此书的思维导图以 Canvas 格式保存,点击打开:[[书名.canvas|Mind Map Canvas]]
.canvas 文件呈现 MarginNote 中的层级思维导图:
## 标题,高亮文本为正文,笔记为斜体MarginNotes.sqlite 文件,而非文件夹sqlite3 CLI(macOS 通常自带)which sqlite3 确认部分用户可能移除了系统自带的 sqlite3。重新安装:
brew install sqlite3
git clone https://github.com/Cheendfdf/marginnote-obsidian-sync.git
cd marginnote-obsidian-sync
npm install
| 命令 | 说明 |
|---|---|
npm run dev |
esbuild watch 模式,自动重新编译 |
npm run build |
类型检查 + 生产构建 |
├── main.ts # 插件入口(Obsidian Plugin API)
├── src/
│ ├── Settings.ts # 设置面板和数据模型
│ ├── SyncEngine.ts # 同步编排
│ ├── parser/
│ │ ├── MNBackupParser.ts # SQLite 数据库访问
│ │ ├── SchemaInspector.ts # Schema 自动发现
│ │ └── types.ts # 核心数据类型
│ ├── extractor/
│ │ └── NoteExtractor.ts # 数据库查询与数据组装
│ └── generator/
│ ├── MarkdownGenerator.ts # Markdown 文件生成
│ └── CanvasGenerator.ts # Canvas 思维导图生成
├── styles.css # 插件样式
├── manifest.json # Obsidian 插件清单
└── esbuild.config.mjs # 构建配置
MN4 实时数据库 (MarginNotes.sqlite)
│
▼
MNBackupParser (sqlite3 CLI, -json 输出)
│
▼
NoteExtractor (查询、组装、层级重建)
│
▼
SyncEngine (编排、增量逻辑、文件写入)
│
├──▶ MarkdownGenerator → .md 文件
└──▶ CanvasGenerator → .canvas 文件
如果这个插件对你有帮助,欢迎赞赏支持 ☕

Z* tables at runtime, compatible with MN4 version updates<target>/<StudySetName>/; unassigned books in root> [!note] callouts, [[wikilinks]]marginnote4app://note/<UUID> on every annotationCmd+P → "Sync MarginNote notes"sqlite3 CLI)Obsidian → Settings → Community plugins → Browse → "MarginNote Sync" → Install & Enable.
Cheendf/marginnote-obsidian-sync in BRAT settingscp -r marginnote-obsidian-sync "<vault>/.obsidian/plugins/marginnote-sync"
Or symlink for development:
ln -s /path/to/marginnote-obsidian-sync "<vault>/.obsidian/plugins/marginnote-sync"
Obsidian → Settings → MarginNote Sync:
| Setting | Description |
|---|---|
| Database path | Full path to MarginNotes.sqlite |
| Discover | Scan and list all study sets from the database |
| Study sets | Toggle individual study sets for sync |
| Sync unassigned books | Include books without a study set |
| Target folder | Vault folder for generated files (default: MarginNote) |
| Auto sync | Enable periodic automatic sync |
| Sync interval | Minutes between auto-syncs (1–60) |
| Force full resync | Reset timestamp to regenerate all files |
Default database path:
~/Library/Containers/QReader.MarginStudy.easy/Data/Library/Private Documents/MN4NotebookDatabase/0/MarginNotes.sqlite
Click the ribbon icon or Cmd+P → "Sync MarginNote notes".
Enable Auto sync in settings with desired interval.
Click Force full resync in settings, then trigger a sync.
Each book generates a .md file with:
.canvas mind map fileIf the book has mind map nodes, a .canvas file is generated with:
Verify the path in settings points to the MarginNotes.sqlite file.
Ensure sqlite3 is on PATH. macOS ships with it by default; verify with which sqlite3.
Reinstall via Homebrew:
brew install sqlite3
Only annotations typed as mindmap node, chapter, or concept appear in the mind map. Pure highlights appear only in the Highlights & Notes section.
git clone https://github.com/Cheendfdf/marginnote-obsidian-sync.git
cd marginnote-obsidian-sync
npm install
| Command | Description |
|---|---|
npm run dev |
Watch mode with esbuild |
npm run build |
Typecheck + production build |
MN4 SQLite DB → MNBackupParser → NoteExtractor → SyncEngine
├── MarkdownGenerator (.md)
└── CanvasGenerator (.canvas)
If this plugin helps you, consider buying me a coffee ☕

MIT © Cheendfdf