ESPHome 2026.10.1 came out on 27 October at 19:33 Polish time, six days after 2026.10.0. It is a bugfix release with 14 changes. Most are small, but three can bite: firmware that crashes at boot after an incremental build, a fan whose state never reaches the MQTT broker, and a coprocessor update that never finishes.

Precompiled header off with ccache older than 4.7

ESPHome 2026.10 started using a precompiled header to speed up builds. J. Nick Koston found that with ccache older than 4.7, an incremental build could link objects compiled against an older version of that header, and the resulting firmware crashes at boot. He built several ccache versions and ran the same sequence on ESP-IDF: build a config, add a sensor, build again, add more and build a third time. With ccache 4.5.1 and 4.6.3, 28 of 34 source objects in the last build were stale. With every 4.7 release it was zero.

From 2026.10.1, ESPHome turns the precompiled header off when it finds ccache older than 4.7 and logs a line saying why. Builds then behave like 2026.9. If you want the header anyway, ESPHOME_PCH_ENABLE=1 still forces it on. A better fix is to update ccache.

MQTT fan state

The MQTT fan component ignored whether its state publish succeeded. If the first publish after connecting failed, the state topic stayed unpublished until the fan changed again. The pull request says this gap has existed since the C++ code was merged in 2019. It turned up on an ESP8266 with 20 entities: in the burst of messages after connecting, the fan's state never reached the broker and nothing resent it until the next boot. Now a failed publish is retried, like for every other entity.

Coprocessor updates on ESP32-P4

On boards where an ESP32-P4 talks to an ESP32-C6 through esp32_hosted, updating the C6 over HTTP downloaded and verified the image and then tripped the 5-second task watchdog, because the final step reads back and validates the whole image. On an M5Stack Tab5 the watchdog fired exactly 5 seconds after the SHA256 check and the C6 still ran the old version after reboot. The end call now gets the same 60-second watchdog as the start of the update.

Other fixes

  • Lambdas generated by ESPHome are now emitted after your own esphome: includes:, which fixes "was not declared in this scope" errors.
  • Library dependencies listed without a version are resolved the way PlatformIO used to, which fixes builds failing on a missing Adafruit_I2CDevice.h.
  • Bluetooth proxies stop logging "Ignoring unexpected GAP event type: 9". One user counted 1,413 such warnings in about 13 hours.
  • On chips such as the ESP32-P4, where ESP-IDF 5.3 and later leaves the old reset function as an empty stub, ledc silently skipped its reset after a crash reboot. It now resets the peripheral through the HAL.
  • Infinite float values now produce valid C++, and Color::random_color() no longer divides by zero.