用 TypeScript 构建超快、超小、跨平台桌面应用的框架,Bun + 原生绑定(Objective-C/C++/Zig),MIT 协议,12.5k stars。定位是 Electron 的轻量替代方案。
核心特性
- Bun 驱动主进程:主进程(Bun process)和 webview 的 TS 代码都用 Bun 打包执行,无需 Node
- 原生系统 webview:默认用系统自带 webview(macOS WebKit / Windows WebView2 / Linux webkit2gtk),也支持
bundleCEF打包固定版本 Chromium 换取一致性。这是构建配置里的一个选项(如config.build.linux.bundleCEF),不是独立项目,可随时切换 CEF 版本;未来 Ladybird/Servo 成熟后会作为可替换引擎 - 超小体积:自解压 bundle 用 ZSTD 压缩,最小约 14MB(多数体积来自 Bun 运行时);增量更新用 Zig 优化的 BSDIFF,补丁可小至 4KB
- WebGPU 支持:
bundleWGPU让 TS 直接控制原生 GPU surface,无需经过 webview;提供 Three.js/Babylon.js 适配器 - 类型化 RPC:主进程与 webview 之间隔离,通过类型化 RPC 通信
- 平台支持:macOS 14+/Windows 11+/Ubuntu 22.04+ 官方支持,其他 Linux 发行版社区支持
CLI 命令
安装后 electrobun 命令出现在 node_modules/.bin,通常经 bunx/npx 调用。
electrobun init
初始化新项目,交互式或直接指定模板:
bunx electrobun init # 交互式选择模板
bunx electrobun init photo-booth # 直接指定模板内置模板:hello-world、photo-booth、interactive-playground、multitab-browser。
electrobun build [options]
按 electrobun.config.ts 构建应用,始终只构建当前主机的平台/架构(多平台分发需在各平台 CI runner 上分别跑)。
| 选项 | 说明 | 取值 | 默认 |
|---|---|---|---|
--env | 构建环境 | dev | canary | stable | dev |
electrobun build # dev 构建(当前平台)
electrobun build --env=canary # 预发布构建,生成分发产物和更新清单
electrobun build --env=stable # 生产构建,签名+notarization+压缩优化electrobun run
直接启动已构建好的 dev bundle,不重新构建,用于只想重新拉起应用的场景。
electrobun dev [options]
日常开发主命令,等价于 electrobun build --env=dev 接 electrobun run。
| 选项 | 说明 |
|---|---|
--watch | 监听源文件变化,自动重新构建并重启应用 |
electrobun dev # 构建 + 启动(dev 模式)
electrobun dev --watch # 构建 + 启动 + 监听变更--watch 监听范围:build.bun.entrypoint 所在目录、每个 view 的 entrypoint 目录、build.copy 来源路径、build.watch 中额外声明的路径。检测到变更后杀掉运行中的应用、重新构建(含 postBuild 等生命周期钩子)、再重启;构建期间暂停监听避免误触发;300ms 防抖;构建失败只记录日志,监听继续。
三种构建环境对比
| 环境 | 用途 | 特征 |
|---|---|---|
dev | 本地开发 | 日志/错误输出到终端,无签名,产物在 build/ 目录,无分发产物 |
canary | 预发布/beta | 可选签名+notarization,生成分发产物和自动更新清单 |
stable | 生产发布 | 完整签名+notarization(如已配置),优化压缩产物,生成全部更新文件 |
典型 package.json 脚本
{
"scripts": {
"start": "electrobun run",
"dev": "electrobun dev",
"dev:watch": "electrobun dev --watch",
"build:canary": "electrobun build --env=canary",
"build:stable": "electrobun build --env=stable"
}
}多平台分发时,同一套 build:* 脚本在各平台的 CI runner 上分别执行即可,无需跨平台交叉编译。
配置文件 electrobun.config.ts
TypeScript 编写,ESM 语法,类型安全:
import type { ElectrobunConfig } from "electrobun";
export default {
app: {
name: "MyApp",
identifier: "com.example.myapp",
version: "1.0.0",
},
runtime: {
exitOnLastWindowClosed: true,
},
build: {
bun: {
entrypoint: "src/bun/index.ts",
},
},
} satisfies ElectrobunConfig;build.bun 和 build.views 下每个入口都透传 Bun.build() 的选项(plugins、external、sourcemap、minify、splitting、define、drop、format 等),唯一必填字段是 entrypoint,entrypoints/outdir/target 由 Electrobun 自动管理。
与 Vite 的组合模式
Electrobun 只管桌面壳(主进程 + webview 承载),前端页面本身可以用 Vite 单独跑 dev server 拿 HMR。常见组合(示例来自实际项目 package.json):
{
"scripts": {
"start": "vite build && electrobun dev",
"dev:hmr": "concurrently \"bun run hmr\" \"bun run start\"",
"hmr": "vite --port 5173"
}
}即 Vite 负责前端资源热更新,electrobun dev 负责拉起原生壳加载页面,用 concurrently 把两个进程一起跑起来。细节见 package-json。
与 Electron 的定位差异
| 维度 | Electrobun | Electron |
|---|---|---|
| 运行时 | Bun | Node.js |
| Webview | 系统原生(可选 CEF) | 内置 Chromium |
| 典型体积 | ~14MB(系统 webview) | 通常 100MB+(内置 Chromium) |
| 增量更新 | BSDIFF 补丁最小 4KB | 通常整包更新 |
| 语言 | TypeScript-first | 支持任意 Node 生态 |
| 生态成熟度 | 较新(12.5k stars),API 覆盖仍在扩展 | 成熟稳定,插件/工具链极丰富 |
扩展
相关
- package-json — Electrobun 项目 package.json 脚本示例解析
- electrobun-config-ts — Electrobun 的配置文件简介
- vite — 常与 Electrobun 搭配,负责前端资源构建和 HMR
- README — Electrobun 的底层运行时
- electron — Electrobun 对标的重量级前辈框架,生态成熟但体积大