Rust · Ratatui · product-neutral UI
Build terminal software that feels finished.
TermRock pairs terminal-native components with focus, interaction, adaptive layout, and deterministic previews—so your application can stay focused on its domain.
Flagship task storyAgent Workbench
Static terminal poster. Choose Run live to start the Rust demo.
Understand
A UI capability layer, not an application framework.
TermRock owns the reusable terminal mechanics. You keep the decisions that make your product yours.
TermRock owns
- Rendering, hit geometry, and narrow-terminal contraction
- Focus, keyboard, pointer, and overlay interaction contracts
- Semantic roles, density, Unicode, and non-color cues
Your application owns
- Domain state, language, permissions, and process policy
- Async effects, persistence, networking, and secrets
- Projection into components and handling typed outcomes
Install
Add the crate from Git.
TermRock is pre-stable research software. Evaluate the current line, then pin the exact revision your team reviewed.
cargo add termrock --git https://github.com/tailrocks/termrock.git --rev 5283c2acf9154d0cfcd37b1ffe821c00faf90ea2Pin the reviewed revision before sharing your application.
Implement
Choose the smallest capable primitive.
- 01 Project domain data into stable component IDs.
- 02 Keep component state beside the owning screen.
- 03 Translate typed outcomes into application effects.
Component families
Browse by the terminal job, then inspect one canonical public identity.
- ActionsDirect activation controls and compact command surfaces.See Action Bar →
- InputsEditable values, forms, validation, and selection controls.See Chip →
- NavigationSelection, wayfinding, disclosure, and collection movement.See Accordion →
- OverlaysLayered, modal, anchored, and transient surfaces.See Alert Dialog →
- LayoutSpatial structure, framing, and text hierarchy.See Accent Rail →
- FeedbackStatus, progress, errors, and operator-facing outcomes.See Activity Indicator →
- DataStructured, streaming, and inspectable terminal data.See Code Block →
- VisualizationMeasures, series, timelines, and compact quantitative views.See Bar Series →
- ContentSemantic text, media, identity, and product-neutral fragments.See Ansi Text →
Customize
Change the system, not every widget.
Semantic roles, density, glyph capability, motion, and contrast flow through one design system. Components consume the result consistently.
use termrock::style::{Density, DesignSystem};
let system = DesignSystem::phosphor()
.density(Density::Compact)
.ascii();Customize themes and capabilities →Advanced
Compose screens without surrendering ownership.
Application patterns prove how public components fit together. They remain recipes: your application still owns data and effects.