Appearance
Ratatui 是一个 Rust 终端 UI 框架,Codex 使用它构建基于即时模式渲染的交互式终端界面。
为什么需要 Ratatui
Codex 需要一个终端 UI 框架来构建交互式界面——显示对话历史、流式输出、代码差异、审批对话框等。Ratatui 基于 crossterm 后端,支持跨平台终端渲染,采用即时模式(每帧完全重绘)设计,适合事件驱动的应用架构。Codex 在 Ratatui 基础上构建了 70+ 个自定义模块。
核心原理
- 即时模式渲染:每帧完全重绘界面,不保留 UI 状态树,简化了状态管理
- crossterm 后端:跨平台终端抽象,统一处理键盘/鼠标/resize 事件
- 组件化架构:Codex 的
Appstruct 管理多个 UI 组件(ChatWidget、DiffRender等),每个组件负责自己的渲染 - 异步集成:Ratatui 的渲染循环与 tokio 异步运行时集成,代理事件通过 channel 驱动 UI 更新
在源码中的实现
codex-rs/tui/src/lib.rs(~3000 行)— TUI 入口,run_main()初始化 Ratatui 终端codex-rs/tui/src/app.rs—Appstruct,中央状态机和渲染协调器codex-rs/tui/src/render/— 主渲染模块,协调各子组件的绘制codex-rs/tui/src/chatwidget/— 主聊天 UI 组件