v2.5.3
Highlights
This release brings the Python, TypeScript, Rust, and Go package version metadata into sync at 2.5.3 and rolls up the retry parity work that landed since v2.5.0. It also fixes the release packaging so optional middleware and bridge integrations do not become hard dependencies.
- Optional integration packages are not hard dependencies. OpenTelemetry and bridge-specific packages stay out of required package dependencies. The Go core module now depends only on
github.com/google/uuid; OTEL is not required by default. TypeScript keeps OTEL/bridge packages as optional peers, and Python keeps bridge packages in extras/lazy imports. retrynow preserves sync functions instead of forcing async wrappers. Python and TypeScript retry wrappers auto-detect sync callables, return synchronously, and block synchronously for retry sleeps and semaphore waits while preserving the existing async behavior.- TypeScript
retrynow supports decorator and closure usage. The same retry implementation works asretry(...)(fn), as a standard TypeScript method decorator, and as a legacyexperimentalDecoratorsmethod decorator while keeping the wrapped method signature and return type intact. - Rust now has first-class retry support.
abxbus::retry!supports sync and async free functions and methods with retry/backoff, per-attempt timeout, retry predicates, semaphore limits, semaphore scopes, and multiprocess semaphore coordination. - Retry remains standalone across runtimes. The retry modules are documented and tested as usable without creating an
EventBusor depending on bus state. - Sync and async retry coverage was expanded across languages. Python, TypeScript, and Rust now have mirrored sync/async tests for retry attempts, backoff, error filtering, timeouts, semaphore behavior, reentrancy, multiprocess locking, standalone usage, and method/function wrapping.
- Rust crate imports now use
abxbus. The Rust crate package name isabxbuswhile the repository directory remainsabxbus-rust; docs and examples were updated accordingly. - Retry docs were refreshed. The docs now show Python decorators, TypeScript closure wrappers, TypeScript
@retry(...)decorators, Rustabxbus::retry!, and the supported sync/async callable forms for functions, methods, lambdas, and arrow functions where each language supports them.
Validation
Local checks run before publishing:
uv run pyright tests/test_eventbus_locking.py abxbus/retry.py-> passeduv run ruff check tests/test_eventbus_locking.py abxbus/retry.py abxbus/__init__.py-> passeduv run pytest-> 573 passed, 5 warningspnpm --dir abxbus-ts run typecheck-> passedpnpm --dir abxbus-ts exec eslint src/retry.ts tests/EventBus_locking.test.ts-> passedpnpm --dir abxbus-ts test-> 563 passed- TypeScript legacy decorator compile check with
--experimentalDecorators-> passed cargo fmt --all --check && cargo test-> passedpnpm --dir abxbus-ts run build-> passeduv build-> builtabxbus-2.5.3sdist and wheelcargo build --manifest-path abxbus-rust/Cargo.toml-> passed(cd abxbus-go && go test ./...)-> passed after removing OTEL from hard deps- Dependency manifest checks confirm no OTEL/bridge packages in Python, TypeScript, Rust, or Go required dependencies
Compare
Full compare: v2.5.0...v2.5.3