Zylix — 基于 Zig 的 UI 框架,适用于 7 个平台
Source: Dev.to

Introduction
“我们能只用 Zig 构建所有东西吗?”
正是这个简单的问题启动了 Zylix。
Zylix 是一个围绕 Zig 构建的跨平台 UI 框架。通过单一代码库,你可以为以下平台构建原生应用:
- Web (WASM)
- iOS
- Android
- macOS
- Linux
- Windows
受支持的目标现在总计 7 个。
我们刚刚发布了 v0.19.0,标志着概念验证阶段的结束。项目仍然年轻,但我想分享其背后的理念和设计。
名称
如果你是 Delphi 的老用户,Zylix 这个名字可能会让你感到熟悉。
是的——它的灵感来源于 Kylix,Borland 在 2000 年代初期尝试将 Delphi 带到 Linux 上的项目。Kylix 没能持久,但“一种语言,多平台”的理念仍然非常有吸引力。
Zylix 是一次使用 Zig 重新唤起这种精神的现代尝试。
Zig + Kylix = Zylix.
为什么选择 Zig?
跨平台开发已经有很多选项。每种都有权衡:
| 框架 | 权衡 |
|---|---|
| Flutter | 自定义 Skia 渲染 → 原生感受较弱 |
| React Native | JS 桥接 → 性能开销 |
| Electron | Chromium 包 → 二进制体积庞大 |
| Tauri | WebView → 原生集成受限 |
Zig 看起来是一种有前景的方式来突破这些限制:
- 零成本抽象 – 无运行时开销
- 可预测的性能 – 无垃圾回收,确定性内存管理
- 跨编译就绪 – 一个工具链支持所有目标平台
- 完整的 C ABI 兼容性 – 易于与 Swift/Kotlin/C# 集成
- 编译时安全 – 空指针安全,边界检查
Zylix 方法
核心思想很简单:
不要统一 UI。统一意义和决策。
像 Flutter 和 React Native 这样的框架旨在统一 UI 本身。Zylix 保留原生 UI 框架(SwiftUI、Jetpack Compose、GTK4、WinUI 3 等),仅共享 逻辑层。
在 Zig 中共享的内容
- 应用状态
- 业务逻辑
- 数据验证
- 事件处理
保持平台原生的内容
- UI 组件
- 动画
- 操作系统 API
- 原生手势
架构
Zylix uses a Central Brain architecture:
┌──────────────────────────────────────────────┐
│ Your Application │
├──────────┬──────────┬──────────┬─────────────┤
│ SwiftUI │ Compose │ GTK4 │ WinUI 3 │ HTML/JS
├──────────┴──────────┴──────────┴─────────────┤
│ C ABI Layer │
├──────────────────────────────────────────────┤
│ Zylix Core (Zig) │
│ Virtual DOM | State | Events | Diff | ... │
└──────────────────────────────────────────────┘
好处
对用户而言
- 原生外观与手感
- 完整的无障碍支持
- 小体积应用
- 更好的电池续航
对开发者而言
- 单一逻辑来源
- 编译时类型安全
- 使用单一工具链跨平台编译
- 可预测的内存行为
支持的平台
Zylix 目前支持 7 个平台。今天稳定的有:
- Web / WASM
- iOS
- Android
- macOS
- Linux
- Windows
- watchOS
实现示例
跨平台的最小计数器。
Zig core(共享逻辑)
pub const State = struct {
counter: i64 = 0,
};
pub fn increment(state: *State) void {
state.counter += 1;
}
SwiftUI(iOS/macOS)
Text("\(zylixState.counter)")
Button("Increment") {
zylix_dispatch(.increment)
}
Jetpack Compose(Android)
Text("${zylixState.counter}")
Button(onClick = { zylixDispatch(INCREMENT) }) {
Text("Increment")
}
相同的逻辑,完全原生 UI.
项目布局
zylix/
├── core/ # Zig core library
├── platforms/ # Platform implementations
│ ├── android/ # Kotlin / Jetpack Compose
│ ├── ios/ # Swift / SwiftUI
│ ├── linux/ # GTK4
│ ├── macos/ # SwiftUI
│ ├── web/ # WASM
│ └── windows/ # WinUI 3
├── site/ # Docs site
└── examples/ # Sample projects
当前状态与下一步
Zylix v0.19.0 现已超出概念验证阶段。根据 Zenn 文章
(https://zenn.dev/kotsutsumi/articles/bd4607160de5be):
- 支持的目标已增长至 7
- 核心功能实现已完成
- 自动化测试已就绪
- 我现在正处于使用它构建真实应用并验证体验的阶段
这是最关键的阶段:不仅要“它能运行”,更要感受在真实项目中使用它的体验。
欢迎贡献
Zylix 是开源的(Apache License 2.0)。欢迎所有贡献:
- 🐛 Bug 报告
- 💡 功能想法
- 📝 文档改进
- 🔧 拉取请求
GitHub:
Docs:
如果你对 Zig 感兴趣,或想要一种跨平台原生应用的新方法,欢迎来看看。
结束
“在 Zig 中做所有事”听起来可能很鲁莽,但我想看看有什么可能。
我们能在不失去原生用户体验的情况下共享逻辑吗?
我们能保持性能并仍然面向多个平台吗?
— Kazuhiro Kotsutsumi
tforms?
Zylix 仍处于早期阶段,但如果这与你产生共鸣,我很愿意一起构建它。
感谢阅读。
