Open-source project
bird-sanctuary/bluejay avatar
bird-sanctuary/bluejay

Bluejay is open source ESC firmware for Busy Bee multirotor controllers

:bird: Digital ESC firmware for controlling brushless motors in multirotors

533 stars75 forksAssemblyGPL-3.0

At a glance

What is it?
Bluejay is digital ESC firmware that succeeds BLHeli_S, adding DShot 300 and 600, bidirectional DShot with RPM telemetry, selectable PWM frequency and configurable startup behaviour on SiLabs EFM8 BB21 and BB51 parts. It is GPL-3.0 licensed, built with the Keil assembler under wine, and its most interesting architectural fact is that it is a fork of another project with the same name.
Who is it for?
Adopt Bluejay if you fly multirotors on BLHeli_S compatible ESCs with SiLabs EFM8 Busy Bee controllers and you want the newer signal protocol and configurable startup behaviour, with a configurator that reads your hardware. Do not adopt it on the deprecated BB10 part, whose last official release was 0.18.1, and note that flashing is irreversible in the sense that a mistake bricks the ESC until you recover it through the C2 interface.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Assembly, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A successor to BLHeli_S, not a rewrite of it

Bluejay is digital ESC firmware for controlling brushless motors in multirotors, and it is based on BLHeli_S revision 16.7.

That starting point defines the scope precisely. The stated aim is to be an open source successor to BLHeli_S, adding several improvements to ESCs with Busy Bee MCUs. So this is not a new protocol and not a new motor model. It is the same firmware lineage, with an open source successor implementation, the digital signal protocol updated and the configuration surface opened up.

The current features are listed as: the digital signal protocol DShot 300 and 600, bidirectional DShot with RPM telemetry and extended DSHOT telemetry, selectable PWM frequency at 24, 48 and 96 kHz, power configuration covering startup power and RPM protection, high performance described as low commutation interference, smoother throttle to PWM conversion, user configurable startup tunes, and numerous optimizations and bug fixes.

The PWM frequency choice is worth pausing on, because it is the setting a user is most likely to touch. The Makefile carries the same three values as a build constant, and dead times from 0 to 120 are also a build-time table, which tells you both are compiled in rather than configured at runtime in the firmware itself.

Two supported parts, and one that was dropped

The supported platforms are the SiLabs EFM8 BB21 and the SiLabs EFM8 BB51, and that list is short enough to be unambiguous.

The third part, the SiLabs EFM8 BB10, commonly also known as L layout, has been deprecated, with 0.18.1 as the last official release. The stated reasons are that the BB10 has limitations in comparison to the BB21 and BB51, that not many of those are around anymore, and that the team does not have a single one for testing, and so they decided to drop support.

The follow-up note is careful about what dropping support means. You will still be able to manually build for it, but compatibility cannot be guaranteed, and the project does not want to suffer from its limitations during further development.

So the practical test is the part number on your ESC. If it is a Busy Bee BB21 or BB51 you are in scope, and if it is a BB10 you are on a firmware line that stopped getting releases, with only community flashing tools likely to remain available.

Flashing and configuring, through two configurators

Bluejay firmware can be flashed to BLHeli_S compatible ESCs and configured with one of two tools.

The first is ESC Configurator, a progressive web app, and the second is the Bluejay Configurator, a standalone application. There is also a manual route: you can download the release binaries from the wiki and flash them yourself.

The distinction between flashing and configuring is worth keeping straight. Flashing replaces the firmware on the ESC, and the configuration is the set of values the ESC then uses at runtime, the startup tune, the PWM frequency, the power settings. Both matter, and both are where a mistake costs you hardware, which is why the community tooling section is written the way it is.

The release page is the reference for what changed between versions, and the documentation points out that the project's own wiki holds useful information while a very detailed documentation with flow charts lives in a separate bluejay-documentation repository. The repository itself is the source, the wiki is the manual and the release page is the changelog.

Recovery tooling, and why a bricked ESC is a known state

The third party tools section lists community-developed tools that complement Bluejay, with the explicit framing that they are not maintained or officially supported by the project but may be useful for specific use cases, and that you should review their documentation and use your own judgement before integrating them.

There are two. C2 Flasher is a progressive web app, and the use case given is when your ESC is bricked and you need to recover it via the C2 interface. prober is a standalone command line and graphical tool for Linux and Windows, and it includes automatic ESC index mapping, direct kick recovery for flaky 4-in-1 and AIO boards, and C2 flashing support.

The fact that both tools centre on C2 recovery tells you something about the hardware. The C2 interface is the debug port on the SiLabs parts, and it is the way back from a firmware that has bricked the ESC. Since the ESC has no bootloader that can be re-entered over the normal serial link once something goes wrong, the recovery path has to go through a separate wire.

That is the practical risk in this project. The configuration is rich enough to be worth having and the flash is permanent enough to matter, and a bricked ESC is recoverable but only with the right hardware and the right tool.

A fork of a project with the same name

The ancestry section is unusual and worth reading carefully, because it explains the governance rather than the code.

This is a fork of the original Bluejay project. The team decided to detach this fork from the original project in order to have all GitHub features at their disposal. And the decision to keep the name was made in order to honour the original project and the hope that the original developer will join them, once he decides to make a comeback.

So there are two projects named Bluejay, and the one documented here is the maintained fork, separated for administrative reasons with the name deliberately preserved.

For a user, that matters in one practical way: when you look for Bluejay documentation, wiki pages or issue trackers, you need to know which repository you are in. The release binaries and the flashing instructions in this documentation are for this fork.

The project is GPL-3.0 licensed, with the COPYING file at the top of the repository, and the primary language is recorded as Assembly, which is accurate given that the firmware is written in 8051-flavoured assembly for the SiLabs parts.

How the build actually works

The Makefile shows that this is an embedded toolchain build, and it is not a Go or Rust project despite the modern tooling around it.

The version is taken from the current git tag with git describe, the settings directory defaults to ./src/Settings, and the output goes to a build directory with a hex subdirectory. The assembler and linker binaries are the Keil ones, with AX51 for the assembler, LX51 for the linker and OX51 for the hex output, and each is invoked through wine against a path under the Keil install. The default Keil path points into a wine drive_c Keil_v5 C51 BIN directory.

The compiler flags are the same as the Keil ones, with NOMOD51 and the register bank options and NOLIST and NOSYMBOLS. The source is a single assembly file, src/Bluejay.asm, which then includes a layout include per hardware layout, the BLHeli bootloader include, the SiLabs definitions for the BB21, BB51 and LB1 parts, and a set of modules: Common, Commutation, DShot, Eeprom, Fx, Isrs, Macros, Power, Scheduler, Settings and Timing.

The module list is a good map of the firmware's structure. Commutation, DShot and Power are the control core, Eeprom holds the configuration, Settings reads it, and the Makefile carries the hardware layouts and MCUs as build variables rather than as code, which is how a single firmware image is produced for many ESC form factors.

A project funded by hardware donations

The maintenance section explains the economics of this project, and it is unusual enough to be worth reading in full.

The project is run by a small core team devoting a lot of their spare time and money to pushing the project forward. The explanation for why is that development of ESC firmware is time consuming and mistakes are expensive: motors, ESCs and flight controllers tend to break from time to time, especially when pushing the limits.

They do not take monetary donations. Instead there is a donation wiki page listing the hardware they are currently looking for, and the invitation is to get in touch and buy some hardware they need.

The community section names the donors by real name or handle, with 406FPV donating an F722 based flight controller, motors and a whole 1105 based micro quad, belrik and RabbitAmbulance each donating a set of 2207 motors, and others donating flight controllers and motor sets. The manufacturers section lists BetaFPV providing dev boards for the BB51 MCUs along with AIO flight controllers, motors and whoops, Happymodel providing whoops, and Skystars, T-Motor, TuneRC, weBLEEDfpv and HAKRC providing various controllers, ESCs and motors.

So the practical answer to how this firmware gets tested is that the team is given the hardware to test it on. That is also the constraint on its development.

Editorial conclusion

Adopt Bluejay if you fly multirotors on BLHeli_S compatible ESCs with SiLabs EFM8 Busy Bee controllers and you want the newer signal protocol and configurable startup behaviour, with a configurator that reads your hardware. Do not adopt it on the deprecated BB10 part, whose last official release was 0.18.1, and note that flashing is irreversible in the sense that a mistake bricks the ESC until you recover it through the C2 interface. Before you flash, check three things: which MCU your ESC uses, since only the BB21 and BB51 are supported, which configurator you will use, since the settings live in the ESC and a mistake there is expensive, and whether you have a C2 recovery path available, because the community tooling exists for exactly that failure.

Frequently asked questions

What is Bluejay and what is it based on?

It is digital ESC firmware for brushless motors in multirotors, based on BLHeli_S revision 16.7, and it aims to be an open source successor to BLHeli_S with improvements for ESCs using Busy Bee MCUs. The features include DShot 300 and 600, bidirectional DShot with RPM telemetry, selectable PWM frequency and configurable startup tunes.

Which ESC hardware does Bluejay support?

The SiLabs EFM8 BB21 and the SiLabs EFM8 BB51. The BB10, also known as the L layout, was deprecated with 0.18.1 as its last official release, although it can still be built for manually with no compatibility guarantee.

How do I flash and configure Bluejay firmware?

The firmware can be flashed to BLHeli_S compatible ESCs and configured with the ESC Configurator, a progressive web app, or the standalone Bluejay Configurator. You can also flash manually using the release binaries, and the project's release page records what changed between versions.

What do I do if an ESC is bricked after flashing Bluejay?

The community tools exist for that case. C2 Flasher is a progressive web app for recovering a bricked ESC through the C2 interface, and prober is a standalone tool for Linux and Windows that includes automatic ESC index mapping, direct kick recovery for flaky 4-in-1 and AIO boards and C2 flashing support. Neither is officially supported by the project.

How is Bluejay built from source?

The Makefile drives the Keil assembler and linker through wine, building src/Bluejay.asm together with the per-layout includes and the module files for commutation, DShot, power, EEPROM, settings and timing, with the hardware layouts and MCUs as build variables. The repository is GPL-3.0 licensed and the last push was on 2026-04-22.

Official sources

  1. bird-sanctuary/bluejay on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/bird-sanctuary-bluejay.svg)](https://hysenlabs.com/projects/bird-sanctuary-bluejay)

Was this useful?