NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #5288 most downloaded on PyPI
A connector for Bleak Clients that handles transient connection failures
Last release 20 days ago
14 Sep 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
4 years old
106 releases · first in 2022
This release is published under the MIT License.
This release is published under the MIT License.
Detailed Changes: v4.7.0...v4.7.1
One column per quarter.
This release is published under the MIT License.
This release is published under the MIT License.
ci: Bump browniebroke/hacktoberfest-labeler-action from 2.6.0 to 2.7.0 in the github-actions group (#318, 52c6cc0)
deps-dev: Bump blockbuster from 1.5.26 to 1.5.27 (#319, b85c1a0)
deps-dev: Bump pytest-asyncio from 1.3.0 to 1.4.0 (#295, cce9119)
Detailed Changes: v4.6.3...v4.7.0
This release is published under the MIT License.
This release is published under the MIT License.
Detailed Changes: v4.6.2...v4.6.3
Mark ble_device_callback as deprecated and unused ( #287 , edb1520 )
This release is published under the MIT License.
Fix PyPI classifier from Pre-Alpha to Production/Stable (#305, 6e089ea)
ci: Bump the github-actions group across 1 directory with 6 updates (#308, d6ed953)
deps: Bump bluetooth-adapters from 2.1.1 to 2.3.0 (#290, f926c9a)
Clarify cached_services parameter is effectively unused (#292, fa41a1b)
Document DISCONNECT_TIMEOUT in Constants section (#284, 6462cb6)
Mark ble_device_callback as deprecated and unused (#287, edb1520)
Detailed Changes: v4.6.1...v4.6.2
Drop deprecated BLEDevice kwargs from test fixtures ( #257 , d037fae )
This release is published under the MIT License.
ci: Bump codecov/codecov-action from 5 to 6 in the github-actions group (#243, 83389fb)
deps-dev: Bump pygments from 2.19.2 to 2.20.0 (#250, 4b7bf41)
deps-dev: Bump pytest-cov from 7.0.0 to 7.1.0 (#271, 2154c69)
deps-dev: Bump requests from 2.32.5 to 2.33.0 (#247, 617032c)
Export BleakConnectionError and BleakOutOfConnectionSlotsError in all (#278, cf2f9a3)
Fix copy-paste docstring on BleakConnectionError (#279, f882c56)
Drop dead rssi variable from establish_connection debug logs (#280, 5add034)
Import DISCONNECT_TIMEOUT from const instead of redefining (#282, 7888a3d)
Cover clear_cache early returns and RemoveDevice send path (#265, bd29b78)
Cover EOFError reconnect path in establish_connection (#263, 0d16a08)
Cover establish_connection branches with debug logging off (#276, 4fa03f4)
Cover get_bluez_device, get_device_by_adapter and get_connected_devices (#264, 2d02ba3)
Cover missing branches in calculate_backoff_time (#259, 5570aed)
Cover restore_discoveries early-return branches (#275, 0130731)
Cover wait_for_device_to_reappear no-debug branches and _get_services_cache (#270, 51b5434)
Cover wait_for_disconnect and reappear debug logging (#262, 373806d)
Drop deprecated BLEDevice kwargs from test fixtures (#257, d037fae)
Integrate blockbuster to catch blocking calls in async tests (#256, f1b8c6e)
Make sync tests async to silence pytest-asyncio warnings (#258, d4e8377)
Stop _prime_dbus_coverage from leaking an event loop (#277, 6324ada)
Detailed Changes: v4.6.0...v4.6.1
This release is published under the MIT License.
This release is published under the MIT License.
ci: Bump the github-actions group with 2 updates (#210, e0f7eb8)
deps: Bump sphinx-rtd-theme from 3.0.2 to 3.1.0 (#211, a11dca4)
deps-dev: Bump pytest-cov from 6.2.1 to 7.0.0 (#195, 42bbca4)
Detailed Changes: v4.5.0...v4.6.0
This release is published under the MIT License.
This release is published under the MIT License.
ci: Bump the github-actions group across 1 directory with 5 updates (#197, 3e9f6e9)
ci: Bump the github-actions group with 4 updates (#204, 6fb5d1b)
deps: Bump bluetooth-adapters from 2.0.0 to 2.1.1 (#194, d9a0aa6)
deps-dev: Bump pytest-asyncio from 1.1.0 to 1.3.0 (#200, 9845789)
Detailed Changes: v4.4.4...v4.5.0
This release is published under the MIT License.
This release is published under the MIT License.
Detailed Changes: v4.4.3...v4.4.4
This release is published under the MIT License.
This release is published under the MIT License.
Detailed Changes: v4.4.2...v4.4.3
This release is published under the MIT License.
This release is published under the MIT License.
Detailed Changes: v4.4.1...v4.4.2
This release is published under the MIT License.
This release is published under the MIT License.
Detailed Changes: v4.4.0...v4.4.1
_This release is published under the MIT License._
This release is published under the MIT License.
Detailed Changes: v4.3.0...v4.4.0
_This release is published under the MIT License._
This release is published under the MIT License.
Detailed Changes: v4.2.0...v4.3.0
_This release is published under the MIT License._
This release is published under the MIT License.
Detailed Changes: v4.1.0...v4.2.0
_This release is published under the MIT License._
This release is published under the MIT License.
Detailed Changes: v4.0.2...v4.1.0
_This release is published under the MIT License._
This release is published under the MIT License.
Detailed Changes: v4.0.1...v4.0.2
_This release is published under the MIT License._
This release is published under the MIT License.
ci: Bump the github-actions group across 1 directory with 3 updates (#178, a29d24b)
ci: Bump the github-actions group with 2 updates (#171, 0374adb)
deps-dev: Bump pytest-asyncio from 1.0.0 to 1.1.0 (#172, b73dc78)
Detailed Changes: v4.0.0...v4.0.1
_This release is published under the MIT License._
This release is published under the MIT License.
ci: Bump the github-actions group with 2 updates (#164, 9050ec4)
ci: Bump the github-actions group with 2 updates (#162, 66738aa)
ci: Bump the github-actions group with 2 updates (#160, 34a3448)
deps-dev: Bump pytest-asyncio from 0.25.3 to 0.26.0 (#158, 7fc1b70)
deps-dev: Bump pytest-asyncio from 0.26.0 to 1.0.0 (#165, 5d3cbfd)
deps-dev: Bump pytest-cov from 6.1.0 to 6.1.1 (#156, ab91190)
deps-dev: Bump pytest-cov from 6.1.1 to 6.2.1 (#166, 7cab7be)
Detailed Changes: v3.10.0...v4.0.0
_This release is published under the MIT License._
This release is published under the MIT License.
dependabot does not yet support new pyproject.toml format
Bumps the github-actions group with 8 updates in the / directory:
| Package | From | To | | --- | --- | --- | | actions/checkout | 3 | 4 | | actions/setup-python | 3 | 5 | | pre-commit/action | 2.0.3 | 3.0.1 | | wagoid/commitlint-github-action | 4.1.11 | 6.2.1 | | codecov/codecov-action | 3 | 5 | | python-semantic-release/python-semantic-release | 7.34.6 | 9.21.0 | | browniebroke/hacktoberfest-labeler-action | 2.2.0 | 2.3.0 | | tiangolo/issue-manager | 0.4.0 | 0.5.1 |
Updates actions/checkout from 3 to 4 - Release notes - Changelog - Commits
Updates actions/setup-python from 3 to 5 - Release notes - Commits
Updates pre-commit/action from 2.0.3 to 3.0.1 - Release notes - Commits
Updates wagoid/commitlint-github-action from 4.1.11 to 6.2.1 - Changelog - Commits
Updates codecov/codecov-action from 3 to 5 - Release notes - Changelog - Commits
Updates python-semantic-release/python-semantic-release from 7.34.6 to 9.21.0 - Release notes - Changelog - Commits
Updates browniebroke/hacktoberfest-labeler-action from 2.2.0 to 2.3.0 - Release notes - Changelog - Commits
Updates tiangolo/issue-manager from 0.4.0 to 0.5.1 - Release notes - Commits
--- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: github-actions
dependency-name: actions/setup-python dependency-type: direct:production
dependency-name: pre-commit/action dependency-type: direct:production
dependency-name: wagoid/commitlint-github-action dependency-type: direct:production
dependency-name: codecov/codecov-action dependency-type: direct:production
dependency-name: python-semantic-release/python-semantic-release dependency-type: direct:production
dependency-name: browniebroke/hacktoberfest-labeler-action dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: github-actions ...
Signed-off-by: dependabot[bot] support@github.com
chore: update pyproject
chore: adjust actions
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston nick@koston.org
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
updates:
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Detailed Changes: v3.9.0...v3.10.0
Add internal stop_discovery method for habluetooth (#148) (`ae9feac`)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Update poetry to v2 (#144) (`9b45308`)
Bumps bluetooth-adapters from 0.21.0 to 0.21.1. - Release notes - Changelog - Commits
--- updated-dependencies: - dependency-name: bluetooth-adapters dependency-type: direct:production
update-type: version-update:semver-patch ...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Add method to fetch current allocations (#138) (`4dc325b`)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Add support for getting callbacks on slot allocation change (#133) (`ae21ecb`)
Create dependabot.yml
(bece8dd)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston nick@koston.org
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Add support for Python 3.13 (#119) (`f2c3fa5`)
updates: - github.com/commitizen-tools/commitizen: v2.42.0 → v3.27.0 - github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.6.0 - github.com/pre-commit/mirrors-prettier: v2.7.1 → v4.0.0-alpha.8 - github.com/asottile/pyupgrade: v3.3.1 → v3.16.0 - github.com/PyCQA/isort: 5.12.0 → 5.13.2
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
updates: - github.com/commitizen-tools/commitizen: v3.29.0 → v3.29.1 - github.com/PyCQA/bandit: 1.7.9 → 1.7.10
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Add device path to the disconnect debug logging (#111) (`8e010b3`)
Add close_stale_connections_by_address (#110) (`74de12f`)
Handle services changed during connecting (#108) (`1c65413`)
Correct fetching the global bluez manager when its not running (#106) (`38c63a9`)
Remove devices on cache clear to cleanup disk cache (#103) (`349e0de`)
Ensure timeouts work with py3.11 (#102) (`4951aef`)
Increase bleak safety timeout to allow for longer disconnect timeout (#101) (`39380a7`)
Check more often for a device to reappear after the adapter runs out of slots (#100) (`4c9c9c0`)
Decrease backoff times (#97) (`37b71c8`)
Bluez services cache clear was ineffective (#93) (`ec86cb6`)
Update for bleak 0.20.0 (#92) (`78f9a1e`)
Bump python-semantic-release (#90) (`c401988`)
c401988)c3b5ff8)8ddf242)58f9958)Typing for generic BleakClient classes and the retry_bluetooth_connection_error decorator
(#86,
8ddf242)
Using a bound TypeVar we can ensure that any client class we are dealing with is either BleakClient or a descendant of it and that type then stays consistent throughout the lifecycle.
Signed-off-by: Felix Kaechele felix@kaechele.ca
Use TypeVar together with ParamVar to drop the use of the unsafe cast operation.
Co-authored-by: J. Nick Koston nick@koston.org
BREAKING CHANGE: In preparation for the use of Python 3.10 typing features such as ParamSpec, which is unavailable on Python 3.9.
Following the schema of supporting the current and one previous Python release this drops support for Python 3.9.
Signed-off-by: Felix Kaechele felix@kaechele.ca
Co-authored-by: J. Nick Koston nick@koston.org
Make bluetooth-adapters install Linux only as well (#85) (`910f0b7`)
Remove freshen fallback logic since Home Assistant always provides us the best path to the device now (#83) (`0954d2d`)
_on_characteristic_value_changed in BleakSlotManager should accept any arguments (#82) (`71cc37e`)
Add utility function to get device_source (#81) (`d72ce15`)
Add connection slot manager (#80) (`d8bb8d9`)
Stop trying to get devices from bluez if dbus setup times out (#78) (`a8da722`)
Optimize IS_LINUX check in restore_discoveries (#77) (`f22eb33`)
Add restore_discoveries to fix missing devices (#76) (`f4432ac`)
Add function to clear the cache (#75) (`6ca6011`)
Always log the connection attempt number (#74) (`3306053`)
Avoid logging connecting and connected since our BLEDevice may be stale (#72) (`10e040c`)
Enable service cache by default since esp32s are unreliable without it (#71) (`0e90c1c`)
Stop trying to check dbus once the socket is missing (#70) (`74bd63b`)
Teach the connector about more esp32 errors and times (#68) (`09cb73d`)
Increase backoff when local ble adapter runs out of connection slots (#67) (`cac7e57`)
Adjust connect timeout to match macos write timeout (#66) (`1396fdc`)
Adjust backoffs for slower esp32 proxies (#64) (`702a829`)
Reduce logging as timeouts are expected (#63) (`8b91838`)
Mark ESP_GATT_ERROR as a transient error (#62) (`6d76ac4`)
Log the adapter when connecting (#61) (`ab873c8`)
Teach the connector about transient esp32 errors (#60) (`486fbbc`)
Increase timeouts now that bleak has resolved the timeout with service discovery and bluez (#59) (`2a65e27`)
Missing backoff execution with esp32 (#58) (`3229424`)
Ensure we back off for longer when out of slots (#57) (`efeced3`)
Your coding agent can read these notes before it upgrades. Set up the MCP server →