11 releases (breaking)
| new 0.9.1 | Feb 10, 2026 |
|---|---|
| 0.8.0 | Feb 9, 2026 |
#346 in Text processing
2.5MB
51K
SLoC
gilt
Rich terminal formatting for Rust -- a port of Python's rich library.
gilt brings beautiful terminal output to Rust with styles, tables, trees, syntax highlighting, progress bars, and more -- all rendered as ANSI escape sequences.
Quick Start
[dependencies]
gilt = "0.8"
use gilt::prelude::*;
fn main() {
let mut console = Console::new();
console.print_text("Hello, [bold magenta]gilt[/bold magenta]!");
}
v0.8.0 Highlights
- Thread-safe Console - Share consoles across threads with interior mutability
- LRU caching - 2-5x speedup on Style/Color parsing with automatic caching
- New progress columns - Spinner, TimeElapsed, TimeRemaining, FileSize, Download, TransferSpeed
- Iterator tracking -
track()function and.progress()method for iterators - New widgets - Padding, Align, and Group containers
- Safe stylize -
try_fg(),try_bg()for fallible style parsing - Improved Unicode - Proper width for ZWJ emojis, flags, variation selectors
v0.7.0 Highlights
- Builder standardization -- all widget builders now use
with_prefix (Panel::new().with_title(),Table::new().with_box_chars(), etc.) - Comprehensive rustdoc -- 731-line crate-level guide with 132 doctests covering every feature
- 2,295 lib tests + 132 doctests -- full coverage across all widgets
v0.6.0 Highlights
- Soundness fix -- replaced unsafe interior mutability with
Cellin live_render - Hardened API -- 10
unwrap()calls replaced with graceful handling - Feature-gated
log--logging_handlernow behindloggingfeature (default on) - Expanded prelude --
Bar,Layout,Live,Status,Prompt,Jsonadded - Binary filesize --
filesize::binary()for KiB/MiB/GiB units - Readline autocomplete -- rustyline-based prompt completions (feature-gated)
- Display on 5 more widgets -- Constrain, Scope, Group, Align, Styled
- 2,334 tests -- 85 new tests for CJK/emoji, boundary widths, stress scenarios
- 85 examples including 4 cookbooks and 47-section showcase
Features
Core Widgets
- Text -- Rich text with markup, styles, wrapping, alignment
- Table -- Unicode box-drawing tables with column alignment and row striping
- Panel -- Bordered content panels with titles
- Tree -- Hierarchical tree display with guide lines
- Columns -- Multi-column layout
- Layout -- Flexible split-pane layouts
Terminal Features
- Syntax -- Code highlighting via syntect (150+ languages)
- Markdown -- Terminal-rendered Markdown
- JSON -- Pretty-printed JSON with highlighting
- Progress -- Multi-bar progress display with ETA, speed, spinner
- Live -- Live-updating terminal display
- Status -- Spinner with status message
Rust-Native Extensions
- Gradients -- True-color RGB gradient text
- Sparkline -- Inline Unicode bar charts
- Canvas -- Braille dot-matrix drawing with line, rect, circle primitives
- Diff -- Unified and side-by-side text diffs with colored output
- Figlet -- Large ASCII art text rendering
- CsvTable -- CSV to rich Table conversion
- Stylize trait --
"hello".bold().red()method chaining - Iterator progress --
iter.progress()adapter #[derive(Table, Panel, Tree, Columns, Rule, Inspect, Renderable)]-- Auto-generate widgets from structs- Environment detection --
NO_COLOR,FORCE_COLOR,CLICOLORsupport - Inspect -- Debug any value with rich formatting
- Accessibility -- WCAG 2.1 contrast checking,
REDUCE_MOTIONdetection - Extended underlines -- Curly, dotted, dashed, double styles with color
- anstyle interop -- Bidirectional conversion with
anstyletypes
Integrations
- miette -- Diagnostic reporting with gilt styling
- eyre -- Error reporting with gilt styling
- tracing -- Log subscriber with colored output
- anstyle -- Convert between gilt and anstyle
Color/Styletypes
Feature Gates
All four heavy dependencies are default-on. Disable them for minimal builds:
# Full (default) -- includes json, markdown, syntax, interactive
gilt = "0.8"
# Minimal -- no heavy deps
gilt = { version = "0.7", default-features = false }
# Pick what you need
gilt = { version = "0.7", default-features = false, features = ["json", "syntax"] }
| Feature | Default | Description |
|---|---|---|
json |
yes | Pretty-printed JSON (serde, serde_json) |
markdown |
yes | Terminal Markdown rendering (pulldown-cmark) |
syntax |
yes | Syntax highlighting (syntect) |
interactive |
yes | Password prompts, select/multi-select (rpassword) |
tracing |
no | tracing subscriber with gilt formatting |
derive |
no | #[derive(Table, Panel, Tree, ...)] proc macros (7 derives) |
miette |
no | miette::ReportHandler implementation |
eyre |
no | eyre::EyreHandler implementation |
csv |
no | CSV file reading via csv crate (built-in parser always available) |
anstyle |
no | Bidirectional From conversions with anstyle types |
Examples
# Showcase (runs all major widgets)
cargo run --example showcase --all-features
# Core widgets
cargo run --example table
cargo run --example panel
cargo run --example syntax
cargo run --example progress
cargo run --example markdown
# Rust-native features
cargo run --example gradient
cargo run --example inspect_demo
cargo run --example styled_string
cargo run --example sparkline
# Feature-gated examples
cargo run --example derive_table --features derive
cargo run --example derive_panel --features derive
cargo run --example derive_tree --features derive
cargo run --example derive_rule --features derive
cargo run --example derive_inspect --features derive
cargo run --example miette_demo --features miette
cargo run --example tracing_demo --features tracing
See the examples/ directory for all 73 examples.
Global Console
// Print with markup
gilt::print_text("Hello, [bold]world[/bold]!");
// Print JSON
gilt::print_json(r#"{"name": "gilt"}"#);
// Inspect any Debug value
gilt::inspect(&vec![1, 2, 3]);
Performance
gilt includes a criterion benchmark suite (64 benchmarks) covering text rendering, style application, table layout, segment operations, and more:
cargo bench
Minimum Supported Rust Version
gilt requires Rust 1.82.0 or later (for std::sync::LazyLock).
License
MIT
Dependencies
~5–23MB
~244K SLoC