上周聊完 Bun 创始人 Jarred Sumner 在分支上偷偷做"Zig 转 Rust"AI 翻译实验,前端圈这周接着开新瓜。
5 月 9 日,Vercel 旗下的 vercel-labs 公开放出一个新项目 ZeroNative,作者是 Chris Tate(@ctatedev)。一句话介绍:用 Web UI 加 Zig 构建原生桌面和移动应用。
时间太巧。Bun 这边正在权衡要不要从 Zig 换到 Rust,那边 Vercel 反手把 Zig 摆到了前端工具链下一个位置。两条路线在同一周走出了相反方向,前端这一阵的语言选型,确实有点交错走位的味道。
ZeroNative 是什么
先看几个硬数字:
GitHub 仓库
vercel-labs/zero-native,Apache-2.0 协议发布两天 star 已经 2.5k,12 个 PR,109 个 fork
语言占比里 Zig 占 74.6%,剩下是 Objective-C++、Objective-C、C 这些原生层胶水
当前版本 v0.1.9,README 自己写着 pre-test
安装命令:
npm install -g zero-native文档站 zero-native.dev 已经齐了,Quick Start、Web Engines、App Model、Bridge、Security、Packaging 一套都在
定位很清晰:让你用熟悉的前端框架写 UI,底层跑在 Zig 写的 native runtime 上,最终打包成桌面和移动应用。
支持的前端:Next.js、Vue、Svelte、Vite、React。支持的桌面:macOS、Linux、Windows。支持的移动:iOS、Android(通过 C ABI 库集成)。可选的 WebView 引擎:WKWebView、WebKitGTK、WebView2,或者打包 Chromium / CEF。
从这套配置看得出来,它对标的不是 Electron,而是 Tauri。
它落在 Tauri 旁边,但选了另一条路
桌面加 Web UI 这套方案,目前主流就两条路:
Electron:Node.js 加 Chromium 全家桶。生态熟,VS Code、Discord、Slack 都在用。代价是体积大、内存高。
Tauri:Rust 写的壳加系统 WebView。包体积小,启动快,安全模型干净。代价是要懂一点 Rust,移动端支持还在补齐路上。
ZeroNative 走的是第三条:
壳是 Zig 写的
WebView 可选,系统级(轻量)或 Chromium / CEF(一致性渲染)
桌面加移动一起支持,从 day-one 就是跨端思路
简单说,它把自己摆在了 Tauri 的位置上,但选了 Zig 作为壳语言,并且把 iOS、Android 算进了首发支持范围。这一点比 Tauri 的现状激进,Tauri 的移动端到目前为止还在 alpha 阶段。
架构上分三层:
App:Zig 写的小对象,描述应用元数据和生命周期
Runtime:管事件循环、窗口、桥接和平台服务
WebViewSource:负责加载 HTML、URL 或本地资源
配置全部走app.zon清单,声明应用元信息、图标、窗口设置、Web 引擎、安全策略。前端这边通过window.zero.invoke()这个桥访问 native 能力,桥上做了大小限制、来源校验、权限检查。WebView 默认被当作不可信源处理,原生命令是显式 opt-in 的,这套安全模型抄的是现代沙箱思路,和 Tauri 的 IPC 设计在一个心智模型里。
为什么是 Zig,不是 Rust
这是这次最值得问的一个问题。
Vercel 一直是 Rust 的深度用户。Turbopack 是 Rust 写的,Turborepo 是 Rust 写的,SWC 是 Rust 写的。按这条惯性,ZeroNative 用 Rust 才是直觉之选。
但他们没选。
从 README 和 README 里强调的几个卖点看,挑 Zig 的理由集中在几个方向:
二进制小,内存占用低。Zig 在产物体积上的控制非常激进,对桌面加移动这种讲究启动速度和包体积的场景,适配性比 Rust 更顺手。
编译快。Zig 原生编译循环短,应用层迭代的体感接近脚本语言。Rust 的编译时间在 Tauri 用户群里是一个长期吐槽点。
C ABI 集成顺滑。要在 iOS、Android、各种系统 WebView 之间穿针引线,C ABI 友好是硬需求。这一块 Zig 几乎是无负担。
不用过 borrow checker。Rust 的安全性是优势,但写胶水代码时,借用检查器经常变成开发节奏的减速带。Zig 这层省掉了,代价是需要开发者自己更小心。
讽刺的是,Bun 的 Jarred Sumner 上周给出"想试试 Rust"的理由,恰好是反过来的。他想要 Rust 的 borrow checker 和析构器,希望编译期能把内存问题堵掉,而不是等用户来开 issue 才发现。
同样的语言特性,在不同项目里被算成了优点和负担。Bun 是一个 JavaScript 运行时,要面对的是上亿次函数调用的内存管理细节,安全性收益巨大。ZeroNative 是一个桌面壳,主要工作是窗口、事件循环、IPC 桥接,借用检查器在这种场景下的收益就低很多,反而拖慢迭代。
这是工程决策最真实的样子。脱离场景谈语言优劣,没意义。
ZeroNative 现在的状态,需要把预期调得平一点:
版本 v0.1.9,README 写着 pre-test
11 个 release,时间跨度不长
vercel-labs 名义下的项目,定位本来就是实验性质,能不能毕业进 Vercel 主线产品线是未知数
文档站已经齐了,但真正大规模生产环境验证还需要时间
Vercel Labs 有过几个不错的项目,也有几个静悄悄归档的项目。ZeroNative 走向哪个结局,要看后面几个月的迭代节奏。
但这次发布本身就够值得讨论一句:Vercel 在 2026 年的当下,公开站队 Zig,做了一个 Zig 桌面框架。这是一个明确的表态。
对前端开发者来说,眼下的实际意义是:跨端 App 选型时桌上多了一张牌。这张牌的卖点是包体积、编译速度、桌面加移动 day-one 支持。短板是 Zig 生态比 Rust 小不少,新项目稳定性需要等。
至于这张牌好不好打,再等几个版本号看。
Bun 想往 Rust 走,Vercel 转头抓住了 Zig,Node.js 在边缘渐进引入 Rust。前端这一阵的剧本,已经不是单线推进了,更像是几条主线同时分头跑。这种局面挺有意思,你的看法呢?欢迎评论区聊聊
https://github.com/vercel-labs/zero-native