ESPHome, Tasmota & Config-Driven ESP Firmware
YAML- and config-driven firmware for ESP boards — ESPHome, Tasmota, ESPurna, OpenMQTTGateway.
A whole category of ESP firmware where you don't write C/C++ — you write a YAML / template / web-UI config and the firmware compiles or interprets your sensor / switch / display setup. The fastest path from "I have an ESP32 and a sensor" to "it shows up in Home Assistant." Pairs with Self-Hosted Automation; for MCU-side dev see Arduino & PlatformIO and ESP-IDF.
ESPHome
- ★ ESPHome — open source (MIT/GPLv3 mix); now part of Nabu Casa / the Home Assistant umbrella. Define your device in a YAML file (sensors, GPIOs, displays, automations), compile, flash. Generates Arduino-on-ESP-IDF firmware under the hood. Targets ESP32 / S2 / S3 / C3 / C6 / H2 / ESP8266 / RP2040. Native Home Assistant integration over the ESPHome native API (encrypted, low-latency, no MQTT needed). The default smart-home ESP firmware in 2026.
- ESPHome Builder / Web flasher — browser UI (formerly "ESPHome Dashboard") for editing YAML and OTA-flashing devices.
- ESPHome Web — flash existing ESPHome-compatible firmware from a browser via WebSerial.
esphomeCLI —esphome compile / upload / logs / clean. Pairs with VS Code.- External components ecosystem — community-published custom components (LoRa, niche sensors, vendor displays); drop in from a GitHub URL.
- Secrets / packages / substitutions — YAML composition primitives so you can share config across many devices.
- HA "Take Control" flashing — Home Assistant offers a one-click "convert this Tuya / Sonoff / etc. device to ESPHome" flow for many supported boards.
ESPHome is the right pick when:
- The device is going into Home Assistant.
- You want OTA updates as a default (not a feature you have to remember to add).
- You're comfortable describing devices declaratively.
ESPHome can be limiting when:
- You need behavior the YAML schema doesn't expose (write a custom component, or drop to Arduino-as-component).
- You want multi-master MQTT or a non-HA cloud backend (Tasmota does this better).
Tasmota
- ★ Tasmota — open source (GPLv3); the original ESP firmware for "I bought a smart switch / plug / bulb on AliExpress and want to liberate it from the vendor cloud." Web UI, MQTT, HTTP, KNX, Zigbee bridge, Tuya MCU bridge. Targets ESP8266 + ESP32 family. Configuration is via the web UI, console, or Tasmota's templating system — not YAML. Hugely popular for retrofitting commodity smart devices.
- Tasmota templates database — community-curated templates (
tasmota.github.io/docs/devices/) for thousands of off-the-shelf devices. - Tasmotizer — open-source GUI flasher for getting Tasmota onto a virgin device.
- Tasmota OTA — over-the-air update via the web UI; built-in.
- Tasmota-AFL / Tasmota32 — AFL fuzzed / ESP32 builds.
- Berry scripting — Tasmota's embedded scripting language; Lua-shaped, lets you write more complex automations on-device.
Tasmota vs. ESPHome — the practical split:
- Tasmota — best for off-the-shelf commercial devices (Sonoff, Shelly, plugs, bulbs); web-UI and MQTT-first.
- ESPHome — best for DIY / custom-PCB devices and tight Home Assistant integration; YAML-first; better OTA story.
Many people run both: Tasmota on the cheap retrofitted plug, ESPHome on the DIY sensor.
ESPurna
- ESPurna — open source (GPLv3); long-running Tasmota alternative, originally focused on Sonoff / generic ESP8266 relays. Web UI, MQTT, OTA. Less mainstream than Tasmota but well-loved by some; Tasmota has wider device coverage in 2026.
OpenBeken / OpenBK
- OpenBeken / OpenBK7231T — Tasmota-shaped firmware for non-ESP Wi-Fi chips: Beken BK7231T/N, Realtek RTL8710, XR809. Important if you crack open a Tuya device and find a non-ESP module — there's now an open firmware for it. GPLv3.
- LibreTiny / LibreTuya — PlatformIO platform that lets you build "Arduino-style" firmware (including Tasmota / ESPHome) for those non-ESP Tuya modules.
OpenMQTTGateway
- OpenMQTTGateway — open source (MIT); ESP32 / ESP8266 firmware that bridges multiple radios (BLE, RF 433 MHz, IR, LoRa, Pilight) to MQTT. The "I want my old RF remotes / BLE thermometers in HA" firmware. Pairs with ESPHome / Tasmota for full coverage.
Theengs
- Theengs Gateway (Linux/Pi) and Theengs Decoder (library) — companion projects from the OpenMQTTGateway team; decode hundreds of BLE sensors (Xiaomi, Govee, Inkbird, etc.) into MQTT.
Sonoff DIY / SonoffLAN family
- Sonoff DIY mode — eWeLink's official "let users own their devices" mode; flips a Sonoff into local-LAN mode without re-flashing. Limited but free.
- SonoffLAN (HA integration) — talk to Sonoff devices over local LAN without the cloud.
WLED — covered separately
- See WLED & Special-Purpose ESP Firmware for the LED-strip-controller firmware ecosystem (WLED, QuinLED, Cololight, etc.). It's config-driven in spirit, but its audience and tooling are different enough to deserve its own page.
Pixie / Athom / Shelly preflashed devices
- Athom — sells ESP devices preflashed with Tasmota or ESPHome. Genuinely useful: "smart plug that doesn't talk to a cloud out of the box."
- Shelly Plus / Pro — original firmware is open-friendly and supports MQTT + local HTTP RPC; many people don't reflash. ESPHome / Tasmota ports also exist for older Shelly models.
- Sonoff / Shelly / Athom devices — all popular targets for these firmwares. Many devices are listed in both ESPHome's and Tasmota's device database.
Flashing / provisioning UX
- ★ ESP Web Tools — used by ESPHome's "Web Installer" pages; flashes from a browser, no driver install.
- Tasmotizer — Python GUI for first-flash from USB.
- Improv Wi-Fi — open standard for Wi-Fi onboarding; supported by ESPHome, Tasmota, and many DIY firmwares.
Pick this if…
- Default for DIY ESP devices in Home Assistant: ESPHome.
- Default for retrofitting off-the-shelf Wi-Fi gear: Tasmota.
- Tuya device with a non-ESP chip: LibreTiny + Tasmota / ESPHome, or OpenBeken.
- You want BLE / 433 MHz / IR → MQTT bridge: OpenMQTTGateway.
- You don't want to flash anything: buy preflashed Athom or compatible Shelly devices.
- You want code, not config: drop to Arduino & PlatformIO or ESP-IDF.