# What changed in tenacity

> 27 changes in tenacity 9 from its official release notes, upgrade guides and advisories: 1 breaking, 1 deprecations, 3 new APIs and options. Each one cited. Sources checked 2026-10-20. HTML: https://unstale.sh/pypi/tenacity/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## tenacity 9

### Breaking changes

- Only None and 0 are treated as “no wait.” (9.2.1) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.1)

### Deprecations

- initial is deprecated in favor of multiplier. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)

### New APIs and options

- AttemptManager supports use as an async context manager. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Retrying accepts a name parameter to produce more meaningful log output. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- wait_exponential_jitter adds a min parameter and supports timedelta values. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)

### Fixes and other changes

- Restores support for combining a callable and a strategy. (9.2.1) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.1)
- The direct-call path now respects enabled=False. (9.2.1) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.1)
- Annotates __radd__ as taking the int seed from sum(), correcting its type signature. (9.2.1) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.1)
- Restores support for falsy wait values. (9.2.1) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.1)
- after_log now guards against seconds_since_start being None. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- delay_since_first_attempt is initialized in statistics when begin() runs. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- An enabled parameter disables retrying when set to False, including through iterator protocols. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Retrying no longer hangs on cyclic exception __cause__ chains. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Underflow in the exponential wait threshold is avoided. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- func.retry.statistics stays synchronized with the copy's statistics. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- LoggerProtocol is now compatible with logging.Logger. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Ordinal suffixes are generated correctly for large numbers ending in 11, 12, or 13. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Static typing of @retry-decorated instance methods is fixed. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- The .retry, .statistics, and .retry_with attributes are exposed to type checkers. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Plain function composition with retry_base using | and & works again. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- retry_if_exception_message accepts an empty message. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Retrying and retry strategies can be pickled for multiprocessing. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Statistics remain visible when a function decorated with @retry is wrapped further. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Tracebacks are formatted inline for loguru compatibility. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- When TryAgain wraps a cause, the underlying exception is reraised. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- An empty strategy list is rejected with ValueError instead of IndexError. (9.2.0) — [release notes](https://github.com/jd/tenacity/releases/tag/9.2.0)
- Fixed annotations for retry() when using an async sleep= function. (9.1.4) — [release notes](https://github.com/jd/tenacity/releases/tag/9.1.4)
