tqdm

A fast, extensible progress bar for Python loops and CLI pipelines, with negligible overhead.

Library
PyPI
v4.70.1
31,362 stars
MPL-2.0 AND MIT

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
85 /100 Excellent
Development Activity 76
Maintenance 88
Community 76
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
78 /100 Good
Architecture 85
Code Quality 82
Innovation 65
Learning Curve 80

tqdm wraps any iterable, Python range, or shell pipe with a smart, low-overhead progress meter that shows percentage complete, elapsed/remaining time, and iteration rate in real time. It has no required dependencies outside Windows, works in terminals, GUIs, and Jupyter/IPython notebooks alike, and integrates with pandas, Dask, Keras, asyncio, and multiprocessing through dedicated submodules.

Beyond the core tqdm(iterable) wrapper, it ships a tqdm/python -m tqdm CLI entry point for piping shell output through a live progress display, notebook-aware widgets, and Discord/Slack/Telegram bar integrations for tracking long-running remote jobs from chat.

What You Get

  • Drop-in progress bars for iterables via tqdm() and trange(), no boilerplate required
  • A CLI (tqdm / python -m tqdm) that wraps stdin/stdout pipes with a live meter
  • Notebook-native widgets (tqdm.notebook) for Jupyter, IPython, and Colab
  • Framework integrations for pandas (tqdm_pandas), Dask, Keras, asyncio, and concurrent.futures
  • Messaging integrations (tqdm.contrib.discord/slack/telegram) for tracking remote or background jobs from chat

Common Use Cases

  • Wrapping a for loop over a large dataset to show live ETA and throughput during data processing
  • Piping a long-running shell command’s output through tqdm --bytes to watch backup or archive progress
  • Tracking pandas .apply() calls across large DataFrames with df.progress_apply()
  • Monitoring nested or parallel loops in multiprocessing/asyncio pipelines with per-worker bars
  • Getting a Slack or Discord progress bar for long remote training or ETL jobs

Under The Hood

Architecture

tqdm’s public surface (tqdm/__init__.py) re-exports a single core class from tqdm/std.py (over 1,500 lines) that implements the base iterator/decorator, format-string rendering, smoothing math, and a TqdmDefaultWriteLock for thread/process-safe multi-bar writes; tqdm/utils.py holds cross-cutting helpers (ASCII/unicode detection, screen-shape probing, unicode-width-aware string truncation, an envwrap decorator for env-var-driven constructor defaults) that std.py composes rather than inherits from. Every other public backend — notebook.py, gui.py, tk.py, rich.py, asyncio.py, dask.py, keras.py — subclasses the core class and overrides just the render/display method, so adding a new backend means overriding one method rather than reimplementing iteration logic; contrib/ (Discord, Slack, Telegram, itertools, concurrent helpers) instead composes the core class by wrapping calls, keeping messaging-service and stdlib-iterator integrations decoupled from the core hierarchy. A background monitor thread watches for stalled bars and forces redraws, the one piece of the design that isn’t purely synchronous. In this layered, thin-subclass-per-backend architecture, the piece that would break the most downstream code if changed is the core class’s constructor parameter surface, since every backend and contrib integration depends on those exact keyword arguments.

Tech Stack

Pure Python targeting a broad version range, with zero required runtime dependencies except a Windows-only terminal-color library gated by platform marker; optional extras pull in an HTTP client, a chat-SDK client, or notebook widgets only when those contrib modules are actually used. Packaging uses setuptools with git-tag-derived versioning (no hardcoded version string in source), and ships a console-script CLI entry point alongside a traditional man page. The project distributes through PyPI, Conda-Forge, a Docker image, and Snapcraft in addition to source installs, and its test matrix spans many Python versions plus optional TensorFlow/Keras backends with coverage reporting wired into CI.

Code Quality

Testing is extensive and CI-enforced: the test suite spans nearly twenty modules covering the core class plus every backend (asyncio, concurrent, Dask, Keras, notebook, pandas, Rich, Tk, GUI), run under pytest with coverage, a per-test timeout, and warnings promoted to errors — a notably strict setting. A dedicated performance test guards against overhead regressions, so the library’s low-overhead claim is unit-tested rather than merely asserted, and a separate CI job runs a packaging sanity check plus a hard wheel-size budget given the project’s very high download volume. Error handling favors typed, library-specific exception and warning subclasses over bare exceptions or silent failures. Style is enforced through linter, formatter, and import-sort configuration plus pre-commit hooks, though the codebase has no static type hints or type-checker configuration, and the more delicate thread/process-safety code is documented with explicit platform caveats rather than type-checked.

What Makes It Unique

tqdm’s differentiator is less a novel algorithm and more making an extremely common annoyance — instrumenting a plain loop — close to free: the documented per-iteration overhead is unit-tested and benchmarked against a comparable library, achieved by skipping redundant terminal redraws via an adaptive minimum-interval heuristic instead of redrawing on every iteration. Its environment-variable override mechanism, letting essentially every constructor argument be set externally, is a genuinely uncommon pattern for solving “silence progress bars in CI/cloud logs without touching call sites” across an entire codebase at once. The breadth of first-class backend subclasses (notebook, GUI, Tk, Rich, asyncio, Dask, Keras) plus messaging-service integrations for tracking remote jobs is broader than comparable progress-bar libraries, though each individual backend is a straightforward render-method override rather than a technical breakthrough.

Used by 37 apps in this directory

Java
100%
Apache 2.0

CrateDB

Analytics · Databases

4,444

Distributed SQL database for real-time analytics at scale

View details
96
Repo Health
76
Technical
80
Dependency
Built with
Java 100%
Updated 1 weeks ago
Python
66%
MIT

Flowfile

Data Engineering

398

Visual ETL that compiles to Polars — build pipelines on a canvas, export as standalone Python, and run anywhere without platform lock-in.

View details
83
Repo Health
81
Technical
66
Dependency
Built with
Python 66%
TypeScript 17%
Vue 16%
Updated 1 weeks ago
Python
83%
MIT

Gemma Multimodal Fine-Tuner

AI Development

1,516

An Apple-Silicon-native LoRA fine-tuning tool for Gemma on text, image, and audio data — with a wizard CLI, live browser-based training visualizer, and streaming from GCS/BigQuery for datasets too large for local disk.

View details
60
Repo Health
68
Technical
72
Dependency
Built with
Python 83%
Updated 3 weeks ago
Python
71%
Apache 2.0

GPT Researcher

AI Assistants · Productivity

30,269

The pioneering open-source autonomous AI agent that conducts deep, multi-source research and produces citation-backed reports exceeding 2,000 words — faster and more reliably than any human researcher.

View details
90
Repo Health
91
Technical
64
Dependency
Built with
Python 71%
TypeScript 18%
Updated 2 weeks ago
TypeScript
91%
Apache 2.0

Helicone

AI Development · Analytics · Monitoring

6,235

An open-source AI gateway and LLM observability platform that routes requests to 100+ models while logging cost, latency, and full traces for every call.

View details
74
Repo Health
81
Technical
65
Dependency
Built with
TypeScript 91%
Updated 6 days ago
TypeScript
71%
Other

highlight.io

Analytics · Developer Tools · Monitoring

9,384

Open-source full-stack monitoring that unifies session replay, error tracking, logging, and distributed tracing so you can stop context-switching between tools.

View details
76
Repo Health
78
Technical
65
Dependency
Built with
TypeScript 71%
Go 16%
Updated 1 weeks ago
TypeScript
82%
MIT

Hippo

AI Agents · AI Memory

784

A biologically-inspired memory layer for AI coding agents — memories decay by default and strengthen through use, modeled on the hippocampus, with zero runtime dependencies and a SQLite backbone.

View details
77
Repo Health
71
Technical
78
Dependency
Built with
TypeScript 82%
JavaScript 12%
Updated 6 days ago
Python
94%
Apache 2.0

knowhere

AI Development · AI Memory · Developer Tools

3,755

Transform messy, unstructured documents into persistent, navigable memory that AI agents can actually use.

View details
83
Repo Health
75
Technical
66
Dependency
Built with
Python 94%
Updated 6 days ago
Rust
43%
Apache 2.0

LanceDB

AI Development · Databases

11,757

Open-source, embedded vector database built on the Lance columnar format for fast multimodal search across billions of vectors, backed by Y Combinator (W23).

View details
90
Repo Health
86
Technical
72
Dependency
Built with
Rust 43%
Python 27%
HTML 21%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers