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 14 apps in this directory
Cap
Team Chat · Video Conferencing
Open source Loom alternative with GPU-accelerated recording, instant share links, AI summaries, and full self-hosting via Docker Compose.
Fluree DB
Databases
A temporal, verifiable graph database with git-like branching, integrated vector/text/geo search, and RDF/SPARQL/JSON-LD/openCypher support — benchmarked at 10.4x faster than the next database on the full Wikidata dump.
helix-db
Databases
A graph-vector database built from scratch in Rust that unifies graph traversal, vector search, key-value, and relational storage into a single platform for AI applications.
Hook0
Devops
Open-source Webhooks-as-a-Service: deliver events to your users with auto-retry, signed payloads, and a real-time subscriber dashboard — all without building the infrastructure yourself.
iii
Developer Tools · Devops
Compose, extend, and observe every backend service in real time using three primitives: Workers, Functions, and Triggers.
Jan
AI Assistants
Run LLMs 100% locally with full privacy, or connect to cloud AI — your machine, your data, your control.
melty
Developer Tools · AI Code Assistants · Code Editors
The AI code editor where every chat message is a git commit you can revert, branch, or squash
mnemo
AI Agents · AI Development
A local-first AI memory sidecar that extracts entities, builds a persistent knowledge graph, and injects ranked context into any LLM pipeline — no cloud required.
OpenViking
Databases · AI Development
An open-source context database that gives AI agents a unified filesystem for memory, resources, and skills with hierarchical tiered retrieval.