Launcher: Multi-Firmware Switcher for ESP32 Boards
Launcher running on an M5Stack device, showing the main menu with OTA, SD, WUI, CFG and PMan options.
- M5Stack Core
- M5Stack Core2
- M5Stack CoreS3
- M5Stack StickC
- M5Stack StickCPlus
- M5Stack StickCPlus2
- M5Stack StickS3
- M5Stack Tab5
- M5-Paper
- M5-Paper Mono
- M5-Paper Color
- Lilygo T-Deck Pro
- Lilygo T-Watch Ultra
- Lilygo T-Display S3 Amoled Plus
- Lilygo T-Display P4
- Lilygo T-Display C5
- SeeedStudio XIAO ESP32C5
- SeeedStudio XIAO ESP32S3 Plus
- SeeedStudio XIAO 1.47in Touch Display ESP32-S3
- SeeedStudio reTerminal D1001 8in
- SeeedStudio reTerminal E1001
- SeeedStudio SenseCAP Indicator
- SeeedStudio Wio Tracker L2
- SeeedStudio ReTerminal Sticky
- Waveshare ESP32-S3 2.06in AMOLED Touch Watch
- Waveshare ESP32-C5-LCD-1.47
- Waveshare ESP32-C6-LCD-1.47
- Waveshare ESP32-C6-LCD-1.3
- Elecrow ThinkNode M9
- Elecrow Crowpanel Advance ESP32-S3 5.0in
- Elecrow Crowpanel Advance ESP32-P4 7.0in
- XTeink X3
- XTeink X4 Pro
- Cheap Yellow Display (CYD)
- ESP32-S3 ES3C28P 2.8in
- ESP32 E32R40T 4in
- Marauder devices
- SDHC SD card (max 32 GB)
What You Will Build
Launcher turns any supported ESP32 board into a multi-firmware hub. Instead of reaching for a USB cable every time you want to try a different app, Launcher lets you install, boot, and switch firmware images directly on the device — over Wi-Fi, from an SD card, or through a browser-based Web UI.
Once Launcher is flashed, it lives in its own partition at the start of your device's flash memory. On power-on, a brief boot screen appears. Hold the Select button to enter the Launcher menu; press nothing and the last-installed firmware boots automatically. That single workflow covers the full lifecycle of firmware development and experimentation on ESP32 hardware without ever touching a cable.
\2What You Need
Hardware
Any board from the supported list works. At the time of writing that includes the entire M5Stack family (Core, Core2, CoreS3, StickC, StickCPlus, StickCPlus2, StickS3, Tab5, Paper, Paper Mono, Paper Color), Lilygo T-Deck Pro, T-Watch Ultra, T-Display S3 Amoled Plus, T-Display P4, and T-Display C5, SeeedStudio XIAO ESP32C5, XIAO ESP32S3 Plus, reTerminal D1001, reTerminal E1001, SenseCAP Indicator, Wio Tracker L2, Waveshare AMOLED watches and LCD boards, Elecrow Crowpanel and ThinkNode devices, XTeink X3 and X4 Pro, the Cheap Yellow Display (CYD), and several Marauder-compatible boards. Check the Releases page for the full and current list.
Optional but recommended: An SDHC SD card, 32 GB or smaller, formatted as FAT32 with an MBR partition scheme. The SD card enables file management, binary downloads, and partition backups. Launcher works without one, but the experience is richer with it.
Software
Choose whichever flashing method suits you:
- A modern web browser (Chrome or Edge) for the online flasher or web.esphome.io
- M5Burner if you already use it for M5Stack devices
esptool.pyfor a command-line approach
Typical use cases
Install and boot different ESP32 firmware images over Wi-Fi or from an SD card. No USB cable, no laptop required after the first flash.
Pull binaries directly from M5Burner's catalog or any GitHub release URL, with multi-part binary merging handled automatically at download time.
Create, resize, back up, and restore flash partitions without external tools — useful when switching between apps that need different partition layouts.
Supports dozens of ESP32 boards out of the box, from M5Stack sticks to Waveshare AMOLED watches and e-ink terminals, with a single prebuilt binary per device.
How Launcher Works
Launcher occupies a dedicated partition at the beginning of flash. When the device powers on, it checks for a button press during the boot window. If detected, it drops into the Launcher menu. If not, it jumps straight to whatever firmware was last installed in the app partition — behaving like a transparent pass-through to the end user.
From the menu, four core areas handle the main workflows:
- OTA — fetches and flashes
.binfiles from M5Burner's catalog, raw GitHub links, your own server, or the built-in Web UI. Multi-part binaries (bootloader, partitions, firmware, data) are downloaded and merged at runtime. - SD — full file manager: create folders, rename, copy, paste, delete, and install
.binfiles stored locally. - WUI — starts a Wi-Fi access point and serves a browser-based interface for file management, OTA installs, text-file editing, and NVS key editing.
- PMan — a partition manager that lets you view, create, resize, delete, back up, and restore flash partitions without any external tools.
A serial interface is also available: connect via USB serial, type help, and you can configure Wi-Fi, calibrate a touchscreen, or mirror display axes — handy for devices that lack a keyboard or touchscreen.
Flashing Launcher onto Your Board
Pick the method that fits your setup. All three produce the same result.
Method 1 — Online Flasher (easiest, no install)
Visit https://bmorcelli.github.io/Launcher/, select your board from the list, connect the device via USB, and click Flash. The site handles everything in-browser.
Method 2 — M5Burner
Open M5Burner, search for Launcher, select the entry matching your device, and click Burn.
Method 3 — Manual flash
Download the .bin file from the Releases page for your device. The file is named Launcher-{YourDevice}.bin. You can then flash it using https://web.esphome.io/ in your browser, or use esptool.py from the command line. Refer to the repository for full details on either approach.
Preparing your SD card (optional)
If you want SD card support:
- Use an SDHC card, 32 GB or smaller.
- Format it as FAT32. The README recommends Rufus for this.
- Make sure the partition scheme is MBR, not GPT.
- Insert the card before powering on.
First boot
- Power on the device.
- Press Sel (or Enter, depending on your board) when the Launcher boot screen appears.
- Navigate to OTA to pull firmware from the online catalog or a URL, or browse your SD card with SD to install a local
.bin. - Open CFG to adjust brightness, dim timeout, display rotation, and UI color to your liking.
Extending Launcher and Known Limitations
Things worth exploring after the initial setup:
- Keyboard shortcuts — on boards with a physical keyboard, you can bind a specific firmware to a single key and boot it instantly from the main menu.
- Fastboot — on touchscreen and keyboard devices, touching the screen or pressing a key during the boot screen skips the wait and launches firmware immediately.
- Stealthy boot — the 2.10.0 changelog adds an option to hide the Launcher boot screen entirely and only enter Launcher when a specific GPIO button is held. Useful when a device runs a fixed deployment but you still want an escape hatch.
- Firmware update tracking — Launcher can read a
downloaded.jsonfile on the SD card, check for newer versions of previously downloaded firmware, and batch-download updates with a single button press. - NVS editing via WUI — the browser interface lets you read and write NVS keys, which is the practical way to reconfigure UiFlow2 credentials or other app-level settings without reflashing.
- Serial configuration — for headless boards (no display or keyboard), connect over USB serial and type
helpto see available commands, includingwifi add MyNetworkSSID MyN37w0rkPWDas shown in the README.
Known limitations:
- UiFlow 1 does not work with Launcher. It uses an old MicroPython and ESP-IDF distribution that is incompatible.
- M5-Paper Color has a very slow display refresh that makes menu navigation impractical; it works only through the WebUI.
- On e-ink boards using aggressive deep-sleep firmware (CrossInk, CrossPoint, etc.), the default behavior triggers the Launcher boot screen on every wake. The 2.10.0 option to disable deep-sleep triggering addresses this, but configure it carefully on boards without an exposed Reset button.
Launcher solves a real friction point in ESP32 development and deployment: the constant need to reflash whenever you switch firmware. The online flasher keeps the entry barrier low, and the OTA, SD, and Web UI options cover virtually every scenario from field updates to local development. The main caveat is the UiFlow 1 incompatibility and the e-ink display refresh limitation, but for the breadth of supported hardware and the quality-of-life improvement it delivers, Launcher is one of the most practical utility projects in the ESP32 ecosystem.
Sources
github.combmorcelli/Launcher — repository & README bmorcelli.github.ioOfficial websiteFacts in this article come from the project's public README and GitHub metadata at the time of writing. Images belong to their respective owners and link back to the original source.



