Skip to content

Releases: simpleble/simpleble

SimpleBLE v0.14.0

02 May 20:33

Choose a tag to compare

[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 CompletableFuture wrappers for blocking operations to allow clean asynchronous programming without blocking threads.
  • (SimpleBLE) Elevated Backend class 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 RuntimeException instead of crashing the JVM.
  • (SimpleJavaBLE) Updated EventListener interfaces in Adapter and Peripheral to 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_cast exception in dictionaries with ObjectPath or Signature keys. (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 .dylib artifact in the release package due to an omitted CI architecture target.
  • (SimpleJavaBLE) Fixed JNI symbol resolution errors (UnsatisfiedLinkError) on Adapter.isBluetoothEnabled() and isPaired flags.
  • (SimpleJavaBLE) Fixed jvm.dll initialization 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

12 Feb 07:51

Choose a tag to compare

[0.12.1] - 2026-02-12

Added

  • (SimpleAIBLE) Added AI capabilities to SimpleBLE with an MCP and an HTTP server.
  • (SimplePyBLE) Added simplepyble.aio module, providing an asyncio-compatible API with automatic callback cleanup and context manager support.
  • (SimplePyBLE) Exposed Adapter.set_callback_on_power_on, Adapter.set_callback_on_power_off, and Adapter.get_connected_peripherals in Python bindings.
  • (SimplePyBLE) Added initialized() method to Service, Characteristic, and Descriptor Python 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 for Peripheral::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_peripherals in the C++ base frontend.
  • (SimpleBLE) Improved OperationNotSupported exceptions 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-c target and its associated source and header files from the simpleble package. Users should migrate to the simplecble library, which provides a compatible C interface.

SimpleBLE v0.11.0

01 Feb 06:33

Choose a tag to compare

[0.11.0] - 2026-01-31

Added

  • (SimpleDBus) Connection has a new send_with_reply method 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) Holder class 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_DBUS environment variable in favor of a configuration option.

SimpleBLE v0.10.4

29 Dec 18:19

Choose a tag to compare

[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

24 Jun 21:38

Choose a tag to compare

[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

21 Jun 04:45

Choose a tag to compare

[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

31 May 00:26

Choose a tag to compare

[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() and Adapter::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 simplejni library 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-bridge project in favor of simpledroidbridge.

SimpleBLE v0.9.1

25 Apr 07:12

Choose a tag to compare

[0.9.1] - 2025-04-24

Important:

  • In the near future we will deprecate the simpleble-c target in favor of simplecble, which will be a drop-in replacement for the existing C bindings.
  • The simpleble-bridge project has been renamed to simpledroidbridge and 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-bridge project has been renamed to simpledroidbridge.
  • Upgraded fmt dependency 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() and Peripheral::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

19 Jan 23:27

Choose a tag to compare

[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

05 Nov 23:24

Choose a tag to compare

[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.Service1 objects within a org.bluez.Device1 object. (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!)