Exact是跨平台应用运行时:用Contract描述界面,逻辑用TypeScript或Rust;Web渲染真实DOM,macOS/iOS/Linux分别走AppKit/UIKit/GPU画家;无WebView与JS桥。统一plan与测试,AI代理可跨端构建、运行、查看并验证。
适用人群:独立开发者与小团队,需一套代码同时覆盖桌面与移动;构建或集成AI编码代理的团队;追求原生质感与性能的全栈工程师。
适用场景:需要Web+macOS+iOS+Linux同步交付的应用;让Agent自动生成UI并在多端验证的项目;对启动速度与系统控件一致性有要求的生产力工具与轻度业务应用。
推荐理由:它用Contract统一界面契约,Rust布局内核与系统原生绘制,避免WebView套壳与JS桥。Agent脚本与app.test.contract让三端验收一致,离线构建与小运行时提升迭代速度,值得纳入工具箱。
项目定位与背景
Exact是一套跨平台应用运行时,目标是写一次应用,便在Web、macOS、iOS与Linux上原生运行。它强调“可被AI代理构建、运行、查看与测试”的端到端闭环,面向移动与桌面的多平台交付,也顺应了AI编程时代对可验证性与自动化的需求。
核心功能与技术架构
应用界面用Contract这种小型声明式语言描述,编译器把界面生成紧凑plan。Web侧,plan变为一个ES模块,在约20KB的运行时上驱动真实DOM;桌面与移动端由Rust runner执行同一plan,Rust布局内核按照CSS规则计算布局,并分别交给AppKit、UIKit或GPU画家绘制。界面不使用WebView,也没有JavaScript桥,界面层不运行应用JavaScript。业务逻辑可用TypeScript或Rust实现,分别对接不同宿主的运行环境。
创新点与亮点
项目把“界面契约”与“平台渲染”解耦:一份Contract与plan在多端保持一致语义,既能在浏览器利用原生DOM与CSS,又能在Apple与Linux平台使用系统控件与绘制栈,带来真正的原生观感。Agent能力被纳入主线:README提供了与Claude Code协作的提示语与脚本,agent.mjs可驱动构建、运行与测试,并要求通过app.test.contract在Web、macOS与iOS模拟器上验证。项目提供模板与示例(Softwear商店)展示同一屏在三端的效果与控件差异。离线构建通过固定并校验宿主/iOS包来保证可重复性。
与同类项目对比
Flutter自绘统一引擎,观感一致性高,但不是各平台系统原生;React Native与Expo在移动端成熟,通常依赖桥接,Web与桌面仍以WebView或附加方案覆盖。Tauri在桌面侧以Rust与Web技术组合有优势,移动侧生态与系统控件融合仍在演进。Exact的差异化在于用Contract作为统一契约、以Rust布局内核复用CSS语义、并在桌面与移动端直接调用系统绘制工具,同时内置面向Agent的驱动与跨端测试,减少UI在多端的验证成本。
上手指南或快速开始
在macOS上准备Xcode、Rust、Bun与Chrome。克隆仓库后先运行bun scripts/exact.mjs setup以拉取与校验所需的宿主/iOS包。用exact new创建新应用,按README接入开发流程。实现界面时把视图写在Contract里,业务数据与逻辑放在app.ts或Rust模块。为关键交互编写app.test.contract,然后通过scripts/agent.mjs在Web、macOS与iOS模拟器上运行并验证。README给出的示例提示语可直接交给编码代理执行,首次构建耗时约几十分钟,后续增量构建明显更快,普通构建可离线完成。可从exact-templates中的Softwear示例学习跨端布局与控件用法。
总结与展望
Exact用Contract与plan把“写一次”落在可执行的工程细节上,同时把AI代理作为一等公民,提升跨端交付的可控性与验证效率。优势在于真正的系统原生渲染、小体积运行时、面向Agent的自动化与跨端测试,以及离线可重复构建。挑战在于需要掌握Contract语法与布局语义,且macOS与iOS的首次构建与签名配置对新手有一定门槛。若团队需要在Web与桌面/移动端一致交付并拥抱Agent协作,Exact值得尝试。未来随着更多模板与组件库、更完善的测试工具链与更广的Linux后端支持,它的适用面会进一步扩展。
项目信息
| 项目名称 | expo/exact |
| 编程语言 | Rust |
| Star 数 | 2358 |
| Fork 数 | 50 |
| 主题标签 | ai-agents, appkit, coding-agents, cross-platform, css, ios, linux, macos, native-apps, rust, swift, uikit, web |