Is your feature request related to a problem? Please describe.
The backoff library (litl/backoff) was archived in August 2025 and is no longer maintained. It is also incompatible with Python 3.14+ due to the removal of the deprecated asyncio.iscoroutinefunction() API.
Censys Python currently depends on backoff >=2.0.0,<3.0.0 and uses it in censys/common/base.py:
@backoff.on_exception(backoff.expo, ...) for retrying on server/timeout errors
@backoff.on_predicate(backoff.runtime, ...) for Retry-After header handling
Describe the solution you would like
Migrate to backon — a modern, actively maintained fork of backoff. It is a drop-in replacement: change only the import statement.
- import backoff
+ import backon
- @backoff.on_exception(backoff.expo, ...)
+ @backon.on_exception(backon.expo, ...)
Migration is trivial — the public API (on_exception, on_predicate, expo, runtime, max_tries, max_time, etc.) is identical. The pyproject.toml dependency would change from:
backoff = ">=2.0.0,<3.0.0"
to:
Describe alternatives you have considered
tenacity — popular but requires significantly more code changes (different API).
python-backoff — a community fork that keeps the same API but does not add new features and still relies on the deprecated asyncio.iscoroutinefunction().
- Staying on
backoff — the library is archived and will eventually break on newer Python versions.
backon is the only option that provides identical API compatibility with zero code changes beyond imports, plus it adds features like circuit breakers, hedging, testing utilities, and full type hints.
Additional context
Is your feature request related to a problem? Please describe.
The
backofflibrary (litl/backoff) was archived in August 2025 and is no longer maintained. It is also incompatible with Python 3.14+ due to the removal of the deprecatedasyncio.iscoroutinefunction()API.Censys Python currently depends on
backoff >=2.0.0,<3.0.0and uses it incensys/common/base.py:@backoff.on_exception(backoff.expo, ...)for retrying on server/timeout errors@backoff.on_predicate(backoff.runtime, ...)forRetry-Afterheader handlingDescribe the solution you would like
Migrate to
backon— a modern, actively maintained fork of backoff. It is a drop-in replacement: change only the import statement.Migration is trivial — the public API (
on_exception,on_predicate,expo,runtime,max_tries,max_time, etc.) is identical. Thepyproject.tomldependency would change from:to:
Describe alternatives you have considered
tenacity— popular but requires significantly more code changes (different API).python-backoff— a community fork that keeps the same API but does not add new features and still relies on the deprecatedasyncio.iscoroutinefunction().backoff— the library is archived and will eventually break on newer Python versions.backonis the only option that provides identical API compatibility with zero code changes beyond imports, plus it adds features like circuit breakers, hedging, testing utilities, and full type hints.Additional context