Releases: simpleble/simpleble
SimpleBLE v0.14.0
[0.14.0] - 2026-05-02
Notes
This release introduces the concept of Backend to the SimpleBLE API. Backends represent the underlying BLE implementation,
such as BlueZ on Linux, CoreBluetooth on macOS, and WinRT on Windows. These entities will become more relevant in future
releases as we move towards more elaborate workstreams, the first of which is the introduction of the Dongl backend.
The SimpleBLE Dongl is a suite of hardware and firmware products that bypass the host's BLE stack entirely, providing an
extremely consistent BLE experience across all platforms. Visit the SimpleBLE Dongl website
to learn more.
Added
- (SimpleJavaBLE) Added
CompletableFuturewrappers for blocking operations to allow clean asynchronous programming without blocking threads. - (SimpleBLE) Elevated
Backendclass to the public API, enabling programmatical control of all available backends. - (SimpleBLE) Introduced the Dongl backend for custom SimpleBLE hardware and firmware products.
Changed
- (SimpleJavaBLE) JNI API calls are now safely wrapped to catch C++ exceptions and bubble them up as Java
RuntimeExceptioninstead of crashing the JVM. - (SimpleJavaBLE) Updated
EventListenerinterfaces inAdapterandPeripheralto provide default empty implementations. - (Windows) Added configurable workaround for 3-second delay in disconnecting from a peripheral. (Thanks, josmithua!)
- (Android) Updated NDK version to r29.
Fixed
- (SimpleRsBLE) Fixed linker errors on some 64-bit Linux systems. (Thanks, davidedellagiustina!)
- (SimpleDBus) Fixed
bad_any_castexception in dictionaries withObjectPathorSignaturekeys. (Thanks, AndreiSvatko!) - (SimpleDBus) Fixed D-Bus parameter errors and strict validation rejections on BlueZ 5.83+ by properly skipping uninitialized optional properties. (Thanks, piranna!)
- (SimpleJavaBLE) Fixed missing macOS x64
.dylibartifact in the release package due to an omitted CI architecture target. - (SimpleJavaBLE) Fixed JNI symbol resolution errors (
UnsatisfiedLinkError) onAdapter.isBluetoothEnabled()andisPairedflags. - (SimpleJavaBLE) Fixed
jvm.dllinitialization conflicts on Windows that prevented the native bindings from loading smoothly. - (SimpleCBLE) Fixed remotely triggerable stack buffer overflows when handling manufacturer data and advertised services (EVE-2026-002, EVE-2026-003). (Thanks, Mr-IoT!)
- (SimpleBLE) Fixed stack buffer overflow in Dongl write function. (EVE-2026-001). (Thanks, Mr-IoT!)
- (SimpleBLE) Added missing export headers to
Config.h.
Special Acknowledgements
We'd like to thank Mr-IoT for reporting and providing patches for multiple security vulnerabilities (EVE-2026-001, EVE-2026-002, EVE-2026-003).
SimpleBLE v0.12.1
[0.12.1] - 2026-02-12
Added
- (SimpleAIBLE) Added AI capabilities to SimpleBLE with an MCP and an HTTP server.
- (SimplePyBLE) Added
simplepyble.aiomodule, providing anasyncio-compatible API with automatic callback cleanup and context manager support. - (SimplePyBLE) Exposed
Adapter.set_callback_on_power_on,Adapter.set_callback_on_power_off, andAdapter.get_connected_peripheralsin Python bindings. - (SimplePyBLE) Added
initialized()method toService,Characteristic, andDescriptorPython bindings.
Changed
- (SimpleCBLE) Modernized the library to match the C++ API, renamed internal files to
simplecble, and migrated to standard classes with internal exception handling, including a fix forPeripheral::underlying(). - (SimpleRsBLE) Modernized the library to match the C++ API.
- (SimpleRsBLE) Updated Minimum Supported Rust Version (MSRV) to 1.82.0 to resolve compatibility warnings with recent Rust compilers.
Fixed
- (SimpleBLE) Implemented
Adapter::get_connected_peripheralsin the C++ base frontend. - (SimpleBLE) Improved
OperationNotSupportedexceptions to include the requested operation and characteristic UUID. - (Linux) Added explicit capability checks for read/write/notify operations before invoking BlueZ operations.
- (Linux) Fixed
_cleanup_characteristics()to handle exceptions per characteristic callback cleanup, preventing incomplete cleanup. - (Windows) Fixed scan stop handling so
scan_is_active_is updated correctly when WinRT reports scanning has stopped.
Removed
- (SimpleBLE) Removed the
simpleble-ctarget and its associated source and header files from thesimpleblepackage. Users should migrate to thesimplecblelibrary, which provides a compatible C interface.
SimpleBLE v0.11.0
[0.11.0] - 2026-01-31
Added
- (SimpleDBus) Connection has a new
send_with_replymethod that doesn't block the underlying DBus event loop. - (SimpleBluez) Added support for advertising as a peripheral.
- (SimpleBluez) Added support for exposing services and characteristics as a peripheral.
- (Linux) Added support for powering on and off the adapter.
- (Linux) Added configuration option to select between the system and the user DBus bus.
- (Python) Added type annotations.
- (SimplePyBLE) Added a REST API server.
Changed
- (SimpleDBus) Interfaces now host their own property objects.
- (SimpleDBus) Property change callbacks are now handled by the individual property objects.
- (SimpleBluez) Moved some files around, which might change the include paths for some users.
- API CHANGE: (SimpleBluez) API for accessing internal BlueZ objects has been made more flexible.
- (SimpleBluez) Migrated all internal classes to use
send_with_reply. - (SimpleDBus)
Holderclass now has templated methods for creating and getting values.
Fixed
- (SimpleDBus) The Holder class now has appropriate getters, setters and defaults for object paths and signatures.
- (SimpleDBus) Fixed several issues around handling of Signature and ObjectPath data types.
Removed
- (SimpleDBus) Removed individual create/get functions in favor of templated versions.
- API CHANGE: (SimpleBluez) Deprecated the use of the
SIMPLEBLUEZ_USE_SESSION_DBUSenvironment variable in favor of a configuration option.
SimpleBLE v0.10.4
[0.10.4] - 2025-12-29
Added
- Introduced scaffolding for advanced low-level features.
- Configuration option to select which BlueZ backend to use.
- (Android) Added support to set and retrieve the JavaVM pointer.
- (Linux) Added frozen BlueZ backend in preparation for upcoming changes.
- (SimpleDBus) Added dedicated Properties interface.
- (Dongl) Added scaffolding for Dongl backend.
Changed
- (MacOS) Use a single Adapter object across all users of the CoreBluetooth backend.
- (Android) Use a single Adapter object across all users of the Android backend.
- (SimpleDBus) Messages are now directly forwarded to the appropriate proxy object, no more chaining required.
- (SimpleDBus) Require Proxy factory method to handle proxy creation and registration.
- (SimpleDBus) Interface objects now store a weak reference to their proxy.
Fixed
- Improper handling of configuration settings when consuming SimpleBLE as a shared library.
- (MacOS) Freeze when attempting a double disconnection.
- (Android) Solved "local reference table overflow" error. (Thanks Nicole S.!)
- (Android) Fixed unexpected initialization of SimpleJNI.
- (SimpleDBus) Fixed race condition when handling property updates of DBus objects.
- (Linux) Fixed potential race condition when handling disconnection events.
- (Python) Fixed missing files in source distribution.
Removed
- (MacOS) Removed support for MacOS Catalina, Big Sur and Monterey.
SimpleBLE v0.10.3
[0.10.3] - 2025-06-24
Changed
- (SimpleDBus) Interface creation is now done via a registry.
Fixed
- (Python) Fixed GIL issues introduced in v0.10.2.
SimpleBLE v0.10.2
[0.10.2] - 2025-06-20
Changed
- (Windows) Experimental option to skip reinitializing the WinRT apartment on the main thread. Default is now to not reinitialize.
Fixed
- (Python) Fixed several deadlocks in the Python bindings related to new WinRT threading model.
SimpleBLE v0.10.1
[0.10.1] - 2025-05-30
Notes
- The Rust bindings have undergone a major rewrite of their API, towards a more idiomatic Rust style and stream-based API.
- iOS and Android do not support powering on and off the adapter. Calling these methods will not have any effect on the adapter.
- Linux does have support for powering on and off the adapter, but further architecture changes are needed to properly expose this.
- Callbacks for power on and off events are currently only supported on Windows.
- Retrieving connected peripherals is currently only supported on Windows. More backends coming soon.
Added
- Functions for powering adapters on, off and querying their power state.
- Callbacks to monitor adapter power on and off events.
- (Windows) Added support for powering adapters on and off.
- (Windows) Added support for retrieving paired peripherals.
- (Windows) Added support for retrieving connected peripherals.
- (Python) Exposed the
Adapter::power_on(),Adapter::power_off()andAdapter::is_powered()methods. - (Android) Calls to Java methods are now checked for exceptions.
- (Java) Calls to Java methods are now checked for exceptions.
- (Android) Added support for requesting a specific connection priority via configuration. (Thanks Nicole S.!)
- (MacOS) Added support for powering adapters on and off.
- (Linux) Added configurable connection and disconnection timeouts. (Thanks Kober Engineering!)
Changed
- (Windows) Calls to the WinRT backend are now executed in a separate MTA apartment by default.
- (Android) Migrated to using the
simplejnilibrary for JNI bindings. - API CHANGE: (Rust) Migrated to streams for scan and connection events.
- API CHANGE: (Rust) Migrated to streams for peripheral notifications and indications.
Fixed
- (Android) Fixed a bug where the GATT object would not be closed if a connection was lost. (Thanks Nicole S.!)
- (Rust) Fixed a race condition in the Rust bindings that would cause a crash if the adapter was deleted while a callback was in progress.
- Added missing operating system definitions for utils.
- (Linux) Use steady_clock instead of system_clock for timeout calculations. (Thanks Kober Engineering!)
Removed
- Source code of the
simpleble-bridgeproject in favor ofsimpledroidbridge.
SimpleBLE v0.9.1
[0.9.1] - 2025-04-24
Important:
- In the near future we will deprecate the
simpleble-ctarget in favor ofsimplecble, which will be a drop-in replacement for the existing C bindings. - The
simpleble-bridgeproject has been renamed tosimpledroidbridgeand can be found in the root directory of the repository.
Added
- (Android) Implemented the following API functions:
Adapter::scan_get_results()Adapter::get_paired_peripherals()Peripheral::rssi()Peripheral::tx_power()Peripheral::is_connectable()Peripheral::is_paired()Peripheral::manufacturer_data()Peripheral::advertised_services()
- (Java) Early preview of Java bindings.
- Configuration class to control the behavior of SimpleBLE internals as well as experimental features.
- SimpleCBLE: Moved SimpleBLE C bindings into a separate library.
Changed
Adapter::identifier()method is non-const, as underlying const conditions can't be guaranteed.- (Android) Callback functions are not handled on a separate, dedicated thread.
- (Windows) (Experimental) Calls to the WinRT backend can now be executed in a separate MTA apartment via feature flag.
- (Android) The
simpleble-bridgeproject has been renamed tosimpledroidbridge. - Upgraded
fmtdependency to version 11.1.4 and vendorized into the repository.
Fixed
- (Android) Some potential race conditions in the Android backend.
- (Android) Fixed handling of null objects.
- (Android)
Peripheral::address_type()andPeripheral::unpair()had to be removed due to API level limitations. - (Android) Potential duplicate callback invocations on builds with newer Android API levels.
SimpleBLE v0.9.0
[0.9.0] - 2025-01-20
Important: License has changed, please review the new license terms.
Changed
- Removed unnecessary log print in MacOS backend. (Thanks will-tm!)
- Remove builders in favor of templated approach. (Thanks jcarrano!)
- Refactor code to use abstract classes and PIMPL idiom. (Thanks jcarrano!)
SimpleBLE v0.8.1
[0.8.1] - 2024-11-05
Added
- (Android) Alpha preview of Android support.
- (SimpleDBus) Added templated version of creation and getter functions for Holder class. (Thanks lorsi96!)
Changed
- Implemented standalone ByteArray class derived from
kvn::bytearray. (Thanks tlifschitz!) - API CHANGE: Notify and Indicate callback in C bindings now receive the peripheral handle as the first argument.
Fixed
- (SimpleBluez) Fixed improper handling of non
org.Bluez.Service1objects within aorg.bluez.Device1object. (Thanks Kober Engineering!) - (MacOS) Fixed incorrect storage and retrieval with standard Bluetooth UUIDs inside the peripheral class. (Thanks TellowKrinkle!)
- (Python) Fixed incorrect handling of the GIL in certain functions. (Thanks nomenquis and Medra AI!)