enlighten

Enlightened console progress bar library for Python — multi-bar terminal progress tracking with logging integration. enlighten features: Manager for multi-bar coordination, Counter for simple progress bars, Bar class for custom formatting, StatusBar for dynamic status display, multiple simultaneous progress bars without visual conflicts, logging integration (log messages scroll above bars), scroll_offset for preserving output, context manager interface, custom bar format strings, color support via curses, rate display, and ETA calculation. Designed for multi-threaded agents with parallel progress bars.

Evaluated Mar 06, 2026 (0d ago) v1.12.x
Homepage ↗ Repo ↗ Developer Tools python enlighten progress bar terminal multi-bar logging
⚙ Agent Friendliness
65
/ 100
Can an agent use this?
🔒 Security
91
/ 100
Is it safe for agents?
⚡ Reliability
79
/ 100
Does it work consistently?

Score Breakdown

⚙ Agent Friendliness

MCP Quality
--
Documentation
80
Error Messages
75
Auth Simplicity
99
Rate Limits
99

🔒 Security

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

Terminal progress library with no network calls. No security concerns. Progress bar format strings from user input: validate format string to prevent information disclosure in formatted output.

⚡ Reliability

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

Best When

Multiple simultaneous progress bars with logging integration — enlighten is the best choice when multiple parallel tasks each need their own progress indicator and logging must coexist.

Avoid When

Single progress bar (use tqdm), non-terminal environments, indeterminate progress (use yaspin), or when tqdm's simplicity is sufficient.

Use Cases

  • Agent multi-progress tracking — import enlighten; manager = enlighten.get_manager(); pbar = manager.counter(total=100, desc='Processing', unit='items'); for item in items: process(item); pbar.update() — single bar; agent displays progress for long processing; update() increments by 1; pbar.close() when done
  • Agent parallel progress bars — manager = enlighten.get_manager(); bars = [manager.counter(total=n, desc=f'Task {i}') for i in range(3)]; for i, task in enumerate(tasks): process(task); bars[i].update() — multiple bars; agent shows simultaneous progress for parallel operations without bars overwriting each other
  • Agent with logging — import logging; manager = enlighten.get_manager(); logging.basicConfig(handlers=[enlighten.logging.EnlightenHandler()]); logger.info('Processing started'); pbar = manager.counter(total=100) — integrated logging; agent combines progress bars with logging without visual conflicts; log messages scroll above progress bars
  • Agent status bar — status = manager.status_bar('Status: Initializing', color='cyan_on_black'); pbar = manager.counter(total=len(urls)); for url in urls: status.update('Status: Fetching ' + url); fetch(url); pbar.update() — status display; agent shows current operation status alongside progress count
  • Agent print with progress — manager = enlighten.get_manager(); pbar = manager.counter(total=100); for i, item in enumerate(items): process(item); manager.print(f'Completed: {item}'); pbar.update() — safe print; agent uses manager.print() to output messages without disrupting progress bars

Not For

  • Simple single-bar progress — for single progress bar, tqdm is simpler and more widely used
  • Non-terminal environments — enlighten requires TTY/curses; in Jupyter notebooks use ipywidgets; in CI use tqdm with dynamic_ncols=False
  • Indeterminate spinners — enlighten shows determinate progress bars; for spinners use yaspin

Interface

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

Authentication

Methods: none
OAuth: No Scopes: No

No auth — terminal progress library.

Pricing

Model: open_source
Free tier: Yes
Requires CC: No

enlighten is Mozilla Public License 2.0. Free for all use.

Agent Metadata

Pagination
none
Idempotent
Full
Retry Guidance
Not documented

Known Gotchas

  • Manager must be closed for terminal restoration — enlighten.get_manager() acquires terminal; manager.stop() or context manager exit restores terminal; agent code without proper cleanup leaves terminal in altered state after script exit; always use: with enlighten.get_manager() as manager: ...; or try/finally: manager.stop()
  • Counter.close() required when done — pbar.close() marks bar as complete and removes it from display; bars that are not closed remain visible; agent code in loops: pbar = manager.counter(total=n); for ...: pbar.update(); pbar.close() — must close each bar after completion
  • print() disrupts display — using print() inside enlighten context causes visual corruption; use manager.print() for thread-safe output above progress bars; or use enlighten's logging handler for log messages; agent code: replace all print() inside progress sections with manager.print()
  • total=None creates indeterminate bar — manager.counter(total=None) shows count without percentage; bar moves but no ETA; agent code processing unknown-length iterables: use total=None; once length known: bar.total = len(data); triggers completion percentage
  • Thread safety requires one manager — all threads should share one Manager instance; multiple managers create conflicting terminal state; agent multi-threaded code: create manager in main thread; pass bars to worker threads; workers call bar.update() which is thread-safe via internal lock
  • enlighten not available in all environments — falls back gracefully in non-TTY but curses import fails on some minimal environments (Docker scratch, some CI); agent code: try: import enlighten except ImportError: use tqdm as fallback; enlighten requires curses which is usually bundled but may be missing

Full Evaluation Report

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

$99

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

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