Excalidraw 是一个手绘风格的在线白板,2020 年创建,用 TypeScript 编写,MIT 许可。官方站点 excalidraw.com 提供开箱即用的编辑器;代码同时以 npm 包 @excalidraw/excalidraw 发布,可以把白板嵌进自己的 React 应用。它的定位不是项目管理套件,而是让人快速画出架构草图、流程图、线框图和示意图。本文按官方 README 整理,未在本机完整实测;托管版与 npm 包的能力差异以当前文档为准。
手绘风与无限画布
编辑器提供无限画布、矩形、圆形、菱形、箭头、线条、自由绘制和橡皮擦,箭头可以绑定到图形并带标签。所有图形默认带轻微的手绘抖动,看起来像纸笔草图,适合还在讨论阶段的架构图,不会让人误以为已经定稿。支持深色模式、图片、图形库和多语言界面,导出 PNG、SVG 和剪贴板,也能保存为开放的 .excalidraw JSON 文件。
这些能力主要来自 npm 包本身。README 把托管站点称为“最小展示”,并说明实时协作、端到端加密、本地优先自动保存和只读分享链接属于 excalidraw.com 这个应用,未来才计划以插件形式进入 npm 包。
托管版和 npm 包不是一回事
很多人第一次用 Excalidraw 是打开 excalidraw.com:不用注册就能画,文件自动保存在浏览器本地,协作时数据端到端加密,分享出去的是只读链接,还能作为 PWA 离线使用。
但如果你要在自己的产品里嵌入白板,用的就是 npm 包,需要自己处理持久化、协作后端和权限。README 明确说这两层能力目前不同步,选型时不要假设“官网有,嵌入版也有”。把这一点想清楚,能省掉后期补协作功能的返工。
嵌入自己的应用
在 React 项目里安装:
npm install react react-dom @excalidraw/excalidraw |
然后按 docs.excalidraw.com 的安装说明挂载组件。包本身不带后端,画布数据、保存、分享和多人同步都要自己实现;如果只是做只读展示,导出 SVG 或 JSON 再渲染会更简单。VS Code 扩展和 Obsidian 插件是两个现成例子,说明这种嵌入方式已经被实际产品采用。
对文档站点来说,一个常见做法是把 Excalidraw 当“图形编辑器”:作者在官网画好,导出 .excalidraw 或 SVG 放进仓库,站点只负责展示。这样既保留可编辑源文件,又不用在站点里维护协作服务。
典型场景
在一次架构评审前,后端工程师用 Excalidraw 画一张包含网关、服务、队列和数据库的草图,导出 SVG 放进设计文档。评审中有人提出不同方案,直接在白板上复制一块改箭头,讨论完把只读链接发到群里。整个过程不需要建项目、配权限或安装客户端。会后把 .excalidraw 文件提交到仓库,下一次评审还能继续改。
和商业白板的差别
Miro、FigJam 这类商业白板提供模板、投票、计时器、企业权限和大型工作坊流程,适合跨团队协作;Excalidraw 的强项是打开即画、风格轻、数据格式开放。把 Excalidraw 当作“画图工具”而不是“协作平台”,预期就不会错位。与 draw.io 相比,Excalidraw 更偏草图和非正式沟通,draw.io 更偏规范制图。
限制
README 没有承诺企业级权限、审计或大规模协作;托管站点的协作是端到端加密的,也意味着服务端无法帮你恢复内容。npm 包需要 React 环境,非 React 项目要另找封装。手绘风格不以严格的 UML 或工程制图为目标;元素很多时的画布操作和导出性能需要自己压测。自托管需要自己维护前端和存储,协作能力仍要额外建设。
适合谁
适合需要快速画架构草图、流程图、产品线框和教学示意图的开发者、产品经理和教师;也适合想把轻量白板嵌进自己应用的 React 团队。需要企业权限、审计和大型工作坊的组织,应选择商业白板。
入口
- 仓库:excalidraw/excalidraw
- 在线编辑器:excalidraw.com
- 文档:docs.excalidraw.com
- npm 包:
@excalidraw/excalidraw - 许可证:MIT
