finds.dev← search

// the find

nodemcu/nodemcu-firmware

★ 7,928 · C · MIT · updated Jun 2026

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.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →