1.4 KiB
1.4 KiB
type, adr, status, date, supersedes, tags
| type | adr | status | date | supersedes | tags | |||
|---|---|---|---|---|---|---|---|---|
| decision | 001 | accepted | 2026-10-17 |
|
ADR-001: ratatui + crossterm as the TUI foundation
Context
viexp needs a terminal UI with a three-pane Miller layout, an event loop, and later image graphics. The Rust TUI ecosystem has one de-facto standard and several niche options.
Options considered
| Option | Pros | Cons |
|---|---|---|
| ratatui + crossterm | De-facto standard (yazi, felix, broot); 0.30 modular facade; ratatui-image companion; huge docs/community | Immediate-mode model to learn; subcrate churn in 2026 |
| cursive | widget-toolkit feel | slower cadence, different paradigm |
| tui-realm | retained mode on ratatui | extra complexity for one maintainer |
| tui-rs | — | dead upstream |
| hand-rolled on crossterm | total control | reinvents widgets; hunter died with this approach |
Decision
Use ratatui 0.30 (facade) with the crossterm backend. Pin minor versions in Cargo.toml;
adopt the ratatui-org ratatui-image crate when previews arrive (Sprint 6).
Consequences
- Positive: best-documented path; skills transfer to yazi/helix-adjacent tooling; image widget exists.
- Negative: immediate-mode rendering must be learned early (owned by Sprint 2); 0.30 subcrate split may cause dependency churn.
- Mitigations: pin versions; single render function per pane; UI state isolated in one struct.