Photo by the author
# Introduction Loading…
Progress bars make the wait more bearable. They show how much of the task has been completed, how much remains, and whether the loop is still running or has stopped. This uncomplicated visual feedback improves clarity when executing long-running scripts.
Progress bars are particularly useful in data processing, model training, and machine learning where tasks can take minutes or even hours to complete. Instead of waiting without feedback, developers can track progress in real time and better understand runtime behavior.
In this article, we discuss the seven best Python libraries for progress bars. Each library includes sample code, so you can quickly integrate it into your projects with minimal configuration.
# 1.tqdm

tqdm is one of the most popular Python libraries for adding progress bars to loops and iteration-based workflows. It’s lightweight, straightforward to integrate, and works out of the box with minimal code changes.
The library automatically adapts to a variety of environments, including terminals, notebooks, and scripts, making it a reliable choice for data processing and machine learning tasks where visibility into execution progress is essential.
Key Features:
- Automatically track progress for any iteration with minimal code changes
- High performance with very low overhead, even for gigantic loops
- Clear and informative output, including iteration speed and estimated time remaining
Sample code:
# pip install tqdm
from tqdm import tqdm
import time
records = range(1_000)
for record in tqdm(records, desc="Cleaning records"):
time.sleep(0.002)
Exit:
Cleaning records: 100%|██████████| 1000/1000 [00:02<00:00, 457.58it/s]
# 2. wealthy

rich is a up-to-date Python library designed to create visually appealing and highly readable terminal output, including advanced progress bars. Unlike customary progress bar libraries, Affluent's focus is on presentation, making it ideal for applications where clarity and aesthetics are essential, such as development tools, dashboards, and command-line interfaces.
Affluent mode progress bars support wealthy text formatting, lively descriptions, and silky animations. This makes it especially useful when you want progress indicators to be both informative and visually polished, without adding sophisticated logic to your code.
Key Features:
- Visually wealthy progress bars with colors, styling and silky animations
- Uncomplicated API to track progress in iterations
- Seamless integration with other wealthy components such as tables, logs and panels
Sample code:
# pip install wealthy
from wealthy.progress import track
import time
endpoints = ["users", "orders", "payments", "logs"]
for api in track(endpoints, description="Fetching APIs"):
time.sleep(0.4)
Exit:
Fetching APIs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:01
# 3. living progress

living progress is a Python library that focuses on creating animated and visually appealing progress bars for terminal applications. It features silky animations and lively indicators that make long-running tasks easier to monitor and more enjoyable to watch.
This library is well suited for scripts where user experience is essential, such as training loops, batch jobs, and command-line tools. It offers a versatile API that allows developers to customize titles, styles, and behaviors while ensuring simplicity of implementation.
Key Features:
- Smoothly animated progress bars with lively indicators
- Malleable customization of titles, styles and refresh behavior
- Clear performance metrics including elapsed time and processing speed
Sample code:
# pip install alive-progress
from alive_progress import alive_bar
import time
epochs = 10
with alive_bar(epochs, title="Training model") as bar:
for _ in range(epochs):
time.sleep(0.6)
bar()
Exit:
Training model |████████████████████████████████████████| 10/10 [100%] in 6.0s (1.67/s)
# 4. Halo

Halo is a Python library designed to display elegant spinner animations in the terminal. Instead of showing progress as percentages or bars, Halo provides visual indicators to signal ongoing process, making it ideal for tasks where progress cannot be easily quantified.
This library is commonly used for startup routines, network connections, and background operations where a uncomplicated status indicator is more appropriate than a customary progress bar. A clear API and customizable knobs make it straightforward to add refined feedback to command-line tools.
Key Features:
- Lightweight spinner animations for undefined tasks
- Uncomplicated and intuitive API with run, success and failure states
- Multiple built-in spinner styles with customizable text
Sample code:
# pip install halo
from halo import Halo
import time
spinner = Halo(text="Starting database", spinner="line")
spinner.start()
time.sleep(3)
spinner.succeed("Database ready")
Exit:
| Starting database
✔ Database ready
# 5. ipywidgets

ipywidgets is a Python library that provides interactive UI components in Jupyter notebooks, including progress bars, sliders, buttons, and forms. Unlike terminal libraries, ipywidgets renders progress indicators directly in the notebook interface, making it especially useful for exploratory data analysis and interactive experiments.
Progress bars created with ipywidgets integrate seamlessly with notebook workflows, allowing users to monitor long-running tasks without cluttering the results. This makes it a good choice for machine learning experiments, parameter tuning, and iterative research conducted in Jupyter environments.
Key Features:
- Native progress bar rendering in Jupyter notebooks
- Interactive UI components that go beyond progress tracking
- Granular control over progress updates and display behavior
Sample code:
# pip install ipywidgets
import ipywidgets as widgets
from IPython.display import display
import time
progress = widgets.IntProgress(value=0, max=5, description="Experiments")
display(progress)
for _ in range(5):
time.sleep(1)
progress.value += 1
Exit:

# 6. progress

progress is a lightweight Python library that provides uncomplicated and classic progress bars for terminal-based applications. Its focus on minimalism and readability makes it a good choice for scripts where clarity is more essential than advanced styling or animations.
The library offers multiple progress indicators, including bars, spinners, and counters, allowing developers to choose the format that best suits their employ case. Its uncomplicated API makes it straightforward to integrate with existing scripts with minimal changes.
Key Features:
- Uncomplicated and clear terminal progress bars
- Multiple progress indicators such as bars and spinners
- Minimal dependencies and straightforward integration
Sample code:
# pip install progress
from progress.bar import Bar
import time
files = ["a.csv", "b.csv", "c.csv"]
bar = Bar("Uploading files", max=len(files))
for _ in files:
time.sleep(0.7)
bar.next()
bar.finish()
Exit:
Uploading files ████████████████████████████████ 100%
# 7. click

crash is a Python library for creating command-line interfaces that includes built-in support for progress bars. Unlike standalone progress bar libraries, Click integrates progress tracking directly into CLI commands, making it ideal for tools distributed and used from the terminal.
The clickable progress bar is uncomplicated, reliable, and designed to work seamlessly with the command system. This is especially useful when creating data pipelines, automation scripts, or development tools where progress information should be part of the command execution flow.
Key Features:
- Built-in progress bars designed specifically for command-line interfaces
- Seamless integration with decorators and click command options
- Reliable results handling for terminal tools
Sample code:
# pip install click
import time
import click
@click.command()
def main():
items = list(range(30))
# Progressbar wraps the iterable
with click.progressbar(items, label="Processing items") as bar:
for item in bar:
# Simulate work
time.sleep(0.05)
click.echo("Done!")
if __name__ == "__main__":
main()
Exit:
Processing items [####################################] 100%
Done!
# Python progress bar library comparison
The table below provides a uncomplicated comparison of the Python progress bar libraries discussed in this article, focusing on where they perform best and how they are typically used.
| Library | Best employ case | Environmental support | Style |
|---|---|---|---|
| tqdm | Data processing and ML loops | Terminal, Jupyter notebook | Uncomplicated and informative |
| wealthy | Polished CLI tools | Terminal, Jupyter notebook | Colorful and stylish |
| living progress | Animated, long-lasting tasks | Terminal, circumscribed notebook support | Animated and lively |
| Halo | Undefined tasks | Terminal only | Based on spinners |
| ipywidgets | Interactive experiments | Jupyter Notebook only | Native notebook user interface |
| progress | Uncomplicated scripts and batch jobs | Terminal only | Minimal and classic |
| crash | Command line tools | Terminal (CLI) | Functional CLI output |
Abid Ali Awan (@1abidaliawan) is a certified data science professional who loves building machine learning models. Currently, he focuses on creating content and writing technical blogs about machine learning and data science technologies. Abid holds a Master's degree in Technology Management and a Bachelor's degree in Telecommunications Engineering. His vision is to build an AI product using a graph neural network for students struggling with mental illness.
