Only Linux is supported as a development OS. For Windows and MacOS users, a Linux VM is recommended.

Developing and / or compiling BOLOS applications requires the SDK matching the appropriate device (the Nano S, X SDK or the Blue SDK) as well as the following two compilers:

  • A standard ARM gcc to build the non-secure (STM32) firmware and link the secure (ST31) applications
  • A standard ARM clang 7.0.0 <= version < 10.0.0 with ROPI support to build the secure (ST31) applications, download it here
  • Download a prebuilt gcc from here

Setting up the Toolchain

The Makefiles used by our BOLOS applications look for gcc and clang installations using the PATH environment variable.

If you don’t want to install specific versions of clang and gcc directly on your system, simply prepend their location in your PATH environment variable.


# Clang

Cross compilation headers are required and provided within the gcc-multilib and g++-multilib packages. To install them on a debian system:

sudo apt install gcc-multilib g++-multilib

If you wish to load applications on your device, you will also need to add the appropriate udev rules.

wget -q -O - | sudo bash

Setting up the SDK

Now that you have your toolchain set up, you need to download / clone the SDK for the appropriate Ledger device you’re working with. Make sure you checkout the tag matching your firmware version.

Ledger Nano S SDK:

Ledger Nano X SDK:

Ledger Blue SDK:

Finally, link the environment variable BOLOS_SDK to the SDK you downloaded.


When using the Makefile for our BOLOS apps, the Makefile will use the contents of the SDK to determine your target device ID (Ledger Nano S, X or Ledger Blue). Even if you aren’t building an app, loading an app with the Makefile still requires you to have the SDK for the appropriate device linked to by BOLOS_SDK.

Python Loader

Most apps use the Python loader, a Ledger-made Python library to communicate with Ledger devices.

To install it, you will need to add a couple of extra dependencies:

sudo apt install virtualenv libudev-dev libusb-1.0-0-dev

You will also need the python-dev-tools (aka python-dev on Python 2) package

python3 -m pip install python-dev-tools --user --upgrade
python3 -m pip install ledgerblue

If you need more information about the Python loader, feel free to check out the github repo: . You should find what you’re looking for in the doc folder and .

Now that you’re setup and ready to go, you can start looking at our Writing Apps article!