Skip to main content

Flasher

Browser-based firmware flasher for ESP chips, available at embedhub.com/tools/Flasher. Uses the WebSerial API, so you flash directly from the browser tab — no esptool.py install, no driver dance.

Supported chips

Built-in support for the full ESP32 family and ESP8266:

ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-P4, ESP8266.

The chip is auto-detected over serial.

Two ways to flash

Pick an organization and project, and the tool reads that project's releases/ folder.

Guided — the project publishes a config describing its firmware. You choose which firmware from a dropdown and press Flash; the tool detects the chip and works out which binaries go at which addresses. This is the mode to use if you want someone who has never seen the project to be able to flash a board.

Manual — tick .bin files out of the release tree and type the address for each one under Advanced Options. Always available, and what you get when a project has no config.

Browser support

Requires a Chromium-based browser (Chrome, Edge, Brave) — WebSerial is not yet available in Safari or Firefox.

Publishing a config

Put a .toml next to your binaries in the project's releases/ folder:

embedhub push launchpad.toml releases/
embedhub push build/app.bin releases/

Any .toml under releases/ is read as a config — the name is yours. It only decides which one opens by default: releases/launchpad.toml, then releases/config.toml, then those names in a subfolder, then anything else alphabetically. Pick another from the panel, or click a specific config in the releases list to open that one.

A minimal config, for firmware shipped as one merged binary:

esp_toml_version = 1.0
supported_apps = ["blink"]

[blink]
chipsets = ["ESP32-C3"]
image.esp32-c3 = "blink_c3.bin"
offset = "0x0"
description = "Blinks the status LED"

Filenames are resolved next to the config, so a binary sitting beside it in releases/ is named on its own. The binaries stay private to the project — whoever flashes needs read access to it, same as anywhere else in EmbedHub.

Several binaries at different addresses

Firmware built as separate bootloader, partition table and application images lists each part with the address it belongs at:

[hal-firmware]
chipsets = ["ESP32-S3"]
image.esp32-s3.parts = ["bootloader.bin", "partition-table.bin", "app.bin"]
image.esp32-s3.addresses = ["0x0", "0x8000", "0x10000"]

parts and addresses pair up by position: the first part is written at the first address, and so on. Every part states its own address — nothing is inferred from a filename or a chip family, because an image written to a guessed offset produces a board that no longer boots.

In TOML a key can't be both a filename and a table, so a chip uses either image.esp32-s3 = "..." or image.esp32-s3.parts = [...] — never both.

note

The two lists must be the same length, and no two parts may share an address. The config is checked when it loads, before the tool opens the serial port, so a mistake shows up as a message rather than a bricked board.

Several chips, and specific boards

One app can cover several chips, and a named board can override the generic image for its chip:

[hal-firmware]
chipsets = ["ESP32-S3", "ESP32-C3"]
image.esp32-c3 = "hal_c3.bin"
image.esp32-s3 = "hal_s3.bin"

developKits.esp32-s3 = ["esp32-s3-box", "esp32-s3-box3"]
image.esp32-s3-box = "hal_box.bin"
image.esp32-s3-box3 = "hal_box3.bin"

When the detected chip has boards listed, a Board dropdown appears. Leave it on the generic option to use image.esp32-s3.

Other keys

KeyMeaning
supported_appsThe firmware names to offer, in order
chipsetsWhich chips this firmware supports
offsetWhere a single merged image.<chip> is written; defaults to 0x0
descriptionShown under the firmware dropdown
console_baudratePre-selects the baud for the serial monitor
firmware_images_urlA folder to resolve filenames against, if not beside the config
image.emulatorFirmware to run in the Emulator rather than write to a board
uiA front-end the Emulator loads with the firmware

Notes

  • Everything in the project's releases/ folder is listed automatically — push a new build and it appears.
  • In the project's releases list, Flash next to a config opens the Flasher on that config in guided mode; next to a .bin it opens on that one file in manual mode. A config that also declares an emulator target carries an Emulate action beside it.
  • Guided mode lists every image the config can write, with its address, as soon as you pick a firmware — before a device is even connected. Once the chip is detected the entry that will actually be used is marked.
  • The serial monitor below the flasher is separate: connect to it after flashing to watch the device boot.