Skip to content

Ratatui 是一个 Rust 终端 UI 框架,Codex 使用它构建基于即时模式渲染的交互式终端界面。

为什么需要 Ratatui

Codex 需要一个终端 UI 框架来构建交互式界面——显示对话历史、流式输出、代码差异、审批对话框等。Ratatui 基于 crossterm 后端,支持跨平台终端渲染,采用即时模式(每帧完全重绘)设计,适合事件驱动的应用架构。Codex 在 Ratatui 基础上构建了 70+ 个自定义模块。

核心原理

  1. 即时模式渲染:每帧完全重绘界面,不保留 UI 状态树,简化了状态管理
  2. crossterm 后端:跨平台终端抽象,统一处理键盘/鼠标/resize 事件
  3. 组件化架构:Codex 的 App struct 管理多个 UI 组件(ChatWidgetDiffRender 等),每个组件负责自己的渲染
  4. 异步集成:Ratatui 的渲染循环与 tokio 异步运行时集成,代理事件通过 channel 驱动 UI 更新

在源码中的实现

  • codex-rs/tui/src/lib.rs(~3000 行)— TUI 入口,run_main() 初始化 Ratatui 终端
  • codex-rs/tui/src/app.rsApp struct,中央状态机和渲染协调器
  • codex-rs/tui/src/render/ — 主渲染模块,协调各子组件的绘制
  • codex-rs/tui/src/chatwidget/ — 主聊天 UI 组件

相关概念