内容
# MindSpark
MindSpark 是一款开放源代码的思维导图应用程序,您可以真正拥有它 —— 没有账号限制,没有付费墙,没有功能限制,也没有使用限制。您可以一键自托管,在浏览器中免费运行,每个思维导图都保存到您**自己的**私有 GitHub 仓库中,或者添加一个小的 Cloudflare Worker 以解锁实时共享和协作。它采用 vanilla JavaScript,具有**零运行时依赖**,MIT 许可,支持 AI 辅助,您可以运行、修改和扩展它。
  
**▶ 立即尝试 → [mindspark.githubpage.workers.dev](https://mindspark.githubpage.workers.dev/)** — 完全在您的浏览器中运行。 使用 GitHub 登录,您的思维导图将保存为 `mindspark-maps` 仓库中的私有 JSON 文件(无需中间服务器)。
**🧠 通过聊天创建思维导图 → [MindSpark — 适用于所有人的思维导图](https://chatgpt.com/g/g-6a3a81242f748191ab1b7cff99a21619-mindspark-mind-map-for-everyone)** — 描述一个主题,GPT 将构建思维导图,然后为您提供一个链接,以便在 MindSpark 中打开和编辑它。无需账号即可查看。
**🔌 通过 MCP 连接 Claude 或 ChatGPT → [mindspark-mcp](https://github.com/prasadpatil25/mindspark-mcp)** — MindSpark 的 Model Context Protocol 服务器,有三种连接方式,具体取决于您的需求:您自己的令牌,每个用户的 GitHub 登录,或无需登录。
<p align="center">
<img src="docs/screenshot.png" alt="MindSpark showing the “ML - Overview (Demo)” sample map: a “Machine Learning” central node branching into Supervised, Unsupervised and Reinforcement learning, Neural networks, a typical workflow, a learning checklist and references." width="900">
</p>
<p align="center">
<img src="docs/markdown to mindmap.png" alt="MindSpark: “Markdown to Mindmap” a sample of Machine learning demo with its Markdown view a side by side visualization" width="900">
</p>
## 功能
"协作"标题以下的所有内容都需要可选的云工作器;标题以上的所有内容都可以在离线/自托管的情况下完全运行,无需账号。有关确切的划分,请参见 **[本地 vs 云](#what-works-offline-vs-what-needs-the-cloud)**。
**编辑和画布**(始终本地)
- **无限画布**,平滑缩放,适应屏幕,并带有缩略图
- **键盘优先编辑** — `Tab` 用于子节点,`Enter` 用于兄弟节点,`F2` 重命名,`Del` 删除,开始输入以编辑
- **实时自动布局** — 树在您输入时自动整理,确保增长的节点不会与其邻居重叠
- **拖放重新排序** — 将主题拖放到另一个主题的中心以嵌套它,或拖放到其顶部/底部边缘以插入并重新排序
- **布局选项** — 平衡(左右分开),右侧,左侧或向下(组织结构图)
- **增量折叠/展开** — 单击一次一个分支深度,或整个地图一次性(循环完全打开 ↔ 完全关闭,并报告进度)
- **触摸支持** — 在手机和平板电脑上进行平移,缩放,拖放和选择
- **数学** — 输入 `$...$`(行内)或 `$$...$$`(显示)LaTeX,它会渲染为原生 **MathML**;方程也会在 PNG 导出中渲染。零依赖 - 涵盖常见的行内子集(上下标,希腊字母,运算符,`\frac`,`\sqrt`,口音,字体,函数名称)
- **节点公式** — 一个小型 Excel 类似的公式引擎内置于节点中:`SUM(children)`,`AVERAGE`,`MIN`/`MAX`,`IF`,`ROUND`,`SQRT`等,输入时自动补全。将数字分支转换为实时计算的汇总,而不是静态文本
- **版本历史** — 浏览,**差异**(添加/删除/编辑节点),预览和恢复过去的版本
- **富文本和节点** — 粗体/斜体/下划线/删除线,突出显示和文本颜色,字体大小,对齐方式,项目符号/编号列表(包括多行列表),链接,注释,图像,引用,任务进度
- **颜色主题** — 10 种内置主题(Light,Dark,Dracula,Catppuccin Light/Dark,Rosé Pine Moon/Dawn,Nord,GitHub Light/Dark),可按节点或地图设置
- **撤销/重做**(完整历史)· **搜索和突出显示** · **演示模式**
- **多个思维导图**,可点击的侧边栏;创建,重命名,复制,删除
- **导入** JSON,OPML,Markdown,GitMind(`.gmind`)和 MindMeister(`.mind`)文件
- **导出** PNG,PDF,JSON,Markdown/文本,Word(`.doc`),Mermaid,引用列表或提示
- **只读共享链接** — *复制共享链接* gzip 编码**整个思维导图到 `#view=` URL**;任何人都可以打开它而无需账号或服务器,然后保存到他们自己的 MindSpark 中
- **持久性** — 自托管时使用 SQLite,或云模式下使用您自己的私有 GitHub 仓库
**Markdown ⇄ 思维导图**(始终本地)
每个思维导图都是 Markdown 大纲 - 不是单向导出的附加功能。切换 **Markdown 模式**(`</>`)并编辑任一侧;它们会实时保持同步, 双向操作。
- **分窗文本编辑器**,带有行号,语法高亮和 Markdown/公式语法的自动补全
- **折叠/展开** 任意分支独立 - 包括思维导图的顶部元数据注释 - 以便您可以一次处理长大纲的一个部分
- **换行** 可切换长行, gutter 正确对齐
- **点击跳转** - 点击文本中的一行,其节点在画布上被选中,或者选择一个节点,其行被显示并滚动到视图中(必要时展开祖先节点)
- **实时渲染预览** 可切换,并 **直接从编辑器下载预览为 PDF**
- **格式化循环为真正的 Markdown/HTML**,而不是简单文本 - 粗体,斜体,下划线,删除线,高亮,文本颜色,字体大小,对齐方式,项目符号/编号列表和行内代码在循环中得以保留
**为研究人员和工程师构建**(始终本地)
- **具有 DOI 自动填充的引用** - 在任意节点上打开引用表单,粘贴 DOI,MindSpark 会自动从 **Crossref** 获取作者/标题/年份/出处。被引用的节点会获得引用标记,并在 **导出 → 引用列表** 中汇总
- **编译子树 → 提示** - 将任意分支组装成结构化提示,替换 `{{变量}}`,查看实时令牌估计,然后复制或 **直接运行到 Anthropic 或 OpenAI**,使用您自己的 API 密钥
- **提示工程模板** - 角色/任务/上下文/约束/示例,思维链,函数调用模式,少量示例
- **研究模板** - IMRaD 研究论文,文献综述综合,研究提案,实验设计,系统性综述(PRISMA),研究问题(FINER),论文/多论文弧,会议发言大纲,审稿人回应/驳斥
- **AI 和代理模板** - AI 代理架构,代理工作流模式和 Claude **代理技能** 脚手架(一个现成的 `SKILL.md`,带有 frontmatter)
- **软件工程模板** - 系统架构,设计文档/RFC,领域驱动设计,冲刺/功能计划,事件事后总结
- **50 多个内置模板**,涵盖研究,提示工程,AI/代理,软件,产品,设计,学习,写作,职业和项目管理 - 从 **+ 主题 ▾** 浏览
**协作** ☁ *(需要云工作器 - 请参见[下方](#cloud--collaboration-deployment))*
- **使用 GitHub 登录** - 一键 OAuth(静态构建也支持个人访问令牌登录,无需工作器)
- **云共享(可编辑)** `#shared=` 链接
- **实时协作** / 自动合并
- **基于身份的访问控制** - 添加命名协作者,具有 **编辑者/查看者** 角色,设置链接模式(**查看/编辑**,可选 **需要登录**),并随时撤销访问权限
- **共享地图侧边栏** - 一个地图 **您共享** 和 **共享给您** 的地方,带有关系徽章
- **最近打开** - 查看哪些登录的协作者打开了共享地图
## MindSpark 的不同之处
- **Markdown 文件,而不是专有格式。** 大多数思维导图工具将 Markdown 作为单向导出。而在这里,它是双向的原生格式 - 画布和文本编辑器是同一个文档的两个视图,实时同步。
- **您拥有数据。** 无需注册账号。自托管只需一行命令(`node server.js`,SQLite,零设置)或运行静态构建 **$0 永久**,每个思维导图都保存为 *您自己的* 私有 GitHub 仓库中的纯 JSON 文件 - 永远不会在您无法控制的供应商服务器上。
- **没有功能限制。** 实时协作,无限思维导图和节点,完整的版本历史记录, 差异对比,所有导出格式 - 都没有付费墙或上限,自托管或云端。
- **零运行时依赖。** 画布,LaTeX 数学渲染,公式引擎,Markdown 解析器 - 所有都是手写的 vanilla JavaScript。无需 `npm install`,最小供应链,整个编辑器是一个您可以阅读的文件。
- **思维导图内的计算。** 内置公式引擎(`SUM(子节点)`,`AVERAGE`,`IF`,...)具有自动补全 - 大多数思维导图工具将每个节点视为惰性文本;在这里,数字分支可以计算实时汇总。
- **通往 LLM 工作流的桥梁,而不是简单的图表。** 将任意分支编译为提示,带有令牌估计,替换 `{{变量}}`,并直接从思维导图运行到 Anthropic 或 OpenAI - 还有专用的提示工程模板(思维链,少量示例,函数调用模式)和代理设计(包括 Claude 代理技能脚手架)。
- **专为研究写作构建**,而不仅仅是商业模板 - IMRaD 论文,PRISMA 系统性综述,FINER 研究问题,文献综述 - 带有直接内置节点编辑的引用管理(DOI → Crossref 自动填充,格式化引用导出)。
## 本地与云的区别
MindSpark 的编辑器是 100% 客户端。唯一需要可选的 Cloudflare Worker 的功能是那些本质上需要多人共享服务器的功能。
| 功能 | 本地(自托管或静态 + GitHub) | 云(工作器) |
| --- | --- | --- |
| 创建/编辑思维导图,所有布局,数学,公式,提示构建 | ✅ | ✅ |
| **Markdown 模式**(双向同步,预览,PDF 导出),引用 | ✅ | ✅ |
| 导入/导出(JSON,OPML,Markdown,PNG,PDF,`.doc`,Mermaid,...) | ✅ | ✅ |
| 版本历史记录,撤销/重做,搜索,演示模式 | ✅ | ✅ |
| **只读共享链接**(`#view=`,整个思维导图编码在 URL 中) | ✅ | ✅ |
| 保存思维导图到 **您自己的私有 GitHub 仓库** | ✅ *(使用令牌登录)* | ✅ |
| 一键 **"使用 GitHub 登录"**(OAuth) | ➖ *(仅限令牌登录)* | ✅ |
| **云共享(可编辑)** `#shared=` 链接 | ❌ | ✅ |
| **实时协作** / 自动合并 | ❌ | ✅ |
| **访问控制**(命名协作者,角色,撤销,链接模式) | ❌ | ✅ |
| **共享地图侧边栏**,“最近打开” | ❌ | ✅ |
| **GPT 地图导入** 端点(`POST /api/import`) | ❌ | ✅ *(接收者仍然打开本地 `#view=` 链接)* |
注意:
- 协作仅在 **云模式**(静态构建 + 配置的工作器)中提供。单个用户 `node server.js` / SQLite 部署故意没有共享后端,因此提供本地地图和 `#view=` 链接,但不支持 `#shared=` 协作。
- 两个共享链接的设计不同: **`#view=`** 携带整个思维导图在 URL 中,无需服务器端(只读); **`#shared=`** 指向工作器中的实时房间,支持编辑,协作和访问控制。
- **访问控制**(JWT 签名身份,角色,撤销)还需要工作器的 `AUTH_SECRET` 设置。 如果没有它,工作器返回 `501`,应用程序回退到旧版功能链接。
## 创建思维导图
按 **`Tab`** 添加子主题,按 **`Enter`** 添加兄弟节点 - 树自动排列成平衡布局。 新的登录用户从 **“ML - 概述(演示)**” 样本开始,以便立即进行探索。
## 使用 MindSpark GPT 创建思维导图
**[MindSpark — 适用于所有人的思维导图](https://chatgpt.com/g/g-6a3a81242f748191ab1b7cff99a21619-mindspark-mind-map-for-everyone)** 是一个自定义 GPT,它为您构建思维导图。 描述一个主题,大纲或粘贴一些笔记 - 它会生成结构化的思维导图(分支,项目符号,贴纸,检查清单,引用)并返回一个链接。
链接以 **只读** 方式在 MindSpark 中打开(无需账号即可查看)。 点击 **"创建可编辑副本"** 以将其保存到您自己的工作空间 - 您的仓库,您的令牌,没有存储在其他人的服务器上。
**工作原理:** GPT 调用一个小端点,`POST /api/import`,它将思维导图规范转换为与 **复制共享链接** 功能生成的 gzip 编码 `#view=` 共享链接。 无需个人访问令牌和仓库写入,因此它适用于每个用户。 端点位于可选的 Cloudflare Worker 下的 [`worker/`](worker/) - 参见 [`worker/README.md`](worker/README.md) 以自托管它,以及 OpenAPI 操作架构和思维导图 JSON 架构以连接您自己的自定义 GPT。
## 或通过 MCP 连接
**[mindspark-mcp](https://github.com/prasadpatil25/mindspark-mcp)** 是 MindSpark 的单独,独立的 [Model Context Protocol](https://modelcontextprotocol.io) 服务器 - 与上面的 GPT 相同的想法(AI 助手创建并向您显示思维导图),但可从 Claude Desktop,Claude Code,ChatGPT(通过 Apps SDK)或任何其他 MCP 兼容的客户端使用,具有创建,读取,编辑和可视化思维导图直接在对话中的工具。
三种部署模式,满足不同需求:
| | 认证 | 最适合 |
| --- | --- | --- |
| 单用户 | 一个共享的 GitHub 令牌 | 个人使用 |
| 多用户(OAuth) | 每个用户使用自己的 GitHub 账户 | 部署一次,用于团队 - 每个人保留自己的思维导图 |
| 无登录 | 完全没有 - 思维导图成为可共享的 `#view=` 链接 | 任何人,零设置 |
查看 [mindspark-mcp README](https://github.com/prasadpatil25/mindspark-mcp) 以获取每个模式的安装说明。
## 快速入门(自托管)
需要 **Node.js ≥ 22**(用于内置 SQLite + HTTP - 无需安装软件包)。
```bash
node server.js
# → http://localhost:3000
```
就是这样。 无需构建步骤,无需 `npm install`,无需原生编译。 会自动在 `./data/mindspark.db` 处创建 SQLite 数据库文件。
可选地,通过 npm(只是运行相同的命令,但会静止实验性 SQLite 通知):
```bash
npm start
### 配置
所有可选,设置为环境变量:
| 变量 | 默认值 | 描述 |
| --- | --- | --- |
| `PORT` | `3000` | HTTP 端口 |
| `DB_PATH` | `./data/mindspark.db` | SQLite 数据库文件路径 |
| `PUBLIC` | `./public` | 静态前端目录 |
```bash
PORT=8080 DB_PATH=/var/lib/mindspark/db.sqlite node server.js`
```
## 部署模式
MindSpark 检测它正在运行并自动选择存储后端(客户端探测 `/healthz` 启动时 - 如果它回答,则是自托管服务器;否则是 GitHub 支持的云模式)。
| 模式 | 如何运行 | 认证 | 存储 | 协作 | 成本 |
| --- | --- | --- | --- | --- | --- |
| | 1) `node server.js` | 无 - 单用户 | SQLite 位于磁盘上 | 否 | 您的服务器 |
| **静态云** | 在任何静态主机上托管 `public/` | GitHub 令牌 | 用户自己的私有 `mindspark-maps` 仓库 | - *(添加工作器)* | **$0** |
| **云(工作器)** | `public/` 在 Cloudflare Worker 上 **+** `worker/` 协作工作器 | GitHub OAuth / 令牌 | 用户的 GitHub 仓库 + 共享的工作室房间 | ✅ | **$0** 在 CF 免费层 |
### 仅静态云部署 - **永久免费**
纯浏览器应用,直接与 GitHub API 对话。每个访客在自己的私有仓库中存储自己的思维导图。 **无需维护后端**。
- **GitHub Pages** - 仓库自带工作流,在每次推送到 `main` 时发布 `public/`。(或在 **设置 → 页面** 处将 `/public` 文件夹部署到您的分支。)
- **Cloudflare Pages / Netlify / Vercel** - 指向任意静态主机到 `public/`。无需构建命令,输出目录为 `public`。
**用户流程(每位访客):** 点击 *在 GitHub 上创建个人访问令牌 →*,生成一个 `repo` 范围的令牌,粘贴进去,然后登录。第一次登录时,MindSpark 会创建一个私有 `mindspark-maps` 仓库,并提交每个保存的 JSON 文件。每条令牌仅存储在 `localStorage` 中,并仅发送到 `api.github.com`。在 <https://github.com/settings/tokens> 处撤销。
### 云 + 协作部署
这就是实时演示的运行方式:`public/` 应用作为 **Cloudflare Worker 静态资产** 提供(参见 [`wrangler.jsonc`](wrangler.jsonc)),与 [`worker/`](worker/) 中的 **协作/ OAuth 工作器** 配对。
```bash
# 1) 将应用(public/)部署为 Cloudflare Worker
npx wrangler deploy # 使用 wrangler.jsonc
# 2) 部署协作 + OAuth 工作器(Durable Objects 在此处运行)
npx wrangler deploy --config worker/wrangler.toml
```
3) 设置工作器密钥(、共享和访问控制)
npx wrangler secret put GITHUB_CLIENT_ID --config worker/wrangler.toml
npx wrangler secret put GITHUB_CLIENT_SECRET --config worker/wrangler.toml
npx wrangler secret put AUTH_SECRET --config worker/wrangler.toml # 身份验证访问控制# npx wrangler secret put IMPORT_TOKEN --config workerler.toml # 仅在使用 GPT /api/import 流时需要
然后,在 `public/app.js设置 `GH_OAUTH.workerUrl`(和 `clientId`)为你的工作器 URL。如果你完全跳过工作器并留空 `GH_OAUTH`,则只有令可见,协作功能被隐藏 — 其他功能保持正常。参见 [`worker/README.md`](worker/README.md) 了解 OAuth 应用设置和 GPT。
> 应用和工作器独立的部署**。`npx wrangler deploy` 部署应用(`public/`);`npx wrangler deploy --config worker/wrangler.toml` 部署协作/OAuth 工作器。根据上面的示例为工作器配置设置工作。
### 自托管(VPS / Docker)
```bash clone <your-repo> mindspark && cd mindspark
PORT= server.js # 使用 nginx/Caddy 进行 TLS 配置
# 或者使用 Docker:
docker build -t mindspark .
docker run -p 3000:3000 -v mindspark-data:/app/data mindspark
```
使用 systemd/pm2 保持运行。示例单元:
```ini
[Service]
ExecStart=/usr/bin/node /opt/mindspark/server.js
Environment=PORT=3000
Restart=always
WorkingDirectory=/opt/mindspark
```
## REST API(自托管服务器)
一个简单的 REST API — 在其基础上构建其他客户端、脚本或集成。
| 方法 | 路径 | 描述 |
|----------|------------------|--------------------------------------|
| `GET` | `/api/maps` | 列出所有地图(id、标题、颜色) |
| `GET` | `/api/maps/:id` | 获取一个完整的地图(节点 + 结构) |
| `POST` | `/api/maps` | 创建一个地图(主体 = 地图 JSON) |
| `PUT` | `/api/maps/:id` | 更新 / 插入一个地图 |
| `DELETE` | `/api/maps/:id` | 删除一个地图 |
| `GET` | `/healthz` | 健康检查 |
协作工作器公开了一个单独的 `/api/collab/*` 接口(共享地图读写、访问控制列表、链接模式)以及 `/api/session`(生成签名身份)和 `/api/import`(GPT 地图导入)。这些在 [`worker/README.md`](worker/README.md) 中有文档。
地图是一个 JSON 对象,结构如下:
```json
{
"id": "abc123",
"title": "我的地图",
"color": "#e0613a",
"rootId": "r1",
": {
"r1": { "id": "r "text": "中心思想parent": null, "x": 0, "y": 0, "side": " },
"n2":id": "n2", "text": "分支", "parent": "r1", "side": "right", "colordcefce" }
}
}
```
### 使用不同的数据库层完全位于 `server.js` 中(`Q` 预和 `upsert()` 助手)。要切换到 **Post / MySQL**,请用驱动程序的查询替换它们只是 `(id, title, color, data, updated)`,data` 是完整的地图 JSON。应用程序的其他部分无需更改。
布局
```
mindspark/
├── server.js # Node HTTP + SQLite API(自托管模式)
├── package.json 脚本仅用于此;wrangler 是开发工具(无运行时依赖)
├── wrangler.jsonc # Cloudflare Worker 配置,用于提供 public/ 作为应用
├── Dockerfile # 自托管服务器的容器
├── .env.example # 示例环境变量
├── public/ # 应用(静态资产是部署的内容)
│ ├── index.html # 应用壳
│ ├── styles.css 样式(可通过 CSS 变量主题化)
│ ├── app # 完整的思维编辑器(纯 JavaScript)
│ └── demo-map.json # “ML - 概述)”启动地图
├── worker/ # 可选 Cloud:OAuth + 共享 + 协作
│ ├── oauth-worker.js # 入口:GitHub OAuth、/api/session、请求路由
│ ├── collab-do.js # 协作室 Durable 对象(共享 + 即时地图)
│ ├──-http.js # HTTP API + 访问(纯净)
│ ├── auth-core.js 生成/验证 +决策(纯净 ├── import-core.js地图规范构建 #view= 共享链接(GPT │ ├── wrang # 工作器配置 +文档
│ └── README.md # 工作器部署指南 操作/JSON 模式
├── .github/ #PR 模板、部署工作流
├── docs/ README 中使用的截图 / 动图
└── data # 运行时创建 — 你的 SQLite 数据库
```
## 路 — 下一步计划
欢迎贡献(参见 **新建问题** 下的问题模板)。列表中的想法:
- **跨设备共享边栏。** “/与我共享”的按浏览器(localStorage)划分的。现在,登录提供了,可以在用户之间同步,以便同一个列表可以在不同设备上- **在不同通道上控制。** 将实时置于与 HTTP 同基于身份的访问模型角色和撤销在所有地方一致地应用。
- **“地图。”** 可选共享房间成为单一事实Overleaf 风格),这样所有者不必保留可能漂移副本。
- **升级旧版共享链接。** 一键重新发布,以将旧的匿名能力链接移动到基于身份的访问控制之下。
- **自托管者的协作。** 一种可选路径,用于在 `node server.js旁边运行协作后端,以便实例也可以共享。
-。** 扩展 `worker/README.md`,包含完整的 `/api/collab/*` 和访问控制参考。
- **移动设备优化。** 继续强化触摸/手势处理和小屏幕布局。
### 仓库管理(良好的初始
- 添加贡献:`CONTRIBUTING.md`、`SECURITY.md`_OF_CONDUCT.md`取请求模板。
-选择器链接到 **讨论** — 启用讨论(设置 → 功能)或更新 `.github/ISSUE_TEMPLATE/config.yml` 中的链接。
## 许可证
您可以任意使用它限制。
连接信息
猜你喜欢
暂无推荐服务器