alive-progress is a free, open source collaboration & feedback project written in Python and released under MIT. It has 6,307 GitHub stars, 236 forks and 20 open issues, and was last pushed 4 months ago. On this registry it ranks #3 of 20 tracked projects in Collaboration & Feedback, with 5 head-to-head comparisons available. It gained 1 stars over the last 3 tracked days.

What is alive-progress?

alive-progress is a Python progress bar library for long-running command-line processing, aimed at developers who need live throughput, an accurate ETA, and rich terminal animation instead of a static bar.

What it is

alive-progress is a progress bar package for Python, distributed through PyPI under the MIT licence. It lives in the Python CLI and scripting ecosystem, and it is designed for the case where a lengthy processing loop runs unattended in a terminal, often over SSH. The README frames the project around a common problem: not knowing where a long run has got to, and whether it has finished or crashed. Its central idea is that the bar animates according to actual processing speed, so a spinner visibly speeds up or slows down with throughput and keeps showing that work is still in progress even when a single step takes a long time.

What it concretely replaces is the habit of pressing RETURN repeatedly to confirm that a process has not died or that a remote SSH connection has not frozen, together with the absence of any reliable estimate of when a run will end. Instead of polling by hand, the user gets a live indicator, an ETA, and a final summary. It also replaces the practice of abandoning a run to fix a few items at the Python prompt and starting over, because the bar can be suspended and resumed.

Key capabilities

  • A live spinner that reacts to real processing speed, speeding up or slowing down as throughput changes, and making clear that a long task has not crashed or frozen.
  • A multithreaded update mechanism that refreshes the display at a fraction of processing speed to keep CPU usage low and avoid terminal spam, with calibration available; the README gives the example of 1,000,000 iterations per second producing roughly 60 updates per second.
  • An ETA calculated with an exponential smoothing algorithm, giving the time to completion so workload and time can be planned.
  • Automatic print and logging hooks that integrate with existing code and enrich those outputs with the current bar position at the moment they occurred.
  • A final receipt printed at the end of processing, listing total items, elapsed time, and observed throughput.
  • Detection of underflows and overflows, so hits, misses, or arbitrary counts can be tracked rather than only iterations actually performed.
  • The suspend() capability, which returns control to the Python prompt so items can be adjusted or fixed and then the same processing resumed as if it had never stopped.
  • A range of ready-made spinner and bar styles, factories for creating custom ones, and a check() tool for designing animations by previewing generated frames and animation cycles, alive, before installation.

Who uses it and how

  • Developers running long Python data processing or batch loops in a terminal who need to know whether the job is still alive and how long it has left.
  • Users working over SSH on remote machines, where a responsive spinner distinguishes a slow task from a frozen connection.
  • Teams processing large item sets who need to fix a subset of items manually mid-run; they suspend the bar, edit the data at the Python prompt, and resume without losing position.
  • Codebases already using print or logging, which receive bar position information through the automatic hooks without changes to output handling.
  • Workloads tracking counters other than the iteration count, such as hits and misses, using the underflow and overflow detection.

Getting started

Install from PyPI with pip install alive-progress. The package is the only artefact required; the README's badge links point to the PyPI project page for the current version and supported Python versions.

How it compares

No list of paid products replaced by this project appears in the facts, and no competing tool is named. It therefore stands alone in this registry. The README does make one comparative claim: that no other progress bar anywhere in any language offers the suspend and resume capability.

When to use it — and when not to

A self-hoster runs nothing extra beyond a Python environment, since the library is imported rather than deployed as a service, and the facts mention no database, storage, or mail server to operate. It is not the right choice for non-Python projects, or for workloads that are not iterative, where throughput, ETA, and item counts carry no meaning. The available facts are also thin on maintenance detail: the README excerpt is truncated and no release history is provided, so the last push timestamp is the only currency signal available.

project readme (upstream, from github) — read inline

Donate with PayPal button

alive-progress logo

alive-progress

Maintenance PyPI version PyPI pyversions Downloads Downloads GitHub Sponsors

Have you ever wondered where your lengthy processing was at, and when would it finish? Do you usually hit RETURN several times to make sure it didn't crash, or the SSH connection didn't freeze? Have you ever thought it'd be awesome to be able to pause some processing without hassle, return to the Python prompt to manually fix some items, then seamlessly resume it? I did...

I've started this new progress bar thinking about all that, behold the alive-progress! 😃

alive-progress demo

Introducing the newest concept in progress bars for Python! alive-progress is in a class of its own, with an array of cool features that set it apart. Here are a few highlights:

  • A mesmerizing live spinner that reacts to your actual processing speed, i.e., it dynamically gets faster or slower with your throughput, and clearly shows a lengthy task is in progress, i.e., did not crash even if taking too long (and your SSH connection did not freeze if remote).
  • An efficient multithreaded bar that updates itself at a fraction of the actual processing speed to keep CPU usage low and avoid terminal spamming (1,000,000 iterations per second equates to roughly 60 updates per second), and you can also calibrate it to your liking.
  • An accurate ETA (Expected Time of Arrival) with an intelligent Exponential Smoothing Algorithm that shows the time to completion, allowing you to plan your time and manage your workload more effectively.
  • Automatic print and logging hooks that provide seamless and efortless integration with any code, even enriching these outputs with the current bar position when they occurred.
  • It prints a nice final receipt when your processing ends, including the total items, the elapsed time, and the observed throughput.
  • It detects under and overflows, enabling you to track hits, misses, or any desired counts, not necessarily the actually performed iterations.
  • You can suspend it! That's right, you heard it here first! No other progress bar anywhere in any language has this feature! You can suspend your processing and get back to the Python prompt, adjust or fix some items, and then get back into the same processing as if it had never stopped!
  • It is highly customizable, with a smorgasbord of ready-to-use spinner and bar styles, as well as several factories to easily create yours! There's even a super powerful check() tool that helps you design your own animations! You can see how the generated frames and animation cycles will look like, exploded on your screen, and even see it alive before installing in alive-progress! It's the coolest tool in the world! Unleash your creativity!

Table of contents

This README is always evolving, so do take a more comprehensive look from time to time... You might find great new details in other sections! 😊

📌 What's new in 3.3 series

The latest alive-progress release is finally here, and it brings some exciting improvements! 🎉

Here's a summary of the most notable changes:

  • Now the final receipt is available in the alive_bar handle, even after the bar has finished!
    • This allows you to access the final receipt data and use it in your code, such as logging or displaying it in a custom way.
  • You can change the bar title and text even after it has finished, so you can update the final receipt with new information or context.
  • Included the elapsed time in the alive_bar handle, with full precision, so you can access the exact time it took to complete your processing.

Technical changes:

  • Changed the grapheme dependency which was no longer maintained to graphemeu, which is a maintained fork of the original one.
  • Added py.typed in the distribution to satisfy mypy and other type checking tools.
  • Included Python 3.14 support (in CI for now).

Previous releases

New in 3.2 series

After about a year of reassuring stability, the new alive-progress has finally landed!

The main features and improvements are:

  • The print/logging hooks now support multithreading => a highly requested feature: everything is synchronized now so you can print from different threads without issues! No more queues to send messages to the main thread!
  • Rounded ETAs for long tasks => now the ETA automatically decreases its precision the higher it gets, making it smoother and easier to read!
  • Support for zero and even negative bar increments => now on par with the manual mode, you can call bar() with 0 and even -N to make it go backwards! Useful when you couldn't make any progress in an iteration or had to roll back something!

And more!

  • Custom offset for the enriched print/logging messages => now you can specify a custom enrich_offset to use for printed or logged messages, allowing you to start with on 1: or continue where you left from previous computations!
  • Improved compatibility with PyInstaller => now custom bars, unknown bars, and spinners work when bundled!
  • Improved compatibility with Celery => it will just work within Celery tasks!
  • drop python 3.7 and 3.8, hello 3.12 and 3.13!
New in 3.1 series

A very cool update here! In addition to polishing things up and improving terminal support, now alive-progress supports resuming computations!

When processing huge datasets or things that take a long time, you might either use batches or cache partial results. Then, in case it stops and is restarted, you end up skipping all those already done items very quickly, which makes the alive_bar think you're processing thousands of items per second, which in turn completely ruins the ETA... But not anymore! Just tell bar() that you've skipped items... 👏

You can use it in two ways:

1. If you do know where you've stopped:

readme truncated — read the full docs on github

Frequently asked questions

Is alive-progress free to use?

alive-progress is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does alive-progress do?

A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!

What is alive-progress written in?

alive-progress is primarily written in Python. Its source is publicly available at https://github.com/rsalmei/alive-progress, and it has 6,307 GitHub stars.