NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #62 most downloaded on PyPI
Fast, Extensible Progress Meter
Last release 23 days ago
11 Sep 2026
Ships unpredictably
gaps range from 9 days to 1.2 years
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
151 releases · first in 2013
contrib.concurrent : fix no-len iterables ( #1830 <- #1828 )
🧯 contrib.concurrent : fix no-len iterables ( #1830 <- #1828 )
🔍 tests: major overhaul ( #1819 )
🔨 update AI policy in PR template
🧹 misc lint & tidy
🛠 CI: bump workflow actions & pre-commit hooks
contrib.concurrent: major improvements
One column per quarter.
contrib.concurrent: major improvements
process_map(mp_context, max_tasks_per_child), thread_map(thread_name_prefix) (#1265)total based on shortest iterable length (#1473)max_workers (#1543 <- #1530, #1518)timeout, buffersize (#1576)as_completed (#1709 <- #1565)tqdm.concurrent.intepreter_map (#1777)asyncio: support iterables with only __aiter__ (#1714 <- #1686)reset(float("inf")) (#1783 <- #1781, #651)contrib.concurrent: major improvements
process_map(mp_context, max_tasks_per_child), thread_map(thread_name_prefix) (#1265)total based on shortest iterable length (#1473)max_workers (#1543 <- #1530, #1518)timeout, buffersize (#1576)as_completed (#1709 <- #1565)tqdm.concurrent.intepreter_map (#1777)asyncio: support iterables with only __aiter__ (#1714 <- #1686)reset(float("inf")) (#1783 <- #1781, #651)contrib.logging: preserve filters (#1775 <- #1581)
contrib.logging: preserve filters (#1775 <- #1581)rich: misc fixes (#1773)
len) (#1391)AttributeError on exit (#1674)total=float('inf') (#1781 <- #651)AttributeError on exit (#1778 <- #1668, #1537, #261)add tqdm.asyncio.gather(..., return_exceptions=False) (#1776, #1671 <- #1286)
tqdm.asyncio.gather(..., return_exceptions=False) (#1776, #1671 <- #1286)whl | asc
🎉 add tqdm.asyncio.gather(..., return_exceptions=False) ( #1776 , #1671 <- #1286 )
🛠 misc minor framework updates
bump workflow actions & pre-commit hooks
trim to ncols even when '{bar}' not in bar_format (#1717, #1767 <- #1658)
ncols even when '{bar}' not in bar_format (#1717, #1767 <- #1658)tqdm.write when stdout=None (#1768 <- #1654)utils : delay os.get_terminal_size ( #1763 <- #1760 )
utils: delay os.get_terminal_size (#1763 <- #1760)autonotebook: support QtConsole, Spyder, JupyterLite (#1763, #1628, #1559 <- #1283, #1098, #512)git-fametox.ini -> pyproject.toml, move tox-gh-actions -> tox-ghutils: delay os.get_terminal_size (#1763 <- #1760)autonotebook: support QtConsole, Spyder, JupyterLite (#1763, #1628, #1559 <- #1283, #1098, #512)git-fametox.ini -> pyproject.toml, move tox-gh-actions -> tox-ghrevert accidental change to ascii default (fixes #1760 )
ascii default (fixes #1760)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-7: character maps to <undefined> can be fixed by installing tqdm!=4.68.0,!=4.68.1rst -> md syntaxwhl | asc
🧯 revert accidental change to ascii default (fixes #1760 )
UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-7: character maps to <undefined> can be fixed by installing tqdm!=4.68.0,!=4.68.1
📘 misc docs updates
fix links
replace stray rst -> md syntax
consistent "progress bar" terminology ( #1737 )
🧯 tests: fix coverage (fixes #1760 )
set name of monitor thread (#1669, #1752 <- #1435)
atexit deadlock (#1751 <- #528, #627, #1435, #1564)soft-deprecate tqdm.utils.envwrap -> envwrap
fix py3.7 dependencies ( #1706 <- #1705 )
support pandas>=3 ( #1703 <- #1701 , #1650 , #1700 )
pandas>=3 (#1703 <- #1701, #1650, #1700)format_interval for negative numbers (#1703)pre-commit dependenciespyupgradesetuptools-scm usagepandas>=3 (#1703 <- #1701, #1650, #1700)format_interval for negative numbers (#1703)pre-commit dependenciespyupgradesetuptools-scm usage- fix gui (matplotlib syntax) (#1629) - misc test & framework updates - bump pytest-asyncio (#1630) - fix codecov rate limit - fix pybuild - sync depe
gui (matplotlib syntax) (#1629)pytest-asyncio (#1630)codecov rate limitcontrib.discord: replace disco-py with requests
contrib.discord: replace disco-py with requests (#1536)whl | asc
cli: zip-safe --manpath, --comppath
--manpath, --comppath (#1627)pytest DeprecationWarningsnapcraft buildnbval DeprecationWarningsupport ncols auto-detection on FreeBSD (#1602 <- https://github.com/casperdcl/git-fame/issues/98)
ncols auto-detection on FreeBSD (#1602 <- https://github.com/casperdcl/git-fame/issues/98)🎉 support ncols auto-detection on FreeBSD ( #1602 <- casperdcl/git-fame#98 )
🧯 fix Python 3.13 CLI ( #1594 <- #1585 )
🧯 fix Python 3.13 tests ( #1595 <- python/cpython#117536#issuecomment-2036883124 )
🛠 misc framework updates ( #1602 )
add official Python 3.12 support
bump deps ( NiklasRosenstein/pydoc-markdown#329 , tikitu/jsmin#44 )
rich: fix completion (#1395 <- #1306)
rich: fix completion (#1395 <- #1306)whl | asc
🧯 rich : fix completion ( #1395 <- #1306 )
🧹 minor framework updates & code tidy ( #1578 )
cli: eval safety (fixes CVE-2024-34062, GHSA-g7vv-2v7x-gj9p)
cli: eval safety (fixes CVE-2024-34062, GHSA-g7vv-2v7x-gj9p)whl | asc
fix Python 3.12 DeprecationWarning on import
pandas: add DataFrame.progress_map (#1549)notebook: fix HTML padding (#1506)keras: fix resuming training when verbose>=2 (#1508)format_num negative fractions missing leading zero (#1548)DeprecationWarning on import (#1519)pandas warningsasv (https://github.com/airspeed-velocity/asv/issues/1323)notebook docstring indentationwhl | asc
🎉 pandas : add DataFrame.progress_map ( #1549 )
🧯 notebook : fix HTML padding ( #1506 )
🧯 keras : fix resuming training when verbose>=2 ( #1508 )
🧯 fix format_num negative fractions missing leading zero ( #1548 )
🧯 fix Python 3.12 DeprecationWarning on import ( #1519 )
🧹 linting: use f-strings ( #1549 )
🔍 update tests ( #1549 )
fix pandas warnings
fix asv ( airspeed-velocity/asv#1323 )
fix macos notebook docstring indentation
🛠 CI: bump actions ( #1549 )
fix utils.envwrap types (#1493 <- #1491, #1320 <- #966, #1319)
utils.envwrap types (#1493 <- #1491, #1320 <- #966, #1319)
export TQDM_POSITION=-1environment variables to override defaults (TQDM_*) (#1491 <- #1061, #950 <- #614, #1318, #619, #612, #370)
TQDM_*) (#1491 <- #1061, #950 <- #614, #1318, #619, #612, #370)
export TQDM_MININTERVAL=5 to avoid log spamtqdm.utils.envwrapos.path => pathlib.Path🔨 environment variables to override defaults ( TQDM_* ) ( #1491 <- #1061 , #950 <- #614 , #1318 , #619 , #612 , #370 )
e.g. in CI jobs, export TQDM_MININTERVAL=5 to avoid log spam
add tests & docs for tqdm.utils.envwrap
🧯 fix & update CLI completion
🧯 fix & update API docs
🧹 minor code tidy: replace os.path => pathlib.Path
🧯 fix docs image hosting
🛠 release with CI bot account again ( cli/cli#6680 )
exclude examples from distributed wheel
examples from distributed wheel (#1492)migrate setup.{cfg,py} => pyproject.toml
setup.{cfg,py} => pyproject.toml (#1490)
asv benchmarkspre-commitadd Python 3.11 and drop Python 3.6 support (#1439, #1419, #502 <- #720, #620)
support ipywidgets>=8 (#1366, #1361 <- #1310, #1359, #1360, #1364)
ipywidgets>=8 (#1366, #1361 <- #1310, #1359, #1360, #1364)
whl | asc
🎉 support ipywidgets>=8 ( #1366 , #1361 <- #1310 , #1359 , #1360 , #1364 )
fix jupyter lab display
update notebook tests
- 🎉 add contrib.slack
- rich: expose options kwargs (#1282) - autonotebook: re-enable VSCode (#1309) - misc docs typos (#1301, #1299) - update dev dependencies
rich: expose options kwargs (#1282)autonotebook: re-enable VSCode (#1309)whl | asc
🎉 rich : expose options kwargs ( #1282 )
🔨 autonotebook : re-enable VSCode ( #1309 )
📘 misc docs typos ( #1301 , #1299 )
🔨 update dev dependencies ( #1311 )
fix stderr/stdout missing flush() (#1248 <- #1177)
flush() (#1248 <- #1177)whl | asc
🧯 fix stderr/stdout missing flush() ( #1248 <- #1177 )
⚡ misc speed improvements/optimisations
improve CLI startup time (replace pkg_resources => importlib)
__reversed__()__contains__()pkg_resources => importlib)tqdm.autonotebook warning & std fallback on missing ipywidgets (#1218 <- #1082, #1217)py3.10 testsconda dependenciespytest config (nbval, asyncio)misc build/dev framework updates
fix contrib.concurrent with generators (#1233 <- #1231)
contrib.concurrent with generators (#1233 <- #1231)whl | asc
🧯 fix notebook memory leak ( #1216 )
🧯 fix contrib.concurrent with generators ( #1233 <- #1231 )
contrib.logging: inherit existing handler output stream
contrib.logging: inherit existing handler output stream (#1191)PermissionError by using weakref in DisableOnWriteError (#1207)contrib.telegram creation rate limit handling (#1223, #1221 <- #1220, #1076)keras dependencies (#1222)asyncio.gather API consistency with stdlib
asyncio.gather API consistency with stdlib (#1212)install colorama on Windows (#1139, #454)
colorama on Windows (#1139, #454)leave=False (#1189)pandas==1.3.0 (#1199)keras potential AttributeError (#1184 <- #1183)asyncio tests (#1176)stdout/err before first render (#1177)fix utils._screen_shape_linux() sometimes raising ValueError
utils._screen_shape_linux() sometimes raising ValueError (#1174)keras support for initial_epoch (#1150 <- #1138)
keras support for initial_epoch (#1150 <- #1138)add contrib.logging helpers for redirecting to tqdm.write() (#1155 <- #786)
contrib.logging helpers for redirecting to tqdm.write() (#1155 <- #786)delay in notebook (#1142)contrib.tmap, tzip not using tqdm_class (#1148)notebook tests (#1143)add tqdm.dask.TqdmCallback (#1079, #279 <- #278)
tqdm.dask.TqdmCallback (#1079, #279 <- #278)asyncio.gather() (#1136)length_hint (#1068)--delay[notebook] extra (#1135)add start delay in seconds (#836 <- #1069, #704)
delay in seconds (#836 <- #1069, #704)whl | asc
🎉 add start delay in seconds ( #836 <- #1069 , #704 )
🔍 add tests
🧹 misc code tidy ( #1130 )
📘 misc documentation updates
suppress deprecated pandas warnings (#824, #1094)
DummyTqdmFile (#960)pandas warnings (#824, #1094)fix attribute errors when disabled
reset() (#1125)unpause()whl | asc
🧯 fix attribute errors when disabled ( #1126 )
reset() ( #1125 )
unpause()
🔍 add tests
fix repr() & format_dict when disabled (#1113 <- #624)
repr() & format_dict when disabled (#1113 <- #624)__repr__() => __str__()minor formatting improvements for tqdm.gui
tqdm.tk (#1006)tqdm.richtqdm.guidisplay() inheritance/overrideswitch pre-commit from make to python
pytest quickermake to python.gitignorefix (Rolling|Expanding).progress_apply() on pandas==1.2.0
(Rolling|Expanding).progress_apply() on pandas==1.2.0 (#1106)whl | asc
🧯 fix (Rolling|Expanding).progress_apply() on pandas==1.2.0 ( #1106 )
📘 minor documentation updates
fix ASCII notebook export (#937, #1035, #1098)
tqdm.guitqdm.notebooktqdm.contrib.telegramtqdm.contrib.discordupdate snap build & deploy method
py3.4 (no longer tested) (#1091)snap build & deploy methodwhl | asc
⚠️ drop py3.4 (no longer tested) ( #1091 )
🛠 misc CI updates ( #1091 )
update snap build & deploy method
bot releases
get rid of get_new (#1085 <- #1084, #509)
get_new (#1085 <- #1084, #509)whl | asc
🔨 get rid of get_new ( #1085 <- #1084 , #509 )
⚡ minor CI framework optimisations
provide get_new() helper for mixed subclasses in nested mode
get_new() helper for mixed subclasses in nested mode (#509)asyncio (#1074)
break hazarddistutils in favour of setuptools/setup.cfg (#723, #721)devel PRssetuptools_scm (#722)
allow delaying display() to a different notebook cell (#1059 <- #909, #954)
display() to a different notebook cell (#1059 <- #909, #954)
notebook argument display=True (use display=False with display(tqdm_object.container))keras.TqdmCallback support for initialiser arguments (use display=False with tqdm_callback_object.display()) (#1059 <- #1065)add {eta} datetime bar_format argument (#1055 <- #1051)
{eta} datetime bar_format argument (#1055 <- #1051)
bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt} [{rate_fmt} ETA:{eta:%y-%m-%d %H:%M}{postfix}]'--update & --update_tonosetests with pytest (#1052, #1045)fixed platform.system() causing fork() warnings
platform.system() causing fork() warnings (#691)contrib.concurrent.process_map pickling error with threading.RLock (#920)fix multiprocessing lock creation leak (#982, #936, #759)
add bar colour option (#1040 <- #450)
colour option (#1040 <- #450)
notebook as well as std/CLInotebook improvements (#1032 <- #1031)
reset() (handle width and colour)file is closed (#1041, #1036 <- #1033)whl | asc
🎉 add bar colour option ( #1040 <- #450 )
for notebook as well as std /CLI
plain text as well as hex (e.g. 'green' or ' #00 ff00')
🎉 notebook improvements ( #1032 <- #1031 )
split bar description into separate widget
improve reset() (handle width and colour)
🧯 fix exceptions when file is closed ( #1041 , #1036 <- #1033 )
🔍 add & update tests
📘 minor documentation updates
🔨 move and configure issue/pr templates
CLI: add --tee (#1014 <- #1013)
--tee (#1014 <- #1013)--update and --update_to (#996 <- #975)--null (#996)- instead of _ in options (e.g. --update-to)update() return True on display to ease efficient use of custom callbacks (#845)py>=3 CLI --delim encoding errorpy>=3.5 version detection in tqdm.auto (#1029 <- #1028)initial (#1021 <- #689)- 🧯 fix notebook formatting
fix ANSI escape codes breaking tqdm.write (#692, #777)
tqdm.write (#692, #777)--version crash on missing git/refs/heads (#635)contrib.tenumerate ignoring total (#1017)kwargs copy issuesnotebook display for unknown total (#1015)asyncio inherit from std rather than autoauto multi-inherit from autonotebook, asyncio on Python3.5+docker-compose requirements (#771)add tqdm.asyncio (#1004, #772, #91 <- #65)
tqdm.asyncio (#1004, #772, #91 <- #65)
async for row in tqdm(iterable))coroutine.send (tqdm(coroutine).send)as_completed wrapper (for f in tqdm.as_completed(fs))contrib.discord logging verbositypandas() modifying **kwargs bugexamples/ folder
miniters test (#1003)/tagadd contrib.discord (similar to contrib.telegram)
contrib.discord (similar to contrib.telegram) (#976)contrib.bells to auto-enable all extrascontrib.utils_worker for common slow tasks (e.g. web I/O)
gui TypeError on unknown len() (#971)ipywidgets (#872)contrib.discord and contrib.telegrampy3.8 support (#986)snap buildsfix missing sys.setcheckinterval in py3.9
sys.setcheckinterval in py3.9 (#978)keras.TqdmCallback compatibility with tensorflow==2.2.0 (#979)contrib.concurrent correct max_workers (#977)xrange (#965)add contrib.telegram #949 <- #948
contrib.telegram #949 <- #948bash tab completion and --comppath #946, #947 <- #858external_write_mode #940requests examples (#242)Your coding agent can read these notes before it upgrades. Set up the MCP server →