tuika 0.6.0
Released 2026-07-25. crates.io · docs.rs · GitHub release
Released alongside tuika-codeformatters 0.3.1 and tuika-mermaid 0.1.1,
which update their tuika dependency requirement for 0.6 compatibility.
Highlights
Split-footer terminal mode. Hosts can keep a live footer pinned to the bottom of the terminal while completed content moves into native scrollback, then return every reserved row cleanly on exit.
Borrowed scene roots. ScopedScene renders and dispatches events through a
borrowed View, so hosts can keep application state outside the scene without
requiring 'static ownership.
Added
- Borrowed scene roots.
ScopedScene<'_, V>borrows a concreteViewfor one frame while owning the same orderedSceneOverlay/Dialogstack asScene. Hosts can paint large live models directly without cloning them into a'staticElement; rendering, backdrop, placement, and focus-owner semantics are shared with owned scenes. - Screen modes.
ScreenModepicks which part of the terminal a frame owns:Alternate(the previous, still-default behavior) orsplit_footer(rows), which reserves rows at the bottom of the main screen and leaves everything above as the terminal’s own scrollback — the shell prompt, the wheel, mouse selection, and the output the app publishes, which survives its exit.RunnerConfig::screen_modedrives both runners; a host with its own loop composesTerminalSession::enter_with,screen::pin_footer, andscreen::close_footer. - Publishing above a footer.
Runner::scrollback()/AsyncRunner::scrollback()return a cloneable,Send + SyncScrollbackqueue of views the loop commits above the footer;screen::publish_blockcommits one view straight from a host’s own loop, with noSendbound. - New
split_footerexample, andcargo run --example codex -- --split-footerruns the whole coding-agent UI in the mode. - New
scrolling-regionsfeature. It is a compatibility mirror of ratatui’s (Cargo unifies features one way, andHyperlinkBackendmust still implementBackend), not an optimization: rows scrolled out of a DECSTBM region are discarded by the terminal instead of entering its scrollback.
Changed
-
Breaking:
RunnerConfiggains ascreen_modefield. Struct literals need a default update:Before:
RunnerConfig { tick_rate }After:
RunnerConfig { tick_rate, ..RunnerConfig::default() } -
ScreenModeandScrollbackjoin the crate root and the prelude.