参考约 8 分钟
实现状态
GPUIX 各项能力的完成情况:已完成、待办与已知限制。
核心运行时
- 基于 mutation 协议的 React reconciler
- 通过 napi-rs 与 wasm-bindgen 实现的原子化
applyBatch()变更传输 - RetainedTree(Rust 侧元素存储)
- 样式映射(CSS 属性 → GPUI 样式方法)
事件与输入
- 鼠标事件(click、mouseDown、mouseUp、mouseMove、mouseEnter、mouseLeave)
- 外侧点击(
onMouseDownOutside) - 带 delta 与触摸相位的滚轮事件
- 键盘事件(keyDown、keyUp),带焦点管理
- 获得/失去焦点事件,自动创建 FocusHandle
- 原生文本输入与多行 textarea
布局与绘制
- 可滚动容器(
overflow: "scroll"),带持久滚动状态 - 编程式滚动 API(
scrollTo、scrollToItem、scrollIntoView、getScrollOffset) - 虚拟列表(
<virtual-list>) - 原生文本组件(
<code>、<diff>、<markdown>) - 图像与 SVG 元素(
<img>、<svg>),以及<img>ref 上的setImage/setImagePixels - 原生
hover与active样式 - 原生
motion.div过渡,带确定性帧捕获 motion.div的AnimatePresence退场过渡- Canvas 元素
文本能力
- 跨元素文本选区
- 文本高亮与搜索(
highlight、useTextSearch) - 无样式 Select、Combobox 与 Tooltip
窗口
- 窗口标题(
setWindowTitle) - 原生窗口控制(
minimizeWindow、zoomWindow、toggleFullscreen) - 窗口装饰(
titlebarTransparent、windowBackground、红绿灯位置) - 带标准快捷键的 macOS 菜单栏(
appName) - 后台启动(
focus、show、activateWindow) - 最后一个窗口关闭时退出进程
- 运行时错误保持 macOS 窗口存活并显示堆栈浮层
- 调试边框浮层(
debugFrameOverlay/setDebugFrameOverlay) - 应用声明的菜单与菜单回调
- 多窗口
开发体验
- 带截图的 GPU 支撑测试渲染器
- 独立构建(锁定 GPUI 平台依赖)
bun --hot下的 JS 重挂载(render()保留原生窗口)- 原生
.node插件的热重载。bun run dev会重新编译并重启。原生模块无法卸载。 bun --hot期间的 React Refresh(需要 Bun 运行时转换)
已知限制
| 限制 | 说明 |
|---|---|
| 没有嵌套滚动 | 只允许一个父元素滚动,见滚动 |
Linux 忽略 focus |
窗口仍会以聚焦状态打开,见后台启动 |
| 浏览器渲染器无窗口控制 | minimizeWindow 等在浏览器中不可用 |
| 浏览器渲染器无 AccessKit | 无障碍 props 在 wasm 构建中是空操作,见无障碍 |
| Linux 测试渲染器 | 暂不支持,等待 GPUI 的 wgpu 无头渲染器,见测试 |
颜色文法是 csscolorparser 0.8.3 |
hsv() / hsva() / hwba() 是解析器扩展而非 CSS Color 4 标准函数;不支持径向、锥形与重复渐变,也不支持超过两个色标的渐变,见支持的样式 |
文档
详细的架构、通信流程与贡献指南见 AGENTS.md。