// the find
nodemcu/nodemcu-firmware
Lua based interactive firmware for ESP8266, ESP8285 and ESP32
NodeMCU is Lua-based firmware for ESP8266/ESP8285 chips, with a separate branch for ESP32. It gives you an event-driven, Node.js-style programming model on a $2 WiFi microcontroller, with 70+ built-in C modules covering I2C, SPI, GPIO, HTTP, MQTT, and more. The target audience is hobbyists and makers who want to prototype IoT devices without writing C.
The module breadth is genuinely impressive — CoAP, MQTT, TLS via mbedtls, FAT filesystem, DCC (model railways), u8g2 display drivers, and rotary encoders all ship as first-class modules. Lua Flash Store (LFS) is a smart solution to the ESP8266's tight RAM: bytecode lives in flash and executes in place, leaving all RAM free for runtime data. The docs-in-repo approach works well — ReadTheDocs builds from the same commit as the code, so the API docs are rarely stale. CI via GitHub Actions and a custom firmware build service at nodemcu-build.com means you don't need a Linux toolchain just to get a binary.
The ESP8266 branch targets Espressif's legacy NON-OS SDK, which Espressif themselves have effectively abandoned in favor of ESP-IDF and FreeRTOS. New Espressif silicon (ESP32-S2, S3, C3, C6, H2) is not supported — the dev-esp32 branch only covers the original ESP32. ESP-IDF-based frameworks like ESP-Arduino and ESP-IDF directly have largely eaten NodeMCU's lunch for anyone starting a new project today. The ESP32 branch is kept in a separate Git branch rather than unified, which fragments the contributor base and means ESP32 support consistently lags. Lua 5.1/5.3 on a microcontroller means debugging is painful — no real debugger, printf-style tracing only, and stack traces that point at bytecode offsets.