An OS to build, deploy and securely manage billions of devices

Latest News:

Apache Mynewt 1.5.0 released (Nov 5, 2018)

NimBLE - Mynewt's Bluetooth 5 compliant stack

NimBLE is a complete Bluetooth Low Energy 5 stack featuring source code for both host and controller subsystems. You can choose to run NimBLE as

  • a complete stack in a single processor
  • host only
  • controller only
  • host and controller in separate processors on a board

The standardized Host Controller Interface (HCI) allows you to mix and match Mynewt’s host or controller portion with another vendor’s controller or host implementation respectively, to suit your product hardware and application. As an example, you may run the NimBLE controller with BlueZ, the Linux Bluetooth host protocol stack. As a reverse example you could choose to run NimBLE's host with a chip vendor's controller that supports HCI over UART transport.


  • LE Advertising Extensions
  • 2Msym/s PHY for higher throughput
  • Coded PHY for LE Long Range
  • High Duty Cycle Non-Connectable Advertising
  • Channel Selection Algorithm #2 to utilize channels in more efficient way
  • LE Privacy 1.2
  • Security Manager (SM) with support for LE Legacy Pairing (Just Works, Numeric Comparison, Passkey Entry, OOB), LE Secure Connections, Transport Specific Key Distribution
  • LE Data Length Extension
  • Concurrent multiple roles (master(central)/slave(peripheral), server/client)
  • Simultaneous advertising and scanning
  • Low Duty Cycle Directed Advertising
  • Connection parameters request procedure
  • LE Ping
  • 32 bit UUIS
  • L2CAP Connection Oriented Channels
  • Full GATT Server, Client, and all sub-procedures
  • Host Controller Interface (HCI) between the host and controller either through software API or by UART hardware connection

Profile and Service support

  • Alert Notification Profile and Service(ANS)
  • Immediate Alert Service (IAS)
  • Link Loss Profile and Service
  • Transmit Power Service

Bluetooth Mesh support

  • Advertising and GATT bearers
  • PB-GATT and PB-ADV provisioning
  • Foundation Models (server role)
  • Relay support
  • GATT Proxy

Memory sizing

The recommended memory size for running Mynewt OS with NimBLE is 64 kB of RAM and 512 kB of Flash. This allows the application developer to build an image for a product with ample space for application data and logic, security capabilities such as secure bootloader, and operational utilities such as detailed logs and statistics.

While the recommendations are for higher amounts of memory, Mynewt OS with NimBLE can be optimized to operate with 32 kB of RAM and 256 kB of Flash.

  • Core OS kernel: <1 kB of RAM, <6 kB of Flash
  • NimBLE Stack (including both peripheral and central roles, legacy pairing): 4.5 kB of RAM, 69 kB of Flash
  • BLE peripheral application using Mynewt OS, NimBLE with security: 15 kB of RAM, 99 kB of Flash

Role configuration

NimBLE gives you tremendous flexibility to meet your application and device requirements.

  • Up to 32 concurrent connections as a Central
  • Up to 32 concurrent connections as a Peripheral
  • Up to 32 concurrent connections in any combination of Central and Peripheral with Observer and Broadcaster roles running simultaneously.
  • Ability for a peripheral to connect to multiple centrals
  • Flexibility to configure the scheduler to allow for larger data bursts when connected to a large number of peripherals

System configuration

NimBLE allows the application developer to configure the system to extract the most suitable performance. Whether it is getting the most number of concurrent connections or getting a high throughput or ensuring low latencies for data bursts to several peripherals, NimBLE offers plenty of options. Of course, any changes to the default configuration has implications on code size, runtime RAM usage etc., a glimpse of which is shown below.

Subsystem Examples of Configuration Options Default(kB) Element Size(kB) Default Size(kB) Size for x # of connections
Host Max. number of config descriptors 1 4 4 (x+1)*3
Max. number of attributes in a single GATT Reliable Write procedure 36 32 1152 Independent
Max. number of concurrent connections 1 80 80 x*80
...and several more. Full system configuration is specified in /net/nimble/host/syscfg.yml with sensible defaults.
Controller Whitelist size 8 8 64 Independent
RNG buffer size 32 1 32 Independent
Max. number of concurrent connections 1 416 416 x*416
...and several more. Full system configuration is specified in /net/nimble/controller/syscfg.yml with sensible defaults.