tui-splitflap
A Ratatui widget for rendering retro split-flap display boards in the terminal.
Animated character tiles that cycle through an ordered character set, just like the mechanical departure boards at airports and train stations.

Features
- Three animation styles — Sequential (character roll), Mechanical (split-block), and Combined
- Staggered flips — configurable delay between adjacent cells for a wave effect
- Multi-row boards — display multiple lines of text
- Mid-flip interrupts — new messages resolve cleanly from the current animation state
- Theming — customizable colors for text, tile background, borders, and split animation
- Block integration — wrap the board in a ratatui
Blockfor titled borders
Installation
Usage
use ;
let mut state = new
.with_flip_style
.with_flip_speed_ms
.with_stagger_ms;
state.set_message;
In your event loop, call state.tick(delta_ms) (returns true while animating) and render with
frame.render_stateful_widget(FlapBoard::new(), area, &mut state).
Animation Styles
| Style | Description |
|---|---|
Sequential |
Cycles through each intermediate character. Duration scales with distance. |
Mechanical { frames } |
Fixed split-block animation. Constant duration regardless of distance. |
Combined { frames } |
Mechanical phase first, then sequential roll to landing. |
Examples
Interactive demo
Keys: [space] next message · [m] mode · [s] speed · [t] theme · [r] reset · [q] quit
Widget pantry
Browse widget variants in the tui-pantry isolation viewer:
Or without cargo-pantry installed:
License
Dual licensed under MIT or Apache 2.0.
Contributing
Contributions are welcome. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work by you shall be dual licensed as above, without any additional terms or conditions.