drawio-desktop 离线完全指南:如何三步跑起 draw.io 桌面版,在内网免费画流程图
【免费下载链接】drawio-desktopOfficial electron build of draw.io项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop
drawio-desktop 是 draw.io 官方维护的 Electron 桌面封装,把整套编辑器(流程图、架构图、UML)打包进本地应用。它解决的是浏览器标签页最尴尬的两个问题:断网就不能画,编辑状态挂在远端。装好后,所有 JavaScript 都内置在本机,打开就能画,图文件不离开你的机器。
整条上手路径只有 3 条命令:克隆、装依赖、启动。当前版本 32.6.1(package.json),要求 Node.js >= 22.12.0(engines字段写明),对外网络行为只有每天一次更新检查——在内网里可以一行关掉。
为什么装在本机,比开标签页更稳
浏览器里画图,一半的挫败来自网络:标签页一关状态悬空,断网直接白屏。桌面版把同样的界面整体搬进本地,差异集中在三件事上:
- 断网可用:编辑器按"与外网完全隔离"设计,局域网、内网机器直接跑。
README.md里说得很直白:draw.io Desktop 的首要目标就是安全与隔离,任何"默认开启外部连接"的功能请求,答案都是 no。 - 隐私是代码级保证:内容安全策略(CSP,浏览器的安全规则集)禁止执行任何远程加载的 JavaScript,渲染层自身的网络连接也被限制在应用自身范围内。也就是说,应用连"打电话回家"的能力都没有,更谈不上把图内容或用量统计发出去。
- 许可友好:桌面端按 GPL v3 许可发布,
README.md原话——不改代码、接受"as-is"状态,任何用途(包括商用)都可以免费使用。
三条命令跑起来:克隆 → 装依赖 → 启动
前提只有一个:本机 Node.js 版本不低于 22.12.0。
第 1 步:克隆源码(必须带--recursive)
git clone --recursive https://gitcode.com/GitHub_Trending/dr/drawio-desktop关键在--recursive。draw.io 核心编辑器是以 git 子模块形式挂在drawio/目录下的(见.gitmodules),不带这个参数,drawio/就是个空文件夹,后面一步都跑不动。预期结果:drawio/里能看到完整的 draw.io 代码。已经克隆过但忘了加参数的,补一句git submodule update --init即可。
第 2 步:装依赖
npm install预期结果:node_modules生成完毕,Electron(^44.9.3)等开发依赖就位,无报错即成功。
第 3 步:启动
npm startstart脚本实际执行的就是electron .(入口是 src/main/electron.js)。预期结果:几秒后弹出 draw.io 主窗口,左侧形状库、中间画布直接可用——打开就是一张Untitled Diagram.xml,拖个形状进去就能画了。
启动后行为异常想定位卡在哪一步,换带日志的命令再跑一次:
npm start --enable-logging预期结果:控制台持续输出主进程日志,窗口行为与平时一致。
黑盒拆解:这个应用到底在跑什么
桌面版的仓库结构很克制,核心就三层:
| 文件 / 目录 | 干什么的 |
|---|---|
| src/main/electron.js | 主进程入口,约 4500 行,窗口创建、更新检查、日志、CLI 参数解析全在这 |
| src/main/electron-preload.js | 预加载脚本,用 contextBridge 隔离主进程与渲染层,编辑器只拿到request等几个受控接口 |
| drawio/ | draw.io 核心编辑器,git 子模块,真正的"画图画"代码都在这 |
| sync.cjs | 构建前从drawio/VERSION读版本号写回package.json,顺带生成disableUpdate.js;drawio/VERSION不存在时直接报错退出 |
| electron-builder-win.json、electron-builder-linux-mac.json | 各平台安装器的打包配置 |
| src/test/ | 12 个单元测试文件,npm test用node --test跑 CLI 参数、窗口边界、更新模式等模块 |
一个容易被忽略的细节:版本号不由本仓库决定。sync.cjs 会严格校验drawio/VERSION的格式(必须是x.y.z),校验失败直接终止——所以子模块没拉全时,构建会在这里先炸。
你的数据落在哪,网络行为只剩什么
本地数据。Local Storage 与 Session Storage 都落在系统应用数据目录:
- macOS:
~/Library/Application Support/draw.io - Windows:
C:\Users\<用户名>\AppData\Roaming\draw.io\
更新机制。应用每天最多连一次 github.com 查新版本,更新包从 GitHub 名下的 AWS S3 桶下载。装到之后怎么更新,取决于安装方式,逻辑在 src/main/update-mode.js:
| 安装方式 | 更新模式 |
|---|---|
Windows.exe安装器、macOS、AppImage | 后台自动下载,退出或点"Restart to Update"时安装 |
| MSI、Windows zip 便携版、deb/rpm | 只提示有新版本,给发布页链接,手动升级 |
| Microsoft Store、Snap、Flatpak | 交给商店管,应用自身不检查 |
内网环境想彻底关断,两个开关任选其一(实现在 src/main/electron.js):
- 环境变量
DRAWIO_DISABLE_UPDATE=true - 启动参数
--disable-update
⚠️一个例外场景:图文件里如果嵌入了 URL 形式的外部资源(图片、背景、字体),打开图时会去拉取这些资源以便正常渲染,这个请求会把你的 IP 暴露给对方服务器。图的内容本身不会外发,但陌生来源的图文件还是别轻易打开。
进阶玩法:命令行批量导出图
桌面版自带完整的 CLI,这是很多人不知道但极好用的一块(参数定义见 src/main/args.js):
-x / --export:批量导出,输入除了 .drawio 文件,还支持.vsdx、.csv、Mermaid(.mmd/.mermaid)-f / --format:输出格式,pdf(默认)、png、jpg、svg、xml、html--layout:打开图后先跑自动布局,预设名有verticalFlow、horizontalFlow、verticalTree、horizontalTree、radialTree、organic--normalize:修复模型——把边挂到端点最近公共祖先、给缺几何信息的边补标准几何,适合机器生成的图-e / --embed-diagram:在 PNG/SVG/PDF 里嵌入图副本,导出的图点开还能编辑-a / --all-pages、-p / --page-index:多页图按页导出
典型场景:一批 Mermaid 文件丢给--export配--layout,直接产出自动排版的 SVG/PNG,CI 里就能用。
容易踩的坑
- 克隆忘加
--recursive:drawio/是空的,npm run sync会明确报drawio/VERSION not found。这是最高频的失败点。 - 单实例限制:draw.io 每个用户只允许一个运行实例。官方应用已在运行时再启动你自建的副本,新窗口会开在官方应用里,看不到你的改动——先退出正在跑的 draw.io。
- 给自己打构建要关更新:
npm run sync -- disableUpdate会生成disableUpdate.js把自动更新锁死,否则你的修改版会被官方更新"悄悄改回去"。详见 doc/BUILDING_FOR_PERSONAL_USE.md,其中DRAWIO_UNSIGNED=true是明确的"我同意构建未签名版本"开关。 - 依赖放错位置:draw.io 子模块
war/package.json的 dependencies 会原样打进安装包;electron 这类开发期才用的包必须放 devDependencies。DEVELOPMENT.md 里有专门警告。 - 子模块更新顺序:先提交子模块变更、打版本 tag,再回本仓库推送——CI 构建由推本仓库触发,不是由 draw.io 触发。
- 不接收外部贡献:项目长期对 PR 关闭(维护者许可的例外极少),bug 和功能请求走仓库 issue。非付费用户没有私人工单渠道,购买 Confluence/Jira 版本也不包含 desktop 支持。
接下来看什么
- DEVELOPMENT.md:开发环境、CI 构建与签名细节
- doc/RELEASE_PROCESS.md:官方发布、签名与构建流程
- doc/BUILDING_FOR_PERSONAL_USE.md:给自己打一个未签名构建的完整步骤
- SECURITY.md:安全策略
【免费下载链接】drawio-desktopOfficial electron build of draw.io项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考