← 返回信息流
GitHub 热榜GitHub Trending · 周·2 小时前

vercel-labs/native —— 构建原生桌面应用的 Zig 工具包

原标题:vercel-labs/native
Zig6,466 stars+1,003 本周

速览

核心功能包括:基于 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 → 渲染),状态变化唯一且可追踪。

核心功能

  1. 声明式 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>
  1. 双语言核心:逻辑可以用 TypeScript(编译到原生代码)或 Zig 编写。TypeScript 核心便于快速迭代,Zig 核心适合需要极致性能的场景。CLI 提供 native init --template zig-core 快速切换。

  2. 零配置开发循环native init 创建项目,native dev 启动开发服务器,窗口实时热更新,保持状态不变。native dev --core 在 Node 下运行 TypeScript 核心以加速逻辑检查。

  3. 静态验证native check 在毫秒级内验证视图与 Model/Msg 的绑定、迭代器、消息标签等,错误信息精确到文件:行:列。

  4. 内置组件库:按钮、标签、输入框、对话框、图表、虚拟列表等,使用设计令牌(颜色、圆角、排版)统一管理,支持主题切换。

  5. 自动化与 AI 集成:每个应用内置自动化服务器,可被 AI Agent 读取无障碍快照、驱动控件、断言状态、截图。native automate record/replay 支持会话录制与回放,帧级对比。

  6. 跨平台: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 表达的用户

上手步骤

  1. 安装 CLI:npm install -g @native-sdk/cli
  2. 创建项目:native init my_app
  3. 进入目录:cd my_app
  4. 运行开发模式:native dev —— 立即弹出一个原生窗口,显示一个计数器应用。
  5. 编辑 src/app.native 修改 UI,编辑 src/core.ts 修改逻辑,窗口自动热更新。
  6. 运行 native check 验证所有视图与状态的绑定正确性。
  7. 构建发布版本:native build 产生优化后的单二进制文件。

更详细的指南在 native-sdk.dev/quick-start,涵盖组件库、数据流、测试、打包等完整文档。

查看原文 →github.com