vercel-labs/native —— 构建原生桌面应用的 Zig 工具包
速览
核心功能包括:基于 Zig 的底层 API 封装、无需额外运行时即可编译为原生可执行文件、支持常见 UI 组件和系统交互。适合需要极小体积、极快启动速度的桌面工具或轻量级应用场景,如系统监控、开发者工具等。
AI 深度解读
这是什么
Native SDK 是 Vercel Labs 开源的一个桌面应用开发工具包,主语言为 Zig,GitHub 上已有 6466 颗星。它提供了一套完整的工具链,用于构建原生桌面应用程序:开发者用声明式 .native 标记文件描述 UI,用 TypeScript 或 Zig 编写业务逻辑,最终编译成不依赖浏览器或 WebView 的单一原生二进制文件。Native SDK 自己拥有渲染引擎,直接将每个像素绘制到真实的 OS 窗口中,运行时只包含 Zig 编译后的代码,没有 JS 运行时。
解决的问题
传统桌面应用开发面临两难:要么使用 Web 技术(Electron、Tauri 等)获得快速迭代和丰富 UI 表达,但需承载庞大的运行时(浏览器引擎或 WebView),导致内存占用大、启动慢;要么使用原生技术(C++/Qt、Swift/AppKit 等)获得高性能,但开发效率低、UI 表达受限。Native SDK 希望打破这种取舍——保留 Web 般声明式、响应式的 UI 编写方式,同时用 Zig 编译到原生代码,彻底移除运行时开销。具体来说:
- 消除 WebView 和 JS 二进制体积:最终二进制仅几 MB,无解释器或解析器。
- 保持原生性能:滚动、菜单、对话框、输入法等直接使用操作系统原生组件,渲染引擎自己绘制,无额外抽象层。
- 简化构建配置:一个
app.zon+src/目录即可运行,无需 Webpack、Babel 等配置。 - 状态管理可预测:采用 Elm 架构(Model → Msg → update → 渲染),状态变化唯一且可追踪。
核心功能
- 声明式 UI 标记:使用
.native文件编写视图,支持 flex 布局、绑定、事件分发。例如:
<row gap="8" main="center" cross="center" grow="1">
<button variant="secondary" on-press="decrement">-</button>
<text>{count}</text>
<button variant="primary" on-press="increment">+</button>
</row>
-
双语言核心:逻辑可以用 TypeScript(编译到原生代码)或 Zig 编写。TypeScript 核心便于快速迭代,Zig 核心适合需要极致性能的场景。CLI 提供
native init --template zig-core快速切换。 -
零配置开发循环:
native init创建项目,native dev启动开发服务器,窗口实时热更新,保持状态不变。native dev --core在 Node 下运行 TypeScript 核心以加速逻辑检查。 -
静态验证:
native check在毫秒级内验证视图与 Model/Msg 的绑定、迭代器、消息标签等,错误信息精确到文件:行:列。 -
内置组件库:按钮、标签、输入框、对话框、图表、虚拟列表等,使用设计令牌(颜色、圆角、排版)统一管理,支持主题切换。
-
自动化与 AI 集成:每个应用内置自动化服务器,可被 AI Agent 读取无障碍快照、驱动控件、断言状态、截图。
native automate record/replay支持会话录制与回放,帧级对比。 -
跨平台:macOS 为主开发平台(Metal 渲染、原生滚动、菜单、托盘);Linux 软件渲染并支持 IME、HiDPI;Windows 通过 Win32 宿主支持 IME 并在 CI 中测试;iOS 和 Android 为实验性嵌入支持。
亮点 / 与同类相比
| 对比维度 | Native SDK | Electron | Tauri | Qt | |----------|------------|----------|-------|----| | 运行时体积 | 几 MB 单二进制,无浏览器/WebView | 含 Chromium,≥100MB | 含 WebView(系统自带) | 依赖 Qt 库,体积较大 | | 渲染方式 | 自研引擎,直接绘制到 OS 窗口 | Web 渲染(Chromium) | 系统 WebView | 自研引擎(QPainter) | | 开发语言 | 声明式标记 + TypeScript/Zig | HTML/CSS/JS/TS | Rust 后端 + 前端框架 | C++/QML | | 状态管理 | 强制 Elm 架构,纯函数更新 | 自由(Redux、MobX 等) | 自由 | 自由(QML 绑定) | | 原生能力 | 直接调用 OS API(通知、剪贴板、对话框等) | 通过 IPC 调用 Node 模块 | 通过 Rust 后端 | 原生 C++ API | | 热更新 | 原生窗口热更新,保持状态 | 浏览器刷新或 Webpack HMR | WebView 热更新 | 不支持 | | 静态验证 | 内置 check 命令,毫秒级验证绑定 | 需额外工具(TypeScript 检查) | 需 Rust 编译检查 | 编译时检查 | | AI 自动化 | 原生内置自动化服务器,支持 Agent 驱动 | 第三方工具(Playwright 等) | 需额外集成 | 有限支持 |
核心差异:Native SDK 在“原生性能”和“声明式表达”之间找到了一个独特的平衡点——它不像 Electron 那样牺牲性能换取开发效率,也不像 Qt 那样需要学习复杂 C++ 或 QML,而是用 TypeScript(或 Zig)编写纯逻辑,用标记语言描述 UI,最终编译成无运行时的原生二进制。此外,它内置的自动化服务器和 AI 集成能力是其他方案不具备的,特别适合未来 AI Agent 驱动的桌面自动化场景。
适合谁用 / 上手
适合人群:
- 希望用 TypeScript 或 Zig 构建高性能桌面应用的全栈开发者
- 需要快速原型但又要求最终产品原生性能的团队
- 追求确定性状态管理和低体积二进制输出的项目
- 需要 AI Agent 可操控的自动化桌面工具(如测试、RPA)
- 对 Electron 臃肿体积不满,但又不愿放弃声明式 UI 表达的用户
上手步骤:
- 安装 CLI:
npm install -g @native-sdk/cli - 创建项目:
native init my_app - 进入目录:
cd my_app - 运行开发模式:
native dev—— 立即弹出一个原生窗口,显示一个计数器应用。 - 编辑
src/app.native修改 UI,编辑src/core.ts修改逻辑,窗口自动热更新。 - 运行
native check验证所有视图与状态的绑定正确性。 - 构建发布版本:
native build产生优化后的单二进制文件。
更详细的指南在 native-sdk.dev/quick-start,涵盖组件库、数据流、测试、打包等完整文档。
