zero-native
用 Zig 构建 Web 原生桌面应用,极小包体积、快速冷启动
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 Zig 构建 Web 原生桌面应用,极小包体积、快速冷启动
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你和团队花了两周开发了一款内部工具——数据看板、API 调试器、或者文档管理客户端。功能已经完美,但交付时发现需要用户安装一个 300MB 的 Electron 包,里面 95% 是他们根本不需要的浏览器运行时。这是桌面应用开发中一个经典困境:要么选择笨重的 Electron,要么选择学习曲线陡峭的 Qt/WPF。
zero-native 带来了第三种思路——用 Zig 构建原生壳,用你熟悉的 Web 技术构建界面,最终产出一个几 MB 的可执行文件,没有臃肿的运行时。
zero-native 由 Vercel Labs 开发维护,是该公司首次在生产项目中大规模采用 Zig 语言。Zig 以「无隐藏控制流、无隐式堆分配、交叉编译简单」著称,编译出的二进制体积极小、性能极高。Vercel 此前在基础设施领域积累了大量 Rust 经验,而 zero-native 选择了 Zig,是因为 Zig 与 C 的互操作天然无缝——访问 macOS WKWebView、Windows WebView2、Linux WebKitGTK 这些系统 WebView SDK 时,几乎不需要任何 FFI 胶水代码。
项目的核心设计哲学是:让 Web 前端工程师用自己熟悉的技术栈,构建真正的原生桌面应用。与 Tauri(Rust)相比,Zig 的编译速度通常快数倍;与 Electron(Node.js/Chromium)相比,最终二进制体积小 50-100 倍,内存占用也更低。
zero-native 支持两种渲染模式,开发者可以根据产品需求自由选择:
模式一:系统 WebView(默认)
macOS 使用 WKWebView、Windows 使用 WebView2、Linux 使用 WebKitGTK。系统 WebView 已经随操作系统预装,无需分发任何浏览器二进制文件。因此,zero-native 构建出的应用 macOS 上通常只有 5-10MB,Linux 上甚至更小。启动速度极快,因为不需要等待 Chromium 进程初始化。这种模式非常适合:内部工具、长期运行的辅助应用、对安装包体积敏感的消费级应用。
模式二:Chromium via CEF
如果产品需要跨平台一致的渲染效果,或者依赖最新的 Web API(如 WebGPU、精密计时器 API),可以选择捆绑 Chromium。这类似于 Electron 的方式,但仍然比 Electron 轻量得多,因为 zero-native 的原生层代码量极小。
zero-native 的架构分为四层:
1. App 层(Zig)
App 是项目的核心 Zig 对象,描述应用程序的元数据:名称、版本、WebView 来源、生命周期的 hooks、以及可选的原生服务扩展点。App 定义了应用的安全策略——哪些域名可以导航、哪些 bridge 命令可以调用、哪些系统能力可以被访问。
2. Runtime 层(Zig)
Runtime 负责管理事件循环、窗口生命周期、bridge 消息分发、自动化测试钩子、性能追踪和平台服务。这一层是 zero-native 的引擎核心,跨平台统一抽象了各操作系统的窗口管理。
3. WebViewSource 层
WebViewSource 告诉 Runtime 需要加载什么内容:可以是内联 HTML、远程 URL,或者打包在应用内的前端资源(通过本地 HTTP 服务器从 app:// 起源提供服务)。打包模式允许应用完全离线运行,不需要网络连接。
4. Bridge 层
window.zero.invoke() 是 JavaScript 到 Zig 的桥接通道。所有调用都是大小受限、来源校验、权限校验、路由到已注册的 handler。这意味着 Web 层无法任意调用原生能力——安全性是显式声明的,默认拒绝。
npm 全局安装 zero-native 后,开发者可以使用一系列命令快速初始化项目:
npm install -g zero-native
zero-native init my_app --frontend next # 支持 next/vite/react/svelte/vue
cd my_app
zig build run
首次运行会自动安装前端依赖、编译 Zig 原生壳、打开桌面窗口。CLI 还提供了 doctor(环境检查)、validate(app.zon 清单校验)、package(打包分发)、automate(自动化测试)、以及内置的 AI Agent skills 能力。
项目的所有行为配置集中在 app.zon(Zig Object Notation)清单文件中,所有安全边界一目了然——不需要在代码中埋各种 if 判断。
zero-native 目前处于 pre-release 阶段,存在以下局限:
生态系统尚不成熟:Zig 的包管理器相比 npm 生态还很不完善,部分第三方库可能需要手动编译集成。
平台支持进度不一:macOS 11+ 支持最完善,Windows 和 Linux 相对稳定,移动端(iOS/Android)的 WebView 集成仍在积极开发中。
社区资源较少:相比 Tauri(有大量插件和社区模板),zero-native 处于早期,采用前需要评估维护活跃度和长期维护承诺。
调试体验有待提升:目前调试主要依赖日志输出和 zero-native automate 命令,可视化调试工具链尚未成熟。
zero-native 代表了一个重要趋势:用现代系统编程语言重塑桌面应用开发。Tauri(Rust)、NeutralinoJS(JS)、Xava(Java)、再到 zero-native(Zig),开发者越来越倾向于选择更轻量的技术栈,而非 Electron 式的「打包整个浏览器」方案。
对于 AI 工具开发者而言,zero-native 还提供了内置的 AI Agent Skills 机制——开发者可以通过 zero-native skills list 查看内置的 AI Agent 技能,也可以为自己的应用定义专属的 agent 行为模式。这意味着 zero-native 不仅仅是一个桌面应用框架,还预置了让 LLM 能够调用桌面应用能力的协议层。