Expand description
Animated skeleton loading widgets for Ratatui.
Placeholder widgets that pulse, sweep, or shimmer while data loads.
All widgets are stateless — pass elapsed_ms from your event loop and the
animation state is computed purely from the timestamp.
Two orthogonal axes control appearance:
- Animation mode (
AnimationMode) — Breathe, Sweep, Plasma, or Noise - Fill variant (
.braille(bool)) — solid█or braille⣿
§Widgets
SkeletonBlock— Filled rectangle (atomic unit)SkeletonTable— Rows with column separators, ragged cell widths, zebra stripingSkeletonList— Short spaced items with ragged edges (menu/sidebar)SkeletonText— Paragraph simulation with varying line widthsSkeletonStreamingText— Typewriter-style chat text filling over timeSkeletonBarChart— Vertical bars of varying heightSkeletonHBarChart— Horizontal bars of varying lengthSkeletonBrailleBar— Braille progress bars with rounded caps and peak markerSkeletonKvTable— Key-value pairs (properties/detail panel)SkeletonLineChart— Braille line chart with overlapping wave traces
§Example
use tui_skeleton::{SkeletonBlock, AnimationMode, Color};
let elapsed_ms = 1000u64;
// Solid fill with sweep animation
let solid = SkeletonBlock::new(elapsed_ms)
.mode(AnimationMode::Sweep)
.base(Color::Rgb(30, 22, 58))
.highlight(Color::Rgb(49, 40, 78));
// Braille fill with breathe animation
let braille = SkeletonBlock::new(elapsed_ms)
.braille(true)
.base(Color::Rgb(30, 22, 58))
.highlight(Color::Rgb(49, 40, 78));
// TV noise — random braille glyphs changing every frame
let noise = SkeletonBlock::new(elapsed_ms)
.mode(AnimationMode::Noise);§Adaptive Tick Rate
Skeleton animations look best at ~20 FPS (TICK_ANIMATED) but most TUI
applications tick at ~5 FPS (TICK_IDLE) for static content. The
recommended pattern:
- Track whether any skeleton widget is currently visible
- Use
TICK_ANIMATEDwhen skeletons are on screen - Revert to
TICK_IDLEwhen all data has loaded
This keeps CPU usage low while delivering smooth animations during loading.
Re-exports§
pub use bar_chart::SkeletonBarChart;pub use block::SkeletonBlock;pub use braille_bar::SkeletonBrailleBar;pub use hbar_chart::SkeletonHBarChart;pub use kv_table::SkeletonKvTable;pub use line_chart::SkeletonLineChart;pub use list::SkeletonList;pub use streaming_text::SkeletonStreamingText;pub use table::SkeletonTable;pub use text::SkeletonText;
Modules§
- bar_
chart - block
- braille_
bar - defaults
- Default colors that work on both dark and light terminals.
- hbar_
chart - kv_
table - line_
chart - list
- streaming_
text - table
- text
Structs§
- Block
- A widget that renders borders, titles, and padding around other widgets.
Enums§
- Animation
Mode - Animation style for skeleton loading widgets.
- Color
- ANSI Color
- Constraint
- A constraint that defines the size of a layout element.
Constants§
- TICK_
ANIMATED - Recommended tick interval when skeleton widgets are visible (50ms / 20 FPS).
- TICK_
IDLE - Recommended tick interval for static content (200ms / 5 FPS).