indicatif

Terminal progress bar and spinner library for Rust CLI applications. Provides progress bars, spinners, and multi-progress displays with rich customization. Supports templates with dynamic content (ETA, rate, bytes), styled output, and concurrent multi-bar updates. Powers CLI tools like ripgrep's progress display.

Evaluated Mar 06, 2026 (0d ago) v0.17+
Homepage ↗ Repo ↗ Developer Tools rust progress-bar spinner terminal cli progress multi-progress
⚙ Agent Friendliness
67
/ 100
Can an agent use this?
🔒 Security
97
/ 100
Is it safe for agents?
⚡ Reliability
84
/ 100
Does it work consistently?

Score Breakdown

⚙ Agent Friendliness

MCP Quality
--
Documentation
85
Error Messages
78
Auth Simplicity
100
Rate Limits
100

🔒 Security

TLS Enforcement
100
Auth Strength
100
Scope Granularity
100
Dep. Hygiene
90
Secret Handling
92

Terminal UI library — no network access, no security concerns.

⚡ Reliability

Uptime/SLA
88
Version Stability
85
Breaking Changes
80
Error Recovery
85
AF Security Reliability

Best When

Building Rust CLI tools that process files, download data, or run multi-step operations and need progress feedback.

Avoid When

Output will be piped or in CI — check tty and disable progress bars in non-interactive mode.

Use Cases

  • Show download progress in Rust CLI tools with bytes transferred, rate, and ETA display
  • Display multi-step build or processing progress with concurrent multi-bar for parallel operations
  • Indicate indeterminate operations with spinners while waiting for network calls or computations
  • Create rich progress templates showing custom fields (item names, percentages, rates)
  • Log messages above active progress bars without disrupting the progress display using println!

Not For

  • Web or GUI applications — indicatif is terminal-only
  • Non-interactive output (CI logs) — disable with ProgressBar::set_draw_target(ProgressDrawTarget::hidden())
  • Python or Node.js projects — use tqdm (Python) or cli-progress (Node) for equivalent functionality

Interface

REST API
No
GraphQL
No
gRPC
No
MCP Server
No
SDK
Yes
Webhooks
No

Authentication

Methods: none
OAuth: No Scopes: No

Library — no auth needed.

Pricing

Model: open_source
Free tier: Yes
Requires CC: No

MIT licensed open source library.

Agent Metadata

Pagination
none
Idempotent
Full
Retry Guidance
Not documented

Known Gotchas

  • ProgressBar must be finished (.finish(), .finish_with_message(), or .abandon()) — unfinshed bars may leave terminal in broken state on exit
  • Using println! or eprintln! while a progress bar is active corrupts terminal output — use bar.println() or MultiProgress::println() instead
  • Progress bars are terminal-specific — check ProgressBar::is_hidden() in CI environments; use set_draw_target(hidden()) for non-tty output
  • MultiProgress requires holding the MultiProgress handle alive — dropping it before all bars finish causes rendering issues
  • Progress bar templates have a specific syntax for custom fields: {spinner} {bar:40.cyan/blue} {pos}/{len} {msg} — incorrect template tokens cause panics in debug mode
  • Concurrent updates require spawning bars before using them in threads — MultiProgress::add() must be called before sharing the ProgressBar across threads

Alternatives

Full Evaluation Report

Detailed scoring breakdown, competitive positioning, security analysis, and improvement recommendations for indicatif.

$99

Scores are editorial opinions as of 2026-03-06.

5220
Packages Evaluated
26151
Need Evaluation
173
Need Re-evaluation
Community Powered