indicatif
A Rust library for progress bars, spinners, and colored terminal output in command-line applications.
Repository Health
Technical Analysis
indicatif is a Rust library for showing users progress in command-line applications, providing configurable progress bars, spinners, and basic terminal color support. It’s part of the console-rs family of crates (alongside console and dialoguer) and is one of the most widely depended-upon terminal UI crates in the Rust ecosystem, with over 184 million total downloads.
Beyond a single progress bar, indicatif supports MultiProgress for coordinating several concurrently rendered bars (e.g. per-file download progress), an iter() extension for wrapping any iterator with automatic progress tracking, and a rayon integration for progress on parallel iterators. Companion crates in the ecosystem — indicatif-log-bridge and tracing-indicatif — let it coexist cleanly with the log and tracing crates so log output doesn’t collide with an active progress bar’s rendering.
What You Get
- ProgressBar and ProgressStyle for single progress bars/spinners with customizable templates, characters, and colors
- MultiProgress for rendering several progress bars concurrently, e.g. one per parallel download or worker thread
- An iter() extension trait that wraps any Iterator to report progress automatically as it’s consumed
- Optional rayon feature for automatic progress tracking on parallel iterators
- Ecosystem integrations (indicatif-log-bridge, tracing-indicatif) so log/tracing output doesn’t corrupt active progress bar rendering
Common Use Cases
- Showing download/upload progress in CLI tools that transfer files over the network
- Displaying build or processing progress across many parallel tasks (e.g. compiling, testing, batch file processing)
- Wrapping a long-running iterator (like a directory walk or dataset scan) with a live progress bar via .progress()
- Building interactive CLI UX comparable to tools like cargo, yarn, or npm’s own progress output
Under The Hood
Architecture — The crate separates rendering concerns cleanly: progress_bar.rs (876 lines) exposes the public ProgressBar API, state.rs (884 lines) tracks position/length/timing state behind a shared, thread-safe handle, style.rs (1,184 lines) handles template parsing and rendering (spinners, bars, ETA/speed formatting), multi.rs (802 lines) coordinates multiple bars’ terminal positions via a shared draw_target.rs, and term_like.rs/in_memory.rs abstract the actual terminal so tests can render against an in-memory buffer instead of a real TTY.
Tech Stack — Pure Rust, built on the console crate (a sibling console-rs project) for terminal capability detection and ANSI styling, with optional integrations gated behind Cargo features for rayon (parallel iterators), tokio (async), improved_unicode (grapheme-aware width calculation), and in_memory (test rendering).
Code Quality — Tests (tests/render.rs, tests/multi-autodrop.rs) render against the in-memory terminal abstraction to assert exact byte-for-byte output, a strong pattern for a library whose entire job is precise terminal rendering. The crate ships 14+ runnable examples (download, multi-tree, rayon, tokio, log integration) that double as both documentation and de facto integration tests, and CI includes deny.toml-enforced dependency auditing.
API Design — The builder-style ProgressBar::new(len).with_style(...) API and template-string-based styling (e.g. {spinner} {msg} [{bar}] {pos}/{len}) make common cases quick to reach while still exposing enough low-level control (custom characters, tick strings, ETA formatting) for polished CLI UX. The iterator extension trait (.progress()) is a particularly low-friction entry point — wrapping an existing loop in a progress bar requires almost no code change.
Used by 16 apps in this directory
PostgresML
AI Development · Databases
Run ML training and LLM inference natively inside PostgreSQL with GPU acceleration — no data movement required.
Spacedrive
Collaboration · File Storage
One file manager for all your devices and clouds — powered by a Virtual Distributed File System built in Rust.
Tabby
AI Code Assistants
Self-hosted AI coding assistant — run GitHub Copilot-grade code completion on your own hardware with no cloud dependency.
Temps
Analytics · Devops · Monitoring
A self-hosted Rust PaaS that replaces Vercel, Sentry, PostHog, Pingdom, Resend, and E2B with one binary — plus 440+ CLI operations agents like Claude Code can drive directly.
TensorZero
Ab Testing Experimentation · AI Development · Monitoring
TensorZero unifies the LLM gateway, observability, evaluation, optimization, and experimentation stack behind a single OpenAI-compatible API, built in Rust for sub-millisecond p99 latency.
Vibe Kanban
AI Agents · AI Code Assistants · Project Management
A kanban board for planning work and dispatching Claude Code, Codex, Gemini CLI, and eight other coding agents into isolated git worktrees, then reviewing and merging their diffs from one UI.
Void
AI Code Assistants · Automation · Code Editors
Open-source AI code editor with direct LLM integration and data privacy