An experimental BLE stack.
Tries to adhere to the Bluetooth Core Specification v4.2 (at least for now).
Rubble is runtime and hardware-agnostic: It does not need an RTOS (although you can certainly use one if you want) and provides hardware interfaces that need to be implemented once for every supported MCU family.
The only part that interacts directly with platform-specific interfaces is
BLE Link-Layer implementation. You have to provide it with a few hardware-specific services:
Implementation of the Attribute Protocol (ATT).
BLE beacon support, without dealing with Link-Layer stuff.
Utilities for decoding from and encoding into bytes.
Implementation of the Generic Attribute Profile (GATT).
The Logical Link Control and Adaptation Protocol (L2CAP).
Physical layer interactions.
The LE Security Manager protocol.
Time APIs for obtaining the current time and calculating with points in time and durations.
BLE UUIDs (16, 32 or 128 bits).
Errors returned by the BLE stack.
Version of the Bluetooth specification implemented by Rubble.