Official BMC Website @ BadassMIDI.com
For Teensy 3.x, 4.x & Teensy Micromod (BMC now supports some ESP32 boards!)
⚠ BMC 2.0 is NOT compatible with previous versions of BMC!, you will need to create a new config file and backups for older versions are not compatible.
BMC 2.0 is a major re-write of the BMC core. If you're upgrading from an older version, you'll need to create a new config file. Learn more about the changes here.
📌 Before proceeding, please review the Installation requirements!
✅ Download the BMC library directly from the Arduino Library Manager.
🔹 Follow BMC on Facebook
🔹 Follow BMC on Instagram
🔹 Watch BMC Videos on YouTube
🔹 Access the Web Editor (Google Chrome required)
- Changelog
- What is BMC
- Supported Boards
- ESP32 Support
- Key Features
- Documentation
- BMC Editor App
- Installation
- Library Structure & Coding Style
- About BMC
- Contribute to BMC
- License
BMC (Badass MIDI Controller) is a powerful MIDI controller library designed for Teensy boards (now supporting ESP32!). It comes with a companion editor app that lets you design your MIDI controller’s hardware and UI without writing code.
- Design Your MIDI Controller 🛠️
- Specify buttons, LEDs, potentiometers, encoders, displays, MIDI ports, and more.
- Configure the UI layout to match your physical hardware setup.
- Customize the UI elements (e.g., different button styles and colors).
- Compile & Upload 🚀
- BMC generates a config.h file that defines your controller setup.
- The library compiles with this config file to enable only the required features.
- Edit & Manage 🎛️
- Use the editor app to modify settings and data in EEPROM—no need to re-upload code!
✅ No coding required! BMC handles everything behind the scenes.
💡 Advanced users can extend functionality using the BMC API.
- Teensy Micromod
- Teensy 4.1
- Teensy 4.0
- Teensy 3.6 (⚠ Not recommended for new designs)
- Teensy 3.5 (⚠ Not recommended for new designs)
- Teensy 3.2 (⚠ Not recommended for new designs)
- ✨ NEW! ESP32 Devkit V1 (Beta)
- ✨ NEW! SparkFun ESP32 (Beta)
- ✨ NEW! ESP32-S2 Devkit(Beta)
- ✨ NEW! ESP32-S3 Devkit (Beta)
BMC now supports multiple ESP32 models, including models with OTG USB all are currently in Beta.
- ESP32 (Original)
- ❌ No native USB MIDI
- ✅ BLE MIDI only (enabled automatically)
- ESP32-S2 / ESP32-S3
- ✅ Native USB MIDI support (enabled automatically)
- ✅ BLE MIDI also enabled automatically
- On ESP32 (original), BLE MIDI replaces USB MIDI.
- On ESP32-S2/S3, USB MIDI works as expected, and BLE MIDI is also available.
- BLE MIDI is always enabled, regardless of variant.
- Only 2 serial ports are available on all ESP32 boards.
- The Serial Monitor is not available in the Arduino Web Editor or iPad app.
- Internal EEPROM size is fixed at 4,096 bytes.
- The BMC for ESP32 Boards package is a modified version of the official ESP32 package:
- When selecting an ESP32-S2 or ESP32-S3 board from the BMC for ESP32 Boards package, all necessary USB MIDI settings are automatically configured.
- All BMC features are currently Supported on ESP32.
✅ MIDI Communication
- USB & USB Host MIDI support for controlling DAWs and MIDI apps (Teensy Only).
- Up to 4 Serial MIDI Ports (1 on ESP32) for legacy devices.
- Bluetooth Low Energy (BLE) MIDI with added MIDIBLE module (always available on ESP32) ✅ Automatic Hardware Management
- Reads buttons, encoders, pots, LEDs, and displays without extra coding. ✅ EEPROM Handling
- Supports built-in EEPROM, external I2C EEPROM (24LC256), or built-in SD Card Reader. ✅ MIDI Sync
- Syncs with Fractal Axe FX II, AX8, Logic Pro, and more!
For complete documentation, visit:
📌 BMC Documentation
🎉 Get the BMC Editor App for iPad! 🎉

Purchasing the app supports BMC development! ❤️
Creating a layout that matches your hardware is easy!
Help improve BMC by purchasing MIDI modules & accessories at BadassMIDI.com!
📌 Follow the installation guide here:
Installing Teensyduino & BMC on Arduino 2.0
✅ Macros: Prefixed with BMC_
, uppercase with underscores.
#define BMC_MIDI_CONTROL_CHANGE 0xB0
✅ Class Naming: Prefixed with BMC
, using camelCase.
BMCMidi, BMCTimer, BMCFlags, BMCMidiMessage
✅ Struct Naming: Prefixed with bmcStore
.
bmcStore, bmcStoreGlobalCustomSysEx
✅ Default API Initialization:
// Creates an instance of BMCApi named bmc
BMC_DEFAULT();
// Equivalent to:
BMCApi bmc = BMCApi();
✅ The only code your Sketch needs!:
#include <BMC.h>
BMC_DEFAULT();
void setup(){
bmc.begin();
}
void loop(){
bmc.update();
}
BMC started in 2017 as a custom MIDI controller project for a Fractal AX8 guitar processor. After struggling with Arduino libraries, the need for an easy-to-use editor app became clear.
💡 Why Teensy?
Teensy boards were the perfect solution due to their built-in USB MIDI support and superior performance compared to standard Arduinos.
Since then, BMC has evolved into a powerful no-code MIDI controller framework that saves time and effort, letting users focus on music instead of programming!
Are you a C++ programmer? Want to improve BMC? Contact me here: RoxXxtar Contact Page
💡 HUI Control: If you have experience with HUI MIDI Control, let’s collaborate! Email me at RoxXxtar Contact Page.
📌 More Info & Web Editor: RoxXxtar.com/BMC
MIT License
See the LICENSE
file for details.