Tooling

ESP-IDF & Espressif Frameworks

Espressif's official C/C++ SDK and adjacent frameworks — ESP-IDF, esptool, ESP-MDF, ESP-RainMaker, ESP-Matter.

ESP-IDF is the way Espressif themselves write firmware for ESP32-family chips. Underneath every Arduino sketch on ESP32 is an IDF build — but going direct gives you the full FreeRTOS API, every peripheral driver, and Espressif's ML / Matter / mesh stacks. For a softer landing see Arduino & PlatformIO; for the chips themselves see MCU Platforms.

ESP-IDF (the framework)

  • ESP-IDF v5.x — Espressif's official IoT Development Framework. Apache 2.0. C / C++ on top of FreeRTOS, with drivers, networking (lwIP), Wi-Fi, BLE (NimBLE / Bluedroid), 802.15.4, OTA, secure boot, file systems, and more. The professional default for shipping ESP32 product firmware.
  • ESP-IDF v4.x — older long-term branch; still gets bug fixes, but new chips (C6, H2, P4) require v5.
  • ESP-ADF (Audio Development Framework) — audio pipeline framework on top of IDF; codecs, stream pipelines, voice wake-word.
  • ESP-MDF (Mesh Development Framework) — Wi-Fi mesh networking on top of IDF; for hundreds-of-node ESP networks.
  • ESP-DSP — DSP library (FFT, FIR, matrix math, vector ops; uses S3/P4 vector instructions where available).
  • ESP-DL / ESP-NN — neural network inference for ESP32 (especially S3 + P4 with vector / DSP units).
  • ESP-WHO — face / object detection reference firmware on top of ESP-DL.
  • ESP-AT — turns an ESP32 into an "AT command" Wi-Fi/BT modem for a host MCU.

Build / flash / monitor tools

  • idf.py — IDF's Python build wrapper. idf.py set-target esp32s3 build flash monitor. The canonical entry point.
  • esptool.py — Espressif's open source flasher (MIT). Reads / writes / erases / reads MAC; works on every ESP chip; ships standalone for non-IDF users.
  • espefuse.py — eFuse programmer for secure boot / flash encryption keys; permanent, careful.
  • espsecure.py — sign / verify firmware images for secure boot.
  • parttool.py — partition table inspector / editor.
  • espflash — Rust rewrite of esptool (MIT/Apache 2.0); maintained by esp-rs; faster, cleaner CLI. The default for Rust-on-ESP workflows; usable from any project.
  • esp-prog — Espressif's USB-to-JTAG/UART debug probe for chips that don't have native USB JTAG (e.g., classic ESP32).

IDEs / editors that target IDF

  • VS Code + Espressif IDF Extension — the official Espressif VS Code extension; project wizard, build/flash UI, GDB debug, partition table editor, ESP-Docs preview. The polished default.
  • VS Code + PlatformIO + framework = espidf — PlatformIO can drive an IDF build with all its dep-management goodness; popular when mixing IDF + Arduino-as-component.
  • CLion + ESP-IDF plugin — JetBrains workflow; works, lags behind on new chips.
  • Eclipse + IDF Eclipse Plugin — JetBrains-allergic option.
  • CLI onlyidf.py works fine without an IDE.

ESP-IDF + Arduino as a component

A useful hybrid pattern: build with idf.py but #include <Arduino.h> and use Arduino libraries inside an IDF app.

  • arduino-esp32 as IDF component — drop arduino-esp32 into components/; lets you use Arduino libraries from a "real" IDF project (which gives you full sdkconfig access, custom partitions, FreeRTOS task primitives that Arduino wraps).
  • PlatformIO framework = arduino, espidf — declarative version of the same.

Espressif application frameworks (built on IDF)

  • ESP-Matter — Espressif's Matter SDK; CHIP / Matter 1.x stack tuned for ESP32-C6 / -H2 / -S3. The path to "build a Matter device on an ESP32" in 2026.
  • ESP-RainMaker — Espressif's BYO-cloud / hosted IoT platform; device provisioning, OTA, dashboards, scheduling, voice integration. Free Espressif-hosted tier; source on GitHub for self-hosting.
  • ESP-Insights — fleet-level diagnostics (reboot reasons, crash dumps, metrics) reporting to Espressif's dashboard. Free hosted tier.
  • ESP-Hosted — turn an ESP32 into a Wi-Fi/BT co-processor for a Linux host or another MCU.
  • ESP-Zigbee SDK — Zigbee 3.0 stack for ESP32-C6 / -H2.
  • ESP-Thread Border Router — Thread + Wi-Fi reference firmware on the ESP-IDF Thread BR board (S3 + H2 combo).
  • ESP-NOW — connectionless Espressif protocol; covered in MCU Wireless Stacks.

Provisioning libraries

  • ESP BLE Provisioning / SoftAP Provisioning — IDF-native flow to onboard a device to Wi-Fi via a phone app.
  • ESP-IDF Provisioning iOS / Android SDKs — open-source phone-side libs for the above.
  • WiFi Manager (tzapu) — community Arduino lib for captive-portal Wi-Fi provisioning.
  • Improv Wi-Fi — open standard (BLE / Serial) for Wi-Fi provisioning; supported by Home Assistant, ESPHome, Tasmota, ESP Web Tools.

Web-based flashing

  • ESP Web Tools (Nabu Casa / Espressif support) — open-source web component that flashes ESP firmware over WebSerial directly from a webpage. Used by Home Assistant, ESPHome, WLED, Tasmota project sites. The "click here to flash my firmware" UX.
  • ESP Launchpad — Espressif's hosted firmware-distribution + WebSerial flasher.
  • ESPTool-JS — JS port of esptool that powers the above.

Partitions, filesystems, OTA layout

  • Partition tablespartitions.csv; default templates for OTA / single-app / coredump.
  • SPIFFS — older flash filesystem (read-only-ish); deprecated for new projects.
  • LittleFS — power-loss-resilient flash FS; standard for new projects.
  • FATFS — for SD cards or if you want Windows-side compatibility.
  • NVS (Non-Volatile Storage) — key-value store for settings; the ESP equivalent of preferences.

Pick this if…

  • Default professional ESP firmware: ESP-IDF v5 + VS Code Espressif extension.
  • You want Arduino libraries with IDF flexibility: arduino-esp32 as a component, or PlatformIO with both frameworks.
  • You're shipping a Matter device on an ESP32-C6 / -H2: ESP-Matter.
  • You want a free hosted IoT cloud and OTA: ESP-RainMaker.
  • You're allergic to IDEs: idf.py from a terminal works great.
  • You're flashing from CI / scripts: esptool.py (Python) or espflash (Rust).
  • You want users to flash your firmware from a webpage: ESP Web Tools.

On this page