Important:These are the installation instructions for developers, if you just want to use the library, please see these installation instructions for users.

I strongly recommend using a Linux system for development.
I'm using Ubuntu, so the installation instructions will focus mainly on this distribution, but it should work fine on others as well.
If you're using Windows, my most sincere condolences.

Installing the compiler, GNU Make, CMake and Git

For development, I use GCC 11, because it's the latest version, and its error messages and warnings are better than previous versions.

On Ubuntu, GCC 11 can be installed through the ppa:ubuntu-toolchain-r/test repository:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-11 g++-11

You'll also need GNU Make and CMake as a build system, and Git for version control. Now is also a good time to install GNU Wget, if you haven't already, it comes in handy later.

sudo apt install make cmake git wget

Installing the Arduino IDE, Teensy Core and ESP32 Core

To compile sketches for Arduino, I'm using the Arduino IDE. The library focusses on some of the more powerful Arduino-compatible boards, such as PJRC's Teensy 3.x and Espressif's ESP32 platforms.
To ensure that nothing breaks, tests are included for these boards specifically, so you have to install the appropriate Arduino Cores.

Arduino IDE

If you're reading this document, you probably know how to install the Arduino IDE.
Just in case, you can find the installation instructions here.


The installation instructions for the Teensy Core can be found on the PJRC website:

ESP32 Arduino Core

You can find the installation instructions for the ESP32 Core here:

Installing the Control Surface library

The next step is to download the Control Surface library itself. Just use Git to clone it into your ~/Arduino/libraries folder. If you have write access to the repository, use SSH, otherwise, use HTTPS.

mkdir -p ~/Arduino/libraries && cd ~/Arduino/libraries
git clone      # SSH
git clone  # HTTPS

Installing the Arduino library dependencies

Some of the examples use third-party libraries. You can download them using the library manager in the Arduino IDE, or:

cd ~/Arduino/libraries
git clone
git clone
git clone
git clone
git clone
git clone
git clone

Installing Visual Studio Code

I use Visual Studio Code (not to be confused with Visual Studio) to write code, format it, and run the build and documentation tasks.

Of course, you're free to use whatever IDE you prefer, but I do ask to run all tests and format all code using clang-format before committing, and this is much easier using VSCode, because there are VSCode tasks defined for building and running tests, and for generating and exporting the documentation.

You can download VSCode from the website:


Once you've installed and launched VSCode, I'd recommend installing some extensions.
Open the extensions menu using CTRL+SHIFT+X.

Installing Doxygen

Doxygen is used to generate the documentation of the library. I find it easiest to clone it from GitHub, and build it from source. The version in the Ubuntu repositories is pretty old.

Build and installation instructions


Doxygen uses Dot to generate diagrams. Install the Graphviz package that contains Dot:

sudo apt install graphviz

Installing LCOV

The code coverage reports are generated using LCOV.
Install it from GitHub:

cd /tmp
git clone
cd lcov
make install PREFIX=$HOME/.local