tqdm  by tqdm

Progress bar for Python and CLI tools

Created 10 years ago
30,422 stars

Top 1.2% on SourcePulse

GitHubView on GitHub
Project Summary

tqdm provides a fast, extensible, and highly customizable progress bar for Python loops and command-line operations. It aims to offer a negligible overhead, making it suitable for even the tightest loops, and supports various environments from standard terminals to Jupyter notebooks.

How It Works

tqdm wraps any Python iterable, automatically displaying a smart progress meter with ETA and iteration speed. It employs algorithms to predict remaining time and skip unnecessary displays, minimizing overhead. The library is dependency-free, relying only on Python's standard capabilities for terminal control.

Quick Start & Requirements

  • Install via pip: pip install tqdm
  • Install via conda: conda install -c conda-forge tqdm
  • No specific Python version or external dependencies are required beyond standard Python.

Highlighted Details

  • Minimal overhead: ~60ns per iteration, significantly lower than alternatives.
  • Cross-platform compatibility: Works on Linux, Windows, macOS, and more.
  • Versatile usage: Supports iterable wrapping, manual control, module execution via pipes, and integration with libraries like Pandas, Keras, and Dask.
  • Multiple output formats: Supports Unicode, ASCII, and custom bar formats.
  • GUI integration: Includes submodules for Jupyter notebooks (tqdm.notebook), Matplotlib (tqdm.gui), and Tkinter (tqdm.tk).

Maintenance & Community

The project is actively maintained by a core team, with Casper da Costa-Luis as the primary maintainer. Contributions are welcome, and community support is available via GitHub issues.

Licensing & Compatibility

Open Source (OSI approved). Compatible with commercial and closed-source applications.

Limitations & Caveats

Some older or non-standard terminal environments (e.g., certain cloud consoles, IDEs like PyCharm) might have issues with nested progress bars or Unicode rendering, potentially requiring configuration like TQDM_POSITION=-1 or ascii=True. Asynchronous iterator break statements may not trigger proper cleanup without manual close() calls or context manager usage.

Health Check
Last Commit

3 months ago

Responsiveness

1 day

Pull Requests (30d)
1
Issues (30d)
2
Star History
169 stars in the last 30 days

Explore Similar Projects

Starred by Tobi Lutke Tobi Lutke(Cofounder of Shopify), Dominik Moritz Dominik Moritz(Research Scientist at Apple; Professor at CMU), and
8 more.

pygwalker by Kanaries

0.1%
15k
Interactive UI for Pandas dataframes in Jupyter
Created 2 years ago
Updated 2 months ago
Feedback? Help us improve.