跳到正文
Hacker News· GutenYe·· 7 天前AI 评分41

Bunmaska:用 Bun 和 WebKit 替代 Chromium 的 Electron 轻量方案

Electron minus Chromium, powered by Bun and WebKit

AI 导读

Bunmaska 是一个基于 Bun 运行时和 WebKit 的桌面应用框架,用 Electron 风格的 API 实现同样的 BrowserWindow 和 ipcMain,但把浏览器引擎和运行时换掉,应用体积从 Electron 的 150 MB+ 降到约 16-23 MB。

正文 · AI 翻译

包体积

~16MB

整个应用,而不是你随它一起重新分发的浏览器。几秒内即可下载完成; 更新包只是其中一小部分。

运行于 Bun

毫秒级启动,原生运行 TypeScript——无需转译步骤——JavaScriptCore 让内存保持精简。你熟悉的 Node API,底层却是快得多的运行时。

原生代码,无需构建

从 .ts 文件调用操作系统。没有 node-gyp,没有 electron-rebuild,没有会在别人机器上崩掉的工具链。

WebKit,由你掌控

默认使用系统 WebKit——这就是下载体积小的原因。当需要逐字节一致性时,从引擎商店固定一个精确的、已签名的构建版本。绝不使用 Chromium。

零运行时依赖

没有运行时依赖,没有编译后的原生代码,没有 postinstall 脚本。你的 SBOM 就是“Bun + 你的代码”。

熟悉的开发体验

Electron 风格的 API。
原生实现。

你已经在写的同样的 app、BrowserWindow 和 ipcMain——底层替换了沉重的部分, 而不是让你迁移到新的 API。

3

平台

Windows · macOS · Linux

全部体积

~16-23 MB。没错, 全部就这么多。

Electron 还没做任何事就要 150 MB+。Bunmaska 是你不会注意到的下载量, 也是你听不到它在运行的应用。

一个最小的 Electron 应用 150 MB+

同样的应用,运行于 Bunmaska ~16-23 MB

同样的应用。一个打包了整个浏览器;另一个则没有。

这是 macOS 和 Linux,它们渲染在机器上已有的 WebKit 上—— 无需打包任何东西。Windows 没有系统 WebKit,所以它附带一个从源码构建的 WinCairo 引擎 (更重,并通过引擎商店在应用间共享)。

值得关注的部分

原生模块只是一个 .ts 文件

它 dlopen 操作系统,然后继续自己的生活。没有 node-gyp。没有 N-API。没有 electron-rebuild。没有那种在最关键的机器上失败的 40 分钟编译。

无需重新构建,因为从来就没有需要构建的东西。

pid.ts - macOS, Linux

// pid.ts - a native module. No build step. No bindings.gyp. Just Bun.
import { dlopen, FFIType } from "bun:ffi";

const libc = process.platform === "darwin" ? "libSystem.B.dylib" : "libc.so.6";
const { symbols } = dlopen(libc, {
  getpid: { args: [], returns: FFIType.i32 },
});

export const pid = () => symbols.getpid();

Electron 的等价实现从 npm install node-gyp 和一个编译器开始。这个则不需要。

固定你 实际测试过的 WebKit。

默认情况下,应用渲染在机器上已有的 WebKit 上——这正是它们保持小巧的原因。 当需要逐字节一致性时,改为固定一个特定的构建版本。

bunmaska.config.ts

import { defineConfig } from "bunmaska/config";

export default defineConfig({
  // Pin the exact WebKit you tested. Shared across apps. No global switch.
  engine: { webkit: "webkitgtk-6.0-2.52.4-bunmaska1-linux-x64" },
});
引擎解析
从共享商店解析——下载一次,所有固定它的应用都能使用。
按应用版本控制
不同的应用可以并排固定不同的版本。没有全局 开关。
可用性
已签名的安装包今天已内置。源已上线,包含一个 Windows 引擎;托管的 Linux 和稳定通道构建版本是下一步。

三个平台, 没有 chromium 在任何一个上。

三个平台今天都已发布——每个都以纯 bun:ffi 驱动 WebKit。macOS 和 Linux 使用系统引擎;Windows 构建自己的 WinCairo(它不附带 WebKit)——绝不使用 Chromium。目前是 alpha 阶段, 少数 API 因平台而异——我们在 对等页面上精确公布哪些不同。

Windows 稳定通道引擎、Windows ARM64,以及最后几个按平台的差距 记录在 路线图上。

Bunmaska 对比 Electron

同样的形态。 十分之一的重量。

你已经在写的同样的 API,底层替换了两个最沉重的部分—— 浏览器引擎和运行时。

Electron 在十年积累所换来的那些方面依然胜出——Windows-on-ARM、最后约 20% 的 API、按窗口的崩溃隔离,以及庞大的生态系统。我们保留了这些行;完整而诚实的对比在 对比页面上。

开发者体验

三条命令。 无需编译器。

bunmaska init > bunmaska dev > bunmaska build

使用你日常已经在用的同一套工具,创建、运行并打包一个原生桌面应用。

src/main.ts

import { app, BrowserWindow } from "bunmaska";

app.whenReady().then(() => {
  const win = new BrowserWindow({ width: 960, height: 720 });
  win.loadURL("https://example.com");
});

独立可执行文件 无需安装运行时 双击即可启动

一条命令

整个流程就是 bunmaska。

脚手架、开发、打包和引擎管理——一个 CLI,纯 Bun,没有 Xcode 项目,也没有 electron-builder。它永远不会被打包进你的应用里。

终端

# scaffold · develop · ship
bunmaska init my-app     # starter: main + preload + renderer + config
bunmaska dev             # run with hot reload
bunmaska build           # standalone .app / .deb / .exe
bunmaska build --update  # + update.json + .tar.zst, a .sig each

# engine management
bunmaska engine list     # installed engines, side by side
bunmaska engine which    # engine this project resolves to
bunmaska engine install  # id, local dir, or signed URL

# sanity check
bunmaska doctor          # runtime, store, and resolved engine

大多数时候你都在 init > dev > build 中度过。其余部分在你需要的那天就在那里。完整参考见CLI 文档。

权衡取舍

它还是 alpha。 我们不打算假装 不是。

事情会变。有些东西会坏。我们会告诉你哪些坏了。如果到了 2027 年这里还写着 alpha,就开一个标题为 “你还好吗。” 的 issue。

Windows?

处于 beta(x64)——基于从源码构建的 WinCairo WebKit(绝不是 Chromium),在 CI 上与 macOS 和 Linux 一同显示绿色。那里有几个 API 被引擎阻塞(自定义协议、printToPDF、capturePage);托管版 WinCairo 引擎已在 feed 上,稳定版构建和 ARM64 仍在路线图上。功能对等矩阵对每一个格子都如实标注。

可用于生产环境?

它标着 alpha 是有原因的。把它用在你本来就打算重写的那个东西上吧。

为什么不用 Chromium?

因为它已经在你电脑上了,再塞进去第二个正是我们走到今天这一步的原因。

有什么代价?

覆盖 Electron 约 70-80% 的表面,而且我们发布功能对等矩阵,让你在投入之前就能查清楚。

快速发布。谨慎破坏。公开修复。

同样的 API。不要 Chromium。

用一个周末试试。到周一就讨厌它,或者不讨厌。

开始使用 在 GitHub 上加星

来源:Hacker News · bunmaska.org