Bun 团队于 2026 年 4 月 9 日发布了 v1.3.12 版本。本次更新不仅引入了 原生浏览器自动化 API 和 终端 Markdown 渲染 两大新特性,还在运行时稳定性、Node.js 兼容性及性能方面带来了大量实质性的改进。
以下是本次更新的关键亮点解读。
1. Bun.WebView:原生头端浏览器自动化
Bun v1.3.12 在运行时中直接内置了原生头端浏览器自动化能力,通过统一的 API 支持两种后端:
- WebKit (macOS 默认):使用系统 WKWebView,零外部依赖。
- Chrome (跨平台):通过 Chrome DevTools Protocol (CDP) 控制 Chrome/Chromium,可自动检测已安装的浏览器或指定路径。
所有输入事件均以操作系统级事件派发,网站无法区分 view.click() 与真实鼠标点击(isTrusted: true)。选择器方法会自动等待元素可操作性(挂载、可见、稳定、不被遮挡),风格类似 Playwright。
await using view = new Bun.WebView({ width: 800, height: 600 });
await view.navigate("https://bun.sh");
await view.click("a[href='/docs']"); // 等待可操作,原生点击
await view.scroll(0, 400); // 原生滚轮事件,isTrusted: true
const title = await view.evaluate("document.title");
const png = await view.screenshot({ format: "jpeg", quality: 90 });
await Bun.write("page.jpg", png);
Bun.WebView 继承自 EventTarget,支持页面导航、截图、键盘输入、CDP 原始调用等丰富方法。值得一提的是,每个 Bun 进程共享一个浏览器子进程,后续创建 new Bun.WebView() 仅会在同一实例中打开新标签页。
2. 终端即文档:bun ./file.md 与 Bun.markdown.ansi()
现在你可以直接在终端中渲染 Markdown 文件了。运行 bun ./file.md 时,Bun 会读取文件并将其输出为格式精美的 ANSI 文本,且没有 JavaScript VM 启动开销。
此外,新增的 Bun.markdown.ansi() API 允许程序化地将 Markdown 转换为 ANSI 字符串,支持以下选项:
colors: false:纯文本模式,不含转义码。hyperlinks: true:启用可点击的超链接。columns: 60:自定义折行宽度。kittyGraphics: true:通过 Kitty Graphics Protocol 内联显示图片(支持 Kitty、WezTerm、Ghostty)。
3. 进程内 Bun.cron() 调度器
此前 Bun 已支持注册操作系统级别的 Cron 任务(crontab/launchd/Task Scheduler)。v1.3.12 新增了进程内回调重载,适用于长期运行的服务器或容器,让调度任务能够直接共享应用状态(如数据库连接池、缓存等)。
// 每分钟执行一次,且不会重叠运行(等待上一次 Promise 完成)
Bun.cron("* * * * *", async () => {
await doPeriodicWork();
});
// 使用 disposable 风格自动停止
{
using job = Bun.cron("0 * * * *", () => console.log("每小时整点"));
}
关键行为:
- UTC 时间:
0 9 * * *表示 9:00 UTC,与系统时区无关。 - 错误处理:同步抛错触发
uncaughtException,Promise 拒绝触发unhandledRejection。 - --hot 安全:编辑模块后,所有进程内 cron 任务会自动清除并重载。
- 生命周期控制:支持
.ref()(保持进程存活,默认)和.unref()(允许进程自然退出)。
4. UDP Socket 增强:ICMP 错误与截断检测
Bun.udpSocket() 得到两项重要改进,更贴近 libuv/Node.js 行为:
- ICMP 错误不再静默关闭 Socket:发送到不可达端口的 UDP 数据包会触发
error回调(错误码如ECONNREFUSED),但 Socket 保持打开状态,避免影响后续发送。 - 可检测数据报截断:当接收的数据报大于接收缓冲区时,
data回调的第五个参数flags会包含truncated: true,让你能识别被截断的负载。
5. Unix Domain Socket 生命周期匹配 Node.js
Bun 修正了两处与 Node.js/libuv 语义不一致的行为:
| 场景 | Node.js / libuv | Bun (之前) | Bun (v1.3.12) |
|---|---|---|---|
| 绑定时文件已存在 | EADDRINUSE | 静默 unlink 并继续绑定 | 抛出 EADDRINUSE |
close() 后 Socket 文件 | 自动删除 | 遗留磁盘文件 | 自动清理 |
这意味着调用 Bun.listen({ unix: "/tmp/my.sock" }) 不会再意外窃取其他进程的活跃 Socket,并且监听器停止后会自动删除 .sock 文件,避免泄漏。
6. JavaScriptCore 引擎升级:显式资源管理 + 性能优化
Bun 的底层 JS 引擎(WebKit JavaScriptCore)同步了上游超过 1,650 个提交,带来多项语言特性与性能提升:
- 显式资源管理:正式支持
using和await using声明,自动管理资源释放。 - JIT 改进:
Array.isArray变为 JIT 固有函数;String.prototype.includes单字符快速路径;Promise 反应与微任务队列微优化。 - WebAssembly:SIMD shuffle 优化、Memory64 边界检查修复、BBQ/OMG 编译器代码生成改进。
- 内存分配器 (libpas):通过“scavenge 时重标记”提升内存安全性;大页面分配阈值从 64MB 降至 1MB。
7. 性能与兼容性强化
URLPattern 提速 2.3 倍
内部正则匹配直接调用编译后的正则引擎,避免为每个 URL 组件分配临时 JS 对象,单次调用最多减少 24 次 GC 分配。
SIMD 加速 ANSI 处理
Bun.stripANSI、Bun.stringWidth 等函数使用 SIMD 指令集(如一次处理 64 字节),在特定场景下性能提升可达 4 倍到 11 倍,相比 npm 上的 string-width 包快 4–822 倍。
Cgroup 感知的并行度
Bun 在 Linux 上现在会尊重 cgroup 的 CPU 限制(Docker/k8s 环境),而非直接读取物理核心数,大幅改善容器环境中的资源利用率。
HTTPS 代理连接复用
通过代理发送多个 HTTPS 请求时,Bun 会复用同一个 CONNECT 隧道和内部 TLS 会话,避免每次请求都重新握手,显著降低延迟。
TCP_DEFER_ACCEPT(Linux)
Bun.serve() 在 Linux 上设置 TCP_DEFER_ACCEPT(FreeBSD 使用 SO_ACCEPTFILTER "dataready"),将新连接的两次事件循环唤醒(accept + 可读)合并为一次,对短连接场景尤其有利。
8. 大量 Bug 修复
本次更新修复了超过 40 个问题,重点包括:
- Node.js 兼容性:修复了
process.env在特定权限目录下变空、vm.Script内存泄漏、fetch响应体pipeline死锁、dns模块缺失导出、fs.stat高 inode 截断、Error.captureStackTrace异步栈帧丢失等问题。 - Bun 自有 API:修复了运行时修改
HTTP_PROXY无效、事件循环单次最多处理 1024 个 I/O 事件导致高并发延迟、Bun.serve在并发 async handler 下性能骤降、ARM64 架构线程池挂起、Bun.SQLMySQL 适配器内存泄漏、长 Unix Socket 路径失败等。 - Web API:修复了关闭的
MessagePort内存无限增长、AbortController.signal.reasonGC 后变undefined、BroadcastChannel竞态条件、String.raw破坏空字节、Response体重复消费崩溃等。 - 工具链:修复了
bun build --compile在 NixOS 上生成不可移植二进制、Windows 上 tar 绝对路径穿越、bun test --elide-lines在非 TTY 环境下错误退出等问题。
升级与总结
你可以通过以下命令立即升级到 Bun v1.3.12:
bun upgrade
本次更新展现了 Bun 作为一个全能型 JavaScript 运行时的野心:不仅在前端工具链(打包、测试、包管理)上持续深耕,更开始涉足浏览器自动化、系统调度、高级网络协议等传统上需要多语言配合的领域。同时,对 Node.js 兼容性的执着修复和底层引擎的激进优化,使得 Bun 在生产环境中的可靠性又迈上了一个台阶。
对于追求高性能、低依赖、现代化 API 的开发者而言,Bun v1.3.12 绝对值得一试。