ESPHome 2026.5.0 - May 2026
Read the ESPHome 2026.5.0 release notes on the blog for the release overview, feature highlights, upgrade checklist, and breaking changes.
Full list of changes
Section titled “Full list of changes”New Features
Section titled “New Features”- [epaper_spi] Added Waveshare 3.97inch E-Paper Display esphome#15466 by @Farmer-shin (new-feature)
- [audio] Add/configure microDecoder library in preparation for use in future PRs esphome#15679 by @kahrendt (new-feature)
- [zephyr_ble_server] add support for on_numeric_comparison_request esphome#14400 by @tomaszduda23 (new-feature)
- [mipi_spi] Add Waveshare C6 LCD 1.47 esphome#15776 by @clydebarrow (new-feature)
- [mipi_spi] Add Sunton ESP32-2424S012 esphome#15812 by @clydebarrow (new-feature)
- [mipi_rgb] Add definitions for sunton displays esphome#15858 by @guillempages (new-feature)
- [mipi_dsi] Add Seeed reTerminal d1001 display esphome#15867 by @clydebarrow (new-feature)
- [epaper_spi] Support SSD1683 and GDEY042T81 4.2 inch display esphome#13910 by @Eelviny (new-feature)
- [lock] Implemented open states support esphome#15120 by @egormanga (new-feature)
- [esp32_ble] Add
use_psramoption to offload BT memory allocation to SPIRAM esphome#15644 by @edwardtfn (new-feature) - [sensor] Filter to round to significant digits esphome#11157 by @gapple (new-feature)
- [esp32] add watchdog_timeout configuration variable esphome#15908 by @rwrozelle (new-feature)
- [dsmr] Improve performance. Add missing sensors. Remove Crypto-no-arduino. esphome#15875 by @PolarGoose (new-feature)
- [ac_dimmer] Zero-crossing interrupt type esphome#15862 by @aselafernando (new-feature)
- [radio_frequency] Add experimental
radio_frequencyentity type (base component + API) esphome#15556 by @kbx81 (new-component) (new-feature) - [zigbee][core] Add support for Zigbee binary sensors on ESP32 H2 and C6 esphome#11553 by @luar123 (new-feature)
- [audio_http] Add a media source for playing audio from HTTP URLs esphome#15741 by @kahrendt (new-component) (new-feature) (new-platform)
- [sendspin] Add initial Sendspin hub component (PR1) esphome#15924 by @kahrendt (new-component) (new-feature)
- [sendspin] Add controller role and sendspin.switch action (PR2) esphome#15929 by @kahrendt (new-feature)
- [sendspin] Add a group media player controller (PR3) esphome#15948 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add a Sendspin media source component for playing audio (PR4) esphome#15950 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add a metadata text sensor component esphome#15969 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add metadata sensor component esphome#15971 by @kahrendt (new-feature) (new-platform)
- [ir_rf_proxy] Extend for RF esphome#15744 by @kbx81 (new-feature) (new-platform)
- [api] Expose TemperatureUnit in water heater and climate api esphome#15815 by @jhenkens (new-feature)
- [lvgl] Allow a binary sensor to report checked or pressed state esphome#16073 by @clydebarrow (new-feature)
- [nrf52] make reset pin optional esphome#11684 by @tomaszduda23 (new-feature)
- [mapping] Implement default value esphome#15861 by @clydebarrow (new-feature)
- [lvgl] Additional layout features esphome#16041 by @clydebarrow (new-feature)
- [wifi] Add phy_mode option for ESP8266 esphome#16055 by @bdraco (new-feature)
- [sx126x] Add cold sleep option and drop unused RTC wakeup bit esphome#16144 by @swoboda1337 (new-feature)
- [audio] Enable specific codecs and configure advanced features esphome#16166 by @kahrendt (new-feature)
- [sendspin] Use sendspin-cpp to v0.4.0 to reduce stuttering esphome#16178 by @kahrendt (new-feature)
- [usb_host][usb_uart] Add configurable max packet size esphome#14584 by @p1ngb4ck (new-feature)
- [ota] Add extended OTA protocol esphome#16164 by @Mat931 (new-feature)
- [ota] Add partition table update functionality to ota component esphome#15780 by @Mat931 (new-feature)
- [cli] Add —ota-platform flag to pick web_server or native API OTA esphome#16207 by @bdraco (new-feature)
- [lvgl] Allow line points as percentages esphome#16209 by @clydebarrow (new-feature)
- [lvgl] Pass touch point to touch event lambdas esphome#16272 by @clydebarrow (new-feature)
- [sensor] Add alternate calibration format for ntc esphome#15937 by @clydebarrow (new-feature)
- [speaker] Add SPDIF output support esphome#8065 by @johnboiles (new-feature)
- [ota] Add bootloader update functionality to ota component esphome#16238 by @Mat931 (new-feature)
- [core] Native idf full support esphome#14678 by @diorcety (new-feature)
- [zigbee] Add sensor support on esp32 esphome#16026 by @luar123 (new-feature)
- [ota] Implement host platform OTA backend with re-exec for integration testing esphome#16304 by @bdraco (new-feature)
- [zigbee] add on_join trigger for esp32 esphome#16060 by @luar123 (new-feature)
- [zigbee] Add power_source option to esp32 esphome#16062 by @luar123 (new-feature)
- [lvgl] Add new trigger
on_updateand new number option esphome#16312 by @clydebarrow (new-feature) - [mitsubishi_cn105] Add C++ API for setting/clearing remote room temperature esphome#15558 by @crnjan (new-feature)
- [cli] Add config-hash command esphome#15548 by @ccutrer (new-feature)
- [safe_mode] Allow recovering soft-bricked devices via reboot to recovery partition esphome#16339 by @Mat931 (new-feature)
- [api][voice_assistant] Add second audio channel for voice_assistant esphome#16265 by @synesthesiam (new-feature)
- [radio_frequency] Add on_control trigger; ir_rf_proxy driver-agnostic esphome#16368 by @kbx81 (new-feature)
- [i2s_audio] Optimize SPDIF encoder and suport higher bit depth audio esphome#16504 by @kahrendt (new-feature)
New Components
Section titled “New Components”- [radio_frequency] Add experimental
radio_frequencyentity type (base component + API) esphome#15556 by @kbx81 (new-component) (new-feature) - [audio_http] Add a media source for playing audio from HTTP URLs esphome#15741 by @kahrendt (new-component) (new-feature) (new-platform)
- [sendspin] Add initial Sendspin hub component (PR1) esphome#15924 by @kahrendt (new-component) (new-feature)
- [modbus] Split modbus_server from modbus_controller esphome#15509 by @exciton (new-component) (breaking-change)
- [core] Move core ring buffer to helper component esphome#16298 by @kahrendt (new-component)
New Platforms
Section titled “New Platforms”- [audio_http] Add a media source for playing audio from HTTP URLs esphome#15741 by @kahrendt (new-component) (new-feature) (new-platform)
- [sendspin] Add a group media player controller (PR3) esphome#15948 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add a Sendspin media source component for playing audio (PR4) esphome#15950 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add a metadata text sensor component esphome#15969 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add metadata sensor component esphome#15971 by @kahrendt (new-feature) (new-platform)
- [ir_rf_proxy] Extend for RF esphome#15744 by @kbx81 (new-feature) (new-platform)
Breaking Changes
Section titled “Breaking Changes”- [esphome][ota] Disable loop while idle, wake on listening-socket activity esphome#15636 by @bdraco (breaking-change)
- [api] Replace clients_ std::vector with compile-time std::array + uint8_t count esphome#15889 by @bdraco (breaking-change)
- [core] decouple main loop cadence from scheduler wake timing esphome#15792 by @bdraco (breaking-change)
- [one_wire] Reset bus before SKIP ROM command esphome#14669 by @mikeytdisco (breaking-change)
- [media_player][speaker][speaker_source] Centralize preferred format codegen esphome#14771 by @kahrendt (breaking-change)
- [esp32_ble_tracker] Hold COEX_PREFER_BT for the lifetime of any active connection esphome#16036 by @plazarre (breaking-change)
- [modbus] Split modbus_server from modbus_controller esphome#15509 by @exciton (new-component) (breaking-change)
- [output] Gate FloatOutput power scaling fields behind USE_OUTPUT_FLOAT_POWER_SCALING esphome#15998 by @bdraco (breaking-change)
- [sensor] Pack ThrottleAverageFilter have_nan_ into n_ bitfield (-4 B/instance) esphome#16169 by @bdraco (breaking-change)
- [audio][media_player][speaker] WAV decoding is no longer always built esphome#16244 by @kahrendt (breaking-change)
- [audio_file][speaker] Eliminate code duplication for files built into firmware esphome#16266 by @kahrendt (breaking-change)
- [sen5x] Remove incorrect AQI device class from VOC and NOx Index sensors esphome#16463 by @bharvey88 (breaking-change)
- [sgp4x] Remove incorrect AQI device class from VOC and NOx Index sensors esphome#16464 by @bharvey88 (breaking-change)
- [sen6x] Remove incorrect AQI device class from VOC and NOx Index sensors esphome#16465 by @bharvey88 (breaking-change)
All changes
Section titled “All changes”- [ade7953_spi] Fix SPI mode on esp-idf esphome#14824 by @angelnu
- [ci] Fix status-check-labels workflow flooding CI queue esphome#15585 by @bdraco
- [safe_mode] Use loop component start time instead of millis() esphome#15591 by @bdraco
- [safe_mode] Combine related OTA rollback log messages esphome#15592 by @bdraco
- [socket] Document ready() contract: callers must drain or track esphome#15590 by @bdraco
- [ci] Use —base-only for memory impact builds esphome#15598 by @bdraco
- [core] Add CodSpeed benchmarks for hot helper functions esphome#15593 by @bdraco
- [CI] Add org fork detection warning to auto-label PR workflow esphome#15588 by @jesserockz
- [epaper_spi] Added Waveshare 3.97inch E-Paper Display esphome#15466 by @Farmer-shin (new-feature)
- [cc1101] Extract chip configuration into configure() method esphome#15635 by @swoboda1337
- [CI] Don’t run label workflow on closed/merged PRs esphome#15678 by @jesserockz
- [esp32] Use static allocation for loop task instead of heap esphome#15659 by @schdro
- [benchmark] Use -Os to match firmware optimization level esphome#15688 by @bdraco
- [benchmark] Add SubscribeLogsResponse encode benchmarks esphome#15696 by @bdraco
- [bme68x_bsec2] use esphome-libs wrappers for ESP32 esphome#15697 by @diorcety
- [zephyr] Remove redundant yield() from main loop esphome#15694 by @bdraco
- [core] Move FILTER_PLATFORMIO_LINES into platformio_runner esphome#15707 by @swoboda1337
- [scheduler] Force-inline process_defer_queue_() fast path esphome#15686 by @bdraco
- [scheduler] Force-inline cleanup_() fast path esphome#15683 by @bdraco
- [scheduler] Force-inline process_to_add() fast path esphome#15685 by @bdraco
- [heatpumpir] Bump tonia/HeatpumpIR to 1.0.41 esphome#15711 by @swoboda1337
- [core] Optimize format_hex_internal by splitting separator loop esphome#15594 by @bdraco
- [audio] Add/configure microDecoder library in preparation for use in future PRs esphome#15679 by @kahrendt (new-feature)
- [ld24xx] Replace heap-allocated SensorWithDedup with inline SensorWithDedup esphome#15676 by @bdraco
- [core] Add uint32_to_str helper and use in preferences esphome#15597 by @bdraco
- [light] Deduplicate color_uncorrect channel math via shared helper esphome#15727 by @bdraco
- [esphome][ota] Disable loop while idle, wake on listening-socket activity esphome#15636 by @bdraco (breaking-change)
- [core] Inline Millis64Impl::compute() on single-threaded platforms esphome#15684 by @bdraco
- [status_led] Disable loop when idle esphome#15642 by @bdraco
- [core] Deduplicate entity type boilerplate with X-macro pattern esphome#15618 by @bdraco
- [zephyr_ble_server] add support for on_numeric_comparison_request esphome#14400 by @tomaszduda23 (new-feature)
- [tm1637] Add set_brightness method esphome#15322 by @guillempages
- [mipi_spi] Add Waveshare C6 LCD 1.47 esphome#15776 by @clydebarrow (new-feature)
- [core] Add missing exception chaining (raise from) across codebase esphome#15648 by @SaVi456
- [gpio] Keep interrupts enabled for gpio binary_sensor shared with deep_sleep wakeup pin esphome#15020 by @rwalker777
- [libretiny] Make IRAM_ATTR functional on RTL87xx and LN882H esphome#15766 by @bdraco
- Fix typo in devcontainer.json esphome#15791 by @yvesf
- [wireguard] Bump esp_wireguard to 0.4.5 for ESP-IDF v6 esphome#15804 by @diorcety
- [wifi] Guard retry_phase_to_log_string with log level check to fix warning esphome#15801 by @Bl00d-B0b
- [core] Expose App.wake_loop_isrsafe() on ESP8266 esphome#15797 by @bdraco
- [mipi_spi] Add Sunton ESP32-2424S012 esphome#15812 by @clydebarrow (new-feature)
- [ci] Scope local pylint pre-commit hook to esphome/ esphome#15818 by @bdraco
- [bme680_bsec] [bme68x_bsec2] Mark the two BSEC variants as mutually exclusive esphome#15826 by @bdraco
- [ci] Honor CONFLICTS_WITH when grouping component tests esphome#15834 by @bdraco
- [ld2412] Fix flaky integration test race condition esphome#15833 by @bdraco
- [core] Default PollingComponent() to not run when codegen is bypassed esphome#15832 by @bdraco
- [lvgl] Fix angles for arc esphome#15860 by @clydebarrow
- [mipi_rgb] Add definitions for sunton displays esphome#15858 by @guillempages (new-feature)
- [rtttl] allow any control parameters order and default value fallback esphome#14438 by @ximex
- [modbus] Simplify payload size validation in modbus_helpers esphome#15838 by @ruimarinho
- [mipi_dsi] Add Seeed reTerminal d1001 display esphome#15867 by @clydebarrow (new-feature)
- [epaper_spi] Support SSD1683 and GDEY042T81 4.2 inch display esphome#13910 by @Eelviny (new-feature)
- [micro_wake_word] Use ESPMicroSpeechFeatures from Espressif registry (v1.2.3) esphome#15879 by @kahrendt
- [light] Force-inline LightCall::set_flag_/clear_flag_ esphome#15729 by @bdraco
- [core] raise WDT_FEED_INTERVAL_MS from 3 ms to 300 ms esphome#15846 by @bdraco
- [core] Move heap-allocating helpers to alloc_helpers.h/cpp esphome#15623 by @bdraco
- [core] Remove pre-sleep socket scan from fast select path esphome#15639 by @bdraco
- [ltr390] Reduce data polling delay and timeout esphome#15507 by @bdraco
- [core] Make buf_append_str PROGMEM-aware on ESP8266 esphome#15738 by @bdraco
- [sensor] Specialize
throttle_with_priorityNaN-only case esphome#15823 by @bdraco - [qmc5883l] Use GPIO interrupt when DRDY pin is configured esphome#15876 by @swoboda1337
- [api] Replace clients_ std::vector with compile-time std::array + uint8_t count esphome#15889 by @bdraco (breaking-change)
- [zwave_proxy] Inline loop() hot-path fast-paths for response_handler_ and process_uart_ esphome#15887 by @bdraco
- [core] Inline api_is_connected() for hot-path callers esphome#15888 by @bdraco
- [core] Replace strnlen in buf_append_str for Zephyr compatibility esphome#15892 by @bdraco
- [core] decouple main loop cadence from scheduler wake timing esphome#15792 by @bdraco (breaking-change)
- [debug] Migrate trivial buf_append_printf sites to buf_append_str esphome#15885 by @bdraco
- [lock] Implemented open states support esphome#15120 by @egormanga (new-feature)
- [template] Use placement new for template text restore saver esphome#15883 by @bdraco
- [esp32_ble] Add
use_psramoption to offload BT memory allocation to SPIRAM esphome#15644 by @edwardtfn (new-feature) - [sensor] Filter to round to significant digits esphome#11157 by @gapple (new-feature)
- [bl0906] Disable loop when idle and introduce BL0906Stage enum esphome#15884 by @jesserockz
- [substitutions] Improve error messages with include stack trace esphome#15874 by @jpeletier
- [wifi] Use queue abstraction for LibreTiny WiFi events esphome#15343 by @bdraco
- [rp2040] Tune oversized lwIP defaults for ESPHome esphome#14843 by @bdraco
- [core] Optimize value_accuracy_to_buf to avoid snprintf esphome#15596 by @bdraco
- [light] Reduce validate_ clamp code size and speed up unit-range clamps esphome#15728 by @bdraco
- [core] Use MAC_ADDRESS_BUFFER_SIZE constant instead of duplicated literal esphome#15913 by @bdraco
- [esp32] Use xTaskGetTickCount() for millis() when tick rate is 1kHz esphome#15661 by @bdraco
- [core] Collapse adjacent USE_HOST ifdef blocks in Application esphome#15914 by @bdraco
- [libretiny] Inline xTaskGetTickCount() for millis() fast path esphome#15918 by @bdraco
- [core] Dedupe yield() fast path in wakeable_delay and always-inline esphome#15915 by @bdraco
- [core] RAII guard for component loop phase esphome#15897 by @bdraco
- [esp32] add watchdog_timeout configuration variable esphome#15908 by @rwrozelle (new-feature)
- [network] Reorder IPv6 configuration for network components esphome#11694 by @lboue
- [cse7761] bidirectional active power esphome#15162 by @TimoPtr
- [one_wire] Reset bus before SKIP ROM command esphome#14669 by @mikeytdisco (breaking-change)
- [dsmr] Improve performance. Add missing sensors. Remove Crypto-no-arduino. esphome#15875 by @PolarGoose (new-feature)
- [internal_temperature] Fix internal Temperature discrepancy on BK7231T esphome#15771 by @rishabmehta7
- [ac_dimmer] Zero-crossing interrupt type esphome#15862 by @aselafernando (new-feature)
- [i2s_audio] Split speaker into base class and standard subclass esphome#15404 by @kbx81
- [api_protobuf] Support compound
ifdefconditions in proto generator esphome#15930 by @kbx81 - [ota] Make set_auth_password() lambda-callable via empty-password opt-in esphome#15928 by @swoboda1337
- [core] Move host socket-select wake mechanism into wake.h/wake.cpp esphome#15931 by @bdraco
- [radio_frequency] Add experimental
radio_frequencyentity type (base component + API) esphome#15556 by @kbx81 (new-component) (new-feature) - [core] feed_wdt wraps feed_wdt_with_time esphome#15932 by @bdraco
- [dsmr] Small refactoring: Move
Aes128GcmDecryptorImpltype insideesphome::dsmrnamespace. esphome#15940 by @PolarGoose - [ci] Better explain too-big bot review message esphome#15939 by @bdraco
- [scheduler][core] Lock-free fast-path on ESPHOME_THREAD_MULTI_NO_ATOMICS via __atomic builtins esphome#15947 by @bdraco
- [core] Clean up stale includes and inline yield_with_select_ in application esphome#15945 by @bdraco
- [core] Raise WDT_FEED_INTERVAL_MS to 2000ms on BK72xx esphome#15943 by @bdraco
- [wifi] Avoid BDK 3.0.78 wifi_event_sta_disconnected_t collision on BK72xx esphome#15942 by @bdraco
- [api] Fall back to plaintext for logger connections esphome#15938 by @bdraco
- [core] Allow finding all devices as target that match mac suffix esphome#13135 by @balloob
- [zigbee][core] Add support for Zigbee binary sensors on ESP32 H2 and C6 esphome#11553 by @luar123 (new-feature)
- [audio_http] Add a media source for playing audio from HTTP URLs esphome#15741 by @kahrendt (new-component) (new-feature) (new-platform)
- [ci] Auto-close PRs opened from a fork’s default branch esphome#15957 by @bdraco
- [sendspin] Add initial Sendspin hub component (PR1) esphome#15924 by @kahrendt (new-component) (new-feature)
- [sendspin] Add controller role and sendspin.switch action (PR2) esphome#15929 by @kahrendt (new-feature)
- [sendspin] Add a group media player controller (PR3) esphome#15948 by @kahrendt (new-feature) (new-platform)
- [deep_sleep][logger][zephyr][zigbee] add deep sleep support with zigbee wakeup esphome#13950 by @tomaszduda23
- [sendspin] Add a Sendspin media source component for playing audio (PR4) esphome#15950 by @kahrendt (new-feature) (new-platform)
- [sendspin] Add a metadata text sensor component esphome#15969 by @kahrendt (new-feature) (new-platform)
- [core] Scheduler: don’t sleep while defer queue is non-empty esphome#15968 by @bdraco
- [web_server_idf] Fix cross-thread race on SSE session state esphome#15967 by @bdraco
- [media_player][speaker][speaker_source] Centralize preferred format codegen esphome#14771 by @kahrendt (breaking-change)
- [sendspin] Add metadata sensor component esphome#15971 by @kahrendt (new-feature) (new-platform)
- [sendspin] remove year and track number text sensors and refactor esphome#15975 by @kahrendt
- [sendspin] Bumps sendspin-cpp library for a bugfix esphome#15976 by @kahrendt
- [packages] Fix premature substitution of vars in remote package files esphome#15997 by @jpeletier
- [dashboard] Add —no-states support to logs WebSocket handler esphome#15993 by @bdraco
- [ci] Trigger CodSpeed benchmarks on host platform changes esphome#15995 by @bdraco
- [ir_rf_proxy] Extend for RF esphome#15744 by @kbx81 (new-feature) (new-platform)
- [safe_mode] Use StaticCallbackManager for on_safe_mode esphome#16002 by @bdraco
- [rtttl] Gate on_finished_playback callback storage behind define esphome#16003 by @bdraco
- [host] Use integer math in millis()/micros() esphome#15994 by @bdraco
- [core] Isolate generated build metadata esphome#16007 by @Komzpa
- [esp32] Make ESP-IDF builds reproducible esphome#16008 by @Komzpa
- [mitsubishi_cn105] add support for half-degree temperature setpoint esphome#15919 by @crnjan
- [ci-custom] Suggest uint32_to_str/int8_to_str for integer formatting esphome#15970 by @bdraco
- [core] Raise ESP32 WDT feed interval to 1/5 of configured timeout esphome#15984 by @bdraco
- [bluetooth_proxy] Partial revert of loop() → set_interval migration esphome#15992 by @bdraco
- [bh1750] Downgrade per-reading Illuminance log to verbose esphome#16005 by @bdraco
- [bluetooth_proxy] Drop redundant remote_bda_ write in connect handler esphome#16000 by @bdraco
- [bk72xx] Prepare for BK7238 support esphome#16018 by @bdraco
- [core] Unify
skip_external_updateand honor it in external_files for fasteresphome logsesphome#16016 by @bdraco - [api] Expose TemperatureUnit in water heater and climate api esphome#15815 by @jhenkens (new-feature)
- [core] Combine set_component_source_ + register_component_ into one call esphome#16029 by @bdraco
- [zigbee] add router for nrf52 esphome#16034 by @tomaszduda23
- [core] Combine entity register + configure_entity_ into one call esphome#16030 by @bdraco
- [esp32_ble_tracker] Hold COEX_PREFER_BT for the lifetime of any active connection esphome#16036 by @plazarre (breaking-change)
- [audio] Bump microDecoder library to v0.2.0 esphome#16054 by @kahrendt
- [core] Freshen loop_component_start_time_ before scheduler dispatch esphome#16064 by @bdraco
- [feedback] Use App.get_loop_component_start_time() and constexpr timeout id esphome#16063 by @bdraco
- [ota] Add wall-clock timeout to OTA data transfer loop esphome#16047 by @bdraco
- [esp32] Make Arduino app metadata reproducible esphome#16053 by @Komzpa
- [ci-custom] Lint imports of esphome.components.const outside components esphome#16068 by @jesserockz
- [lvgl] Allow a binary sensor to report checked or pressed state esphome#16073 by @clydebarrow (new-feature)
- [api] add open states for
locktoapi.protoesphome#15901 by @egormanga - [core] Split wake.
{h,cpp}into per-platform files esphome#15978 by @bdraco - [ci] Add import-time regression check for esphome.main esphome#15954 by @bdraco
- [modbus] Split modbus_server from modbus_controller esphome#15509 by @exciton (new-component) (breaking-change)
- [core] wakeable_delay: yield on already-woken fast path (ESP8266, RP2040) esphome#16045 by @bdraco
- [nrf52] implement wake_loop_threadsafe/wakeable_delay esphome#16032 by @tomaszduda23
- [nrf52] make reset pin optional esphome#11684 by @tomaszduda23 (new-feature)
- [watchdog] Fix WatchdogManager on single core apps esphome#16074 by @Mat931
- [ci] Install requirements_dev.txt in the cached venv esphome#16082 by @swoboda1337
- Add dependencies.lock to .gitignore esphome#16081 by @swoboda1337
- [spi][http_request][demo] Fix latent clang-tidy issues in headers esphome#16080 by @swoboda1337
- [tlc5971] Remove dead bit-banging delay code esphome#16086 by @swoboda1337
- [pipsolar] Guard handle_qmod_ against empty message esphome#16085 by @swoboda1337
- [lvgl] Add utility gradient function esphome#16048 by @clydebarrow
- [mapping] Implement default value esphome#15861 by @clydebarrow (new-feature)
- [bme680] Rename cal1/cal2 to coeff1/coeff2 esphome#16087 by @swoboda1337
- [dfrobot_sen0395] Brace single-statement else-if in enqueue() esphome#16089 by @swoboda1337
- [nextion] Use std::string::starts_with for HTTPS URL check esphome#16090 by @swoboda1337
- [ezo] Use make_unique to construct EzoCommand esphome#16092 by @swoboda1337
- [esp32_ble] Widen loop variable in as_128bit() to match uuid_.len type esphome#16088 by @swoboda1337
- [wifi] Avoid copying EAP config in three connect handlers esphome#16094 by @swoboda1337
- [json] NOLINT StackAddressEscape false positive in parse_json esphome#16091 by @swoboda1337
- [binary_sensor] Bind at_index_ once in MultiClick on_state_ esphome#16095 by @swoboda1337
- [haier] Brace single-statement else-if in smartair2_climate esphome#16098 by @swoboda1337
- [online_image][sim800l] Use std::string::starts_with for prefix checks esphome#16097 by @swoboda1337
- [i2c] NOLINT readability-identifier-naming on Zephyr struct forward-decl esphome#16099 by @swoboda1337
- [core] Reduce copies in Callback/CallbackManager call paths esphome#16093 by @swoboda1337
- [lvgl] Additional layout features esphome#16041 by @clydebarrow (new-feature)
- [inkbird_ibsth1_mini][speaker][speaker_source] Fix performance-unnecessary-copy-initialization esphome#16101 by @swoboda1337
- [esp8266] Replace millis() with fast accumulator, wrap Arduino callers esphome#15662 by @bdraco
- [mdns] Drive MDNS.update() polling from IP state events on ESP8266/RP2040 esphome#15961 by @bdraco
- [api] Hoist memw out of socket ready check to once per main-loop iter esphome#15996 by @bdraco
- [sprinkler][pn532] Fix bugprone-unchecked-optional-access esphome#16102 by @swoboda1337
- [api] Use custom deleter to fix incomplete-type error on macOS libc++ esphome#16050 by @bdraco
- [core] Inline ContinuationAction in If/While/RepeatAction esphome#16040 by @bdraco
- [output] Gate FloatOutput power scaling fields behind USE_OUTPUT_FLOAT_POWER_SCALING esphome#15998 by @bdraco (breaking-change)
- [api] Add 48-bit MAC address varint fast path for BLE advertisements esphome#15988 by @bdraco
- [git] Make ref fetches and submodule updates shallow esphome#16014 by @bdraco
- [core] Use ETag in external_files cache to fix re-downloads from raw.githubusercontent.com esphome#16020 by @bdraco
- [feedback] Fix bugprone-unchecked-optional-access in start_direction_ esphome#16103 by @swoboda1337
- [analyze_memory] Attribute main.cpp setup()/loop() to esphome core esphome#16033 by @bdraco
- [light] Use bitmask template for LightControlAction unused fields esphome#16039 by @bdraco
- [light] Use constexpr template for ToggleAction transition_length esphome#16037 by @bdraco
- [light] Use constexpr template for DimRelativeAction transition_length esphome#16038 by @bdraco
- [cover] Add cover.control / cover.template.publish coverage to template tests esphome#16051 by @bdraco
- [climate] Add climate.control coverage to component tests via thermostat esphome#16052 by @bdraco
- [wifi] Add phy_mode option for ESP8266 esphome#16055 by @bdraco (new-feature)
- [script] Fix cpp_unit_test crash for non-MULTI_CONF platform components esphome#16104 by @bdraco
- [core] Download external_files in parallel esphome#16021 by @bdraco
- [api] Avoid JsonDocument copy-and-swap operator= in ActionResponse ctor esphome#16106 by @swoboda1337
- [time] Fix bugprone-unchecked-optional-access in CronTrigger::check_time_ esphome#16107 by @swoboda1337
- [light] Fold LightControlAction fields into a single stateless lambda esphome#16118 by @bdraco
- [tormatic] Use .value() for checked optional access in read_gate_status_ esphome#16121 by @swoboda1337
- [api] Extend NOLINT to cover bugprone-random-generator-seed in MAC varint test esphome#16120 by @swoboda1337
- [haier] Fix bugprone-unchecked-optional-access; switch HardwareInfo to char[9] esphome#16124 by @swoboda1337
- [mixer_speaker] NOLINT bugprone-unchecked-optional-access in audio_mixer_task esphome#16130 by @swoboda1337
- [aqi] Use std::max initializer-list for non-negative AQI clamp esphome#16134 by @swoboda1337
- [kamstrup_kmp][toshiba] Fix signed/unsigned comparisons against sizeof esphome#16135 by @swoboda1337
- [remote_base][core] Drop redundant typename in dependent type contexts esphome#16137 by @swoboda1337
- [core] Inline HAL clock wrappers and split hal.h into per-platform headers esphome#15977 by @bdraco
- [valve] Add tests for valve.control action field combinations esphome#16126 by @bdraco
- [fan] Add tests for fan.turn_on action field combinations esphome#16125 by @bdraco
- [core] Catch body-read errors in download_content esphome#16023 by @bdraco
- [ens160] Fix sensor initialization timing esphome#16024 by @GelidusResearch
- [core] Defer heavy module-scope imports in main, loader, and config esphome#15955 by @bdraco
- [espnow] Cleanup method visibility and naming esphome#16109 by @clydebarrow
- [scheduler] Add self-keyed timer API for callers without a Component esphome#16127 by @bdraco
- [watchdog] Use default CHECK_IDLE_TASK and PANIC when configuring the watchdog esphome#16142 by @Mat931
- [fan] Fold TurnOnAction fields into a single stateless lambda esphome#16122 by @bdraco
- [valve] Fold ControlAction fields into a single stateless lambda esphome#16123 by @bdraco
- [esp32] Move HAL bodies into components/esp32/hal.cpp + inline trivial dispatches esphome#16111 by @bdraco
- [ota] Use WatchdogManager for OTA on ESP32 esphome#16138 by @Mat931
- [ci] Bump clang-tidy from 18.1.8 to 22.1.0.1 esphome#16078 by @swoboda1337
- [core] DelayAction: drop Component inheritance, use self-keyed scheduler esphome#16129 by @bdraco
- [sx126x] Add cold sleep option and drop unused RTC wakeup bit esphome#16144 by @swoboda1337 (new-feature)
- [esp32] Add ESP-IDF 6.0.1 platform entry esphome#16146 by @swoboda1337
- [core] Fix null deref in WarnIfComponentBlockingGuard for self-keyed scheduler timers esphome#16150 by @bdraco
- [ci] Correct version comment on create-github-app-token pin esphome#16156 by @jesserockz
- [ci] Use client-id for GitHub App token generation esphome#16155 by @jesserockz
- [esp8266] Move HAL bodies into components/esp8266/hal.cpp + inline arch_init esphome#16112 by @bdraco
- [st7789v] Add deprecation warnings esphome#16162 by @clydebarrow
- [audio] Enable specific codecs and configure advanced features esphome#16166 by @kahrendt (new-feature)
- [audio] bump microOpus to v0.4.0 to use fixed-point by default on ESP32 esphome#16168 by @kahrendt
- [core] Simplify RAMAllocator and add internal fallback to external mode esphome#16171 by @kahrendt
- [libretiny] Move HAL bodies into components/libretiny/hal.cpp + inline trivial dispatches esphome#16113 by @bdraco
- [ci] Split integration tests into 3 buckets when count is more than 10 esphome#16152 by @bdraco
- [sensor] Drop Component from filter classes, use self-keyed scheduler esphome#16132 by @bdraco
- [bk72xx] Apply CFG_SUPPORT_BLE=0 SDK option to BK7238 esphome#16181 by @bdraco
- [sensor] Pack ThrottleAverageFilter have_nan_ into n_ bitfield (-4 B/instance) esphome#16169 by @bdraco (breaking-change)
- [core] Inline loop gate expression to avoid stale local reuse esphome#16167 by @bdraco
- [api] Add encode/decode benchmarks for Z-Wave, IR/RF, and serial proxy messages esphome#16157 by @bdraco
- [core] Drop unused DELAY_ACTION from InternalSchedulerID enum esphome#16151 by @bdraco
- [mdns] Broadcast config_hash TXT record on _esphomelib._tcp esphome#16145 by @bdraco
- [binary_sensor] Drop Component from filter classes, use self-keyed scheduler esphome#16131 by @bdraco
- [rp2040] Move HAL bodies into components/rp2040/hal.cpp + inline trivial dispatches esphome#16114 by @bdraco
- [climate] Fold ControlAction fields into a single stateless lambda esphome#16044 by @bdraco
- [host] Move HAL bodies into components/host/hal.cpp + inline trivial dispatches esphome#16115 by @bdraco
- [zephyr] Move HAL bodies into components/zephyr/hal.cpp + inline trivial dispatches esphome#16116 by @bdraco
- [sendspin] Use sendspin-cpp to v0.4.0 to reduce stuttering esphome#16178 by @kahrendt (new-feature)
- [esp32_hosted] Bump esp_hosted to 2.12.6 and esp_wifi_remote to 1.5.1 esphome#16176 by @swoboda1337
- [zigbee] Add newlib compatibility for zigbee sdk in idf 6 esphome#16174 by @luar123
- [core] Enable ruff FLY (flynt) lint family esphome#16182 by @bdraco
- [core] Move per-platform hal_platform.h into components/platform/hal.h esphome#16183 by @bdraco
- [usb_host][usb_uart] Add configurable max packet size esphome#14584 by @p1ngb4ck (new-feature)
- [core] Support allocating ring buffer in internal memory esphome#16187 by @kahrendt
- [ota] Add extended OTA protocol esphome#16164 by @Mat931 (new-feature)
- [nextion] TFT upload no longer fails when the display sends a split
0x08ack esphome#16205 by @edwardtfn - [zephyr] feed watchdog early. Otherwise OTA may rollback. esphome#16218 by @tomaszduda23
- [ota] Add partition table update functionality to ota component esphome#15780 by @Mat931 (new-feature)
- [esp8266] Lower WDT_FEED_INTERVAL_MS to 100 ms esphome#16197 by @bdraco
- [fan] Fix TurnOnAction trigger args with reference types esphome#16222 by @bdraco
- [climate] Fix ControlAction trigger args with reference types esphome#16221 by @bdraco
- [light] Fix LightControlAction trigger args with reference types esphome#16220 by @bdraco
- [tests] Fix flaky host_mode_climate_basic_state esphome#16225 by @bdraco
- [valve] Fix ControlAction trigger args with reference types esphome#16223 by @bdraco
- [ci] Run downstream device-builder tests against PR Python code esphome#16214 by @bdraco
- [dashboard] Stabilize device-builder dashboard backend’s API surface esphome#16206 by @bdraco
- [cover] Fold ControlAction/CoverPublishAction fields into stateless lambdas esphome#16046 by @bdraco
- [api] Mark high-volume proxy messages as speed_optimized (Infrared/RF, Z-Wave, serial) esphome#16159 by @bdraco
- [tests] Fix flaky host_mode_climate_basic_state integration test esphome#16192 by @bdraco
- [api] Don’t tear down log connection on stack-trace decode failure esphome#16196 by @bdraco
- [binary_sensor] Drop Component from AutorepeatFilter, use self-keyed scheduler esphome#16191 by @bdraco
- [zephyr] Add nRF52 component tests so CI runs on zephyr-only changes esphome#16188 by @bdraco
- [tests] Drop duplicate on_boot_restore_from in host_mode_climate_basic_state esphome#16228 by @bdraco
- [sensor] Document why TimeoutFilterBase intentionally keeps Component esphome#16194 by @bdraco
- [main] Move stacktrace handling out of platformio_api and FlashImage into platform components/util esphome#16186 by @diorcety
- [audio] Use the microMP3 library instead of esp-audio-libs esphome#16236 by @kahrendt
- [http_request] remove slow http_request warning on 8266 esphome#16239 by @oarcher
- [audio][media_player][speaker] WAV decoding is no longer always built esphome#16244 by @kahrendt (breaking-change)
- [audio_file] Use microDecoder library instead of manual task management/decoding esphome#16237 by @kahrendt
- [platformio_api] Remove duplicated _strip_win_long_path_prefix esphome#16249 by @jesserockz
- [i2s_audio] Fix stereo playback when slot bit width exceeds data bit width esphome#16248 by @kbx81
- [audio] Bump microOpus to v0.4.1 esphome#16255 by @kahrendt
- [audio] Use the microWAV library for decoding esphome#16251 by @kahrendt
- [debug] Remove unused buffer in uicr lambda function esphome#16208 by @tomaszduda23
- [cli] Add —ota-platform flag to pick web_server or native API OTA esphome#16207 by @bdraco (new-feature)
- [core] Replace scheduler pool vector with unbounded intrusive freelist esphome#16172 by @bdraco
- [packages] Add resolve_packages single-call seam esphome#16235 by @bdraco
- [cover] Fix ControlAction / CoverPublishAction trigger args with reference types esphome#16227 by @bdraco
- [web_server] Use entity_types.h X-macro for ListEntitiesIterator declarations esphome#16077 by @bdraco
- [api] Use entity_types.h X-macro for ListEntitiesIterator declarations esphome#16076 by @bdraco
- [api] Use entity_types.h X-macro for InitialStateIterator declarations esphome#16075 by @bdraco
- [audio] Bump esp-audio-libs to v3.0.0 esphome#16263 by @kahrendt
- [nrf52] add reserve area for bootloader esphome#16204 by @tomaszduda23
- [logger] give a chance to print crash esphome#16203 by @tomaszduda23
- [audio_file][speaker] Eliminate code duplication for files built into firmware esphome#16266 by @kahrendt (breaking-change)
- [lvgl] Allow line points as percentages esphome#16209 by @clydebarrow (new-feature)
- [core] Skip external component update on
esphome cleanesphome#16268 by @bdraco - [script] Make pre-commit and helpers work on Windows esphome#16260 by @swoboda1337
- [http_request] Add regression test for light action inside on_response esphome#16270 by @bdraco
- [atm90e32] Fix calibration instance not saving in flash properly esphome#14152 by @CircuitSetup
- [packages] Make package !include vars visible to its substitutions block esphome#16274 by @bdraco
- [ota] Partition table update: Fix log messages esphome#16241 by @Mat931
- [bl0942] Remove broken 24-bit overflow tracking esphome#15650 by @DidierA
- [core] Adds acquire and release methods to the ring buffer class esphome#16277 by @kahrendt
- [i2s_audio] Optimize software volume control esphome#16278 by @kahrendt
- [audio] Bump microFLAC to v0.2.0 esphome#16279 by @kahrendt
- [resolver] Make RESOLVE_TIMEOUT configurable via environment variable esphome#15951 by @dbl-0
- [schema] Surface OnlyWith / OnlyWithout default + gate components in schema generator esphome#16276 by @bdraco
- [uart] Use
tcdrainfor flushing instead oftcflushon host esphome#14877 by @puddly - [lvgl] Pass touch point to touch event lambdas esphome#16272 by @clydebarrow (new-feature)
- [sensor] Add alternate calibration format for ntc esphome#15937 by @clydebarrow (new-feature)
- [helpers] Document write_file’s external consumer contract (esphome-device-builder) esphome#16290 by @bdraco
- [clang-tidy] Concatenate nested namespaces (1/7: components a-c) esphome#16294 by @swoboda1337
- [clang-tidy] Concatenate nested namespaces (2/7: components d-h) esphome#16295 by @swoboda1337
- [clang-tidy] Concatenate nested namespaces (3/7: components i-m) esphome#16297 by @swoboda1337
- [clang-tidy] Concatenate nested namespaces (4/7: components n-r) esphome#16301 by @swoboda1337
- [clang-tidy] Concatenate nested namespaces (5/7: components s) esphome#16302 by @swoboda1337
- [clang-tidy] Concatenate nested namespaces (6/7: components t-z) esphome#16305 by @swoboda1337
- [ci] Skip needs-docs for new components without CONFIG_SCHEMA esphome#16303 by @jesserockz
- [core] Move core ring buffer to helper component esphome#16298 by @kahrendt (new-component)
- [clang-tidy] Concatenate nested namespaces (7/7: tests, platform-gated, enable check) esphome#16307 by @swoboda1337
- [modbus_server] Reduce log spam esphome#16283 by @clydebarrow
- [clang-tidy] Enable readability-redundant-string-init esphome#16310 by @swoboda1337
- [climate][ektf2232] Remove deprecations scheduled for 2026.5.0 esphome#16289 by @swoboda1337
- [htu31d][kamstrup_kmp][ms8607] Use CRC functions from helpers.h esphome#16313 by @Mat931
- [speaker] Add SPDIF output support esphome#8065 by @johnboiles (new-feature)
- [i2s_audio] Refactor SPDIF output, fixing synchronization problems esphome#16319 by @kahrendt
- [openthread] add coroutine-with-priority COMMUNICATION esphome#16318 by @rwrozelle
- [ota] Add bootloader update functionality to ota component esphome#16238 by @Mat931 (new-feature)
- [docker] Silence CopyIgnoredFile warning for build context root esphome#16311 by @jesserockz
- [lvgl] Ensure that
on_valueevents fire on checked change esphome#16119 by @clydebarrow - [config_validation] Add a visibility UI-hint kwarg esphome#16267 by @bdraco
- [wifi][rp2040] Add stable wifi-capability helpers for device-builder esphome#16300 by @bdraco
- [cli] Tighten command_rename: scoped name rewrite, target-collision check esphome#16296 by @bdraco
- [core] Native idf full support esphome#14678 by @diorcety (new-feature)
- [ci] sync-device-classes: mint least-privilege App token esphome#16350 by @jesserockz
- [ci] codeowner-review-request: mint least-privilege App token esphome#16351 by @jesserockz
- [ci] Tighten workflow permissions to least-privilege esphome#16349 by @jesserockz
- [ci] Fix external-component-bot 403 on PR comments esphome#16354 by @jesserockz
- [tuya] allow status pin that doesn’t match the reported one esphome#16353 by @ssieb
- [core] Move platformio files to subfolder esphome#16347 by @swoboda1337
- [wifi] Accept lowercase variant in variant_has_wifi esphome#16345 by @bdraco
- [core] Add stable esphome.upload_targets module for port classification esphome#16346 by @bdraco
- [openthread] Remove-freertos-portmacro-header-include esphome#16338 by @rwrozelle
- [logger] fix crash on zephyr esphome#16330 by @tomaszduda23
- [nrf52] add message that west update is running esphome#16321 by @tomaszduda23
- [esp32_camera] Downgrade esp32-camera to 2.1.5 esphome#16293 by @RubenKelevra
- [thermostat] Fix supplemental action never firing via max run time esphome#16308 by @kbx81
- [nrf52][zephyr] prepare for native builds esphome#16193 by @tomaszduda23
- [zigbee] Add sensor support on esp32 esphome#16026 by @luar123 (new-feature)
- [ota] Implement host platform OTA backend with re-exec for integration testing esphome#16304 by @bdraco (new-feature)
- [zigbee] add on_join trigger for esp32 esphome#16060 by @luar123 (new-feature)
- [zigbee] Add power_source option to esp32 esphome#16062 by @luar123 (new-feature)
- [helpers] Re-enable ProgressBar under —dashboard mode esphome#16357 by @bdraco
- [lvgl] Add new trigger
on_updateand new number option esphome#16312 by @clydebarrow (new-feature) - [lvgl] Check for user defined LV_USE items esphome#16362 by @clydebarrow
- [ota] Improve OTA error messages esphome#16327 by @Mat931
- [cli] Add —no-states flag to run command esphome#16366 by @clydebarrow
- [core] Fix PROGMEM_STRING_TABLE placement on ESP8266 without flash log strings esphome#16373 by @swoboda1337
- [script] Fix array-type parameters in script.execute esphome#16374 by @bdraco
- [script] Preserve source order of enum options in language schema esphome#16371 by @jesserockz
- [core] allow defining run_compile in external_components esphome#16179 by @tomaszduda23
- [ci] Comment on PRs that touch the legacy dashboard esphome#16378 by @bdraco
- [rp2040] Bump arduino-pico framework to 5.6.0 esphome#16375 by @bdraco
- [sendspin] Fix client_id MAC mismatch with ethernet esphome#16331 by @kahrendt
- [mitsubishi_cn105] Add C++ API for setting/clearing remote room temperature esphome#15558 by @crnjan (new-feature)
- [sendspin] Updates sendspin-cpp to v0.5.0 esphome#16380 by @kahrendt
- [cli] Add config-hash command esphome#15548 by @ccutrer (new-feature)
- Move AI instructions to AGENTS.md esphome#16382 by @jesserockz
- [zigbee] Fix init-order and missing-field warnings on native ESP-IDF esphome#16389 by @swoboda1337
- [ms8607] Pin humidity i2c_id in test fixture esphome#16386 by @swoboda1337
- [audio] Add a RingBufferAudioSource esphome#16314 by @kahrendt
- [ci] Add validate.*.yaml for config-only component tests esphome#16384 by @jesserockz
- [micro_wake_word] Increase INFERENCE_TASK_STACK_SIZE to 8192 for P4 chip esphome#16390 by @ggalt
- [i2s_audio] Speaker uses new RingBufferAudioSource esphome#16315 by @kahrendt
- [mixer] Use RingBufferAudioSource esphome#16316 by @kahrendt
- [esp32] Relax -Werror=reorder and -Werror=maybe-uninitialized on native ESP-IDF esphome#16392 by @swoboda1337
- [safe_mode] Allow recovering soft-bricked devices via reboot to recovery partition esphome#16339 by @Mat931 (new-feature)
- [audio] Document ring buffer source thread safety esphome#16393 by @kahrendt
- [i2s_audio] Properly track DMA input/output esphome#16317 by @kahrendt
- [api][voice_assistant] Add second audio channel for voice_assistant esphome#16265 by @synesthesiam (new-feature)
- [esp32] Print PlatformIO-format RAM/Flash summary after native ESP-IDF builds esphome#16394 by @swoboda1337
- [radio_frequency] Add on_control trigger; ir_rf_proxy driver-agnostic esphome#16368 by @kbx81 (new-feature)
- [core] Fix !include vars not being substituted in !lambda values esphome#16320 by @dmik
- [mitsubishi_cn105] Unified timeout handling esphome#16385 by @crnjan
- [core] Cache validated config to skip re-validation on upload/logs esphome#16381 by @bdraco
- [ci] Skip native ESP-IDF compile test when no relevant files changed esphome#16395 by @bdraco
- [tests] Cover top-level !include failure path in track_yaml_loads esphome#16396 by @bdraco
- [core] Retry PlatformIO downloads on transport-layer errors esphome#16397 by @bdraco
- [espidf] Partition pio_components cache by framework esphome#16401 by @swoboda1337
- [espidf] Emit -W warning flags at project scope so managed components also see them esphome#16403 by @swoboda1337
- [mitsubishi_cn105] Simplified protocol lookups esphome#16399 by @crnjan
- [tests] Add CodSpeed benchmark for compiled-config cache fast path esphome#16402 by @bdraco
- [espidf] Run PIO extraScript with SCons-env shim esphome#16404 by @swoboda1337
- [mitsubishi_cn105] Add vane and wide-vane support esphome#16405 by @crnjan
- [writer] Clean ESP-IDF build artifacts in clean_build esphome#16410 by @swoboda1337
- [espidf] Regenerate bundled CMakeLists; auto-REQUIRE via IDF build properties esphome#16406 by @swoboda1337
- [espidf] Stop perpetual reconfigure loop on native ESP-IDF builds esphome#16415 by @swoboda1337
- [espidf] Trim has_outdated_files watch list; embed IDF version in sdkconfig esphome#16416 by @swoboda1337
- [tinyusb] Reject
tinyusb:configured without a USB class companion esphome#16413 by @kbx81 - [tinyusb] Reject
logger.hardware_uart: USB_CDCesphome#16417 by @kbx81 - [esp32] Sweep ESP-IDF toolchain warnings + bump deprecated mark_failed esphome#16432 by @swoboda1337
- [tests] Fix -Wformat= mismatches in test YAML lambdas/logger.log esphome#16435 by @swoboda1337
- [docker] Install libusb-1.0 so ESP-IDF tools can validate openocd esphome#16424 by @swoboda1337
- [multiple] Fix -Wformat= mismatches in component .cpp sources esphome#16433 by @swoboda1337
- [espidf] Gate esp_idf_size —ng on IDF version esphome#16441 by @swoboda1337
- [esp32_hosted] Bump esp_hosted to 2.12.7 esphome#16440 by @swoboda1337
- [audio] Bump microMP3 to v0.2.1 esphome#16429 by @kahrendt
- [sound_level] Use RingBufferAudioSource esphome#16436 by @kahrendt
- [wifi] Refuse to compile when wifi_ssid is the device-builder placeholder esphome#16444 by @bdraco
- [core] Fix KeyError: ‘esp32’ on upload when validated-config cache is used esphome#16457 by @bdraco
- [esp32_hosted][fingerprint_grow] Fix two remaining ESP32 toolchain warnings esphome#16442 by @swoboda1337
- [ft5x06] Fix setting calibration values esphome#16446 by @clydebarrow
- [lvgl] Fix image define esphome#16468 by @clydebarrow
- [ci] Use larger app partition for esp32-s3-idf component test grouping esphome#16430 by @bdraco
- [espidf] Switch direct framework downloader to esphome-libs/esp-idf tarballs esphome#16484 by @swoboda1337
- [ci] Move ha-addon and schema release triggers to version-notifier esphome#16490 by @jesserockz
- [sen5x] Remove incorrect AQI device class from VOC and NOx Index sensors esphome#16463 by @bharvey88 (breaking-change)
- [sgp4x] Remove incorrect AQI device class from VOC and NOx Index sensors esphome#16464 by @bharvey88 (breaking-change)
- [sen6x] Remove incorrect AQI device class from VOC and NOx Index sensors esphome#16465 by @bharvey88 (breaking-change)
- [i2s_audio] Compute ring buffer size with SPDIF sample count esphome#16400 by @kahrendt
- [zigbee] don’t allow zigbee + thread or access point esphome#16499 by @luar123
- [espidf] Print RAM summary on ESP32-S3 / unified-DIRAM variants esphome#16494 by @swoboda1337
- [i2s_audio] Optimize SPDIF encoder and suport higher bit depth audio esphome#16504 by @kahrendt (new-feature)
- [sendspin] Bump sendspin to v0.6.0 esphome#16496 by @kahrendt
- [espidf] Drop version field from generated idf_component.yml esphome#16511 by @swoboda1337
- [esp32] Decouple esp-idf toolchain version check from PIO, honor framework source: override esphome#16516 by @swoboda1337
Dependency Changes
Section titled “Dependency Changes”- Bump ruff from 0.15.9 to 0.15.10 esphome#15609 by @dependabot[bot]
- Bump resvg-py from 0.2.6 to 0.3.0 esphome#15629 by @dependabot[bot]
- Bump actions/upload-artifact from 7.0.0 to 7.0.1 esphome#15631 by @dependabot[bot]
- Bump docker/build-push-action from 7.0.0 to 7.1.0 in /.github/actions/build-image esphome#15633 by @dependabot[bot]
- Bump actions/github-script from 8.0.0 to 9.0.0 esphome#15632 by @dependabot[bot]
- Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 esphome#15630 by @dependabot[bot]
- Bump resvg-py from 0.3.0 to 0.3.1 esphome#15640 by @dependabot[bot]
- Bump actions/cache from 5.0.4 to 5.0.5 in /.github/actions/restore-python esphome#15714 by @dependabot[bot]
- Bump actions/cache from 5.0.4 to 5.0.5 esphome#15713 by @dependabot[bot]
- Bump actions/create-github-app-token from 3.0.0 to 3.1.1 esphome#15712 by @dependabot[bot]
- Bump github/codeql-action from 4.35.1 to 4.35.2 esphome#15759 by @dependabot[bot]
- Bump ruff from 0.15.10 to 0.15.11 esphome#15790 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.13.1 to 4.14.0 esphome#15880 by @dependabot[bot]
- Bump aioesphomeapi from 44.16.1 to 44.17.0 esphome#15906 by @dependabot[bot]
- Update pyparsing requirement from >=3.0 to >=3.3.2 esphome#15910 by @dependabot[bot]
- Bump aioesphomeapi from 44.17.0 to 44.18.0 esphome#15912 by @dependabot[bot]
- Update tzdata requirement from >=2021.1 to >=2026.1 esphome#15911 by @dependabot[bot]
- Update argcomplete requirement from >=2.0.0 to >=3.6.3 esphome#15921 by @dependabot[bot]
- Bump aioesphomeapi from 44.18.0 to 44.19.0 esphome#15920 by @dependabot[bot]
- Bump click from 8.3.2 to 8.3.3 esphome#15927 by @dependabot[bot]
- Update wheel requirement from <0.47,>=0.43 to >=0.43,<0.48 esphome#15926 by @dependabot[bot]
- Bump aioesphomeapi from 44.19.0 to 44.20.0 esphome#15936 by @dependabot[bot]
- Bump aioesphomeapi from 44.20.0 to 44.21.0 esphome#15941 by @dependabot[bot]
- Update tzdata requirement from >=2026.1 to >=2026.2 esphome#15980 by @dependabot[bot]
- Bump ruff from 0.15.11 to 0.15.12 esphome#15981 by @dependabot[bot]
- Bump aioesphomeapi from 44.21.0 to 44.22.0 esphome#15989 by @dependabot[bot]
- Bump cryptography from 46.0.7 to 47.0.0 esphome#15990 by @dependabot[bot]
- Bump esphome-dashboard from 20260408.1 to 20260425.0 esphome#16006 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.14.0 to 4.15.0 esphome#16084 by @dependabot[bot]
- Bump esphome/workflows/.github/workflows/lock.yml from 2026.4.0 to 2026.4.1 esphome#16143 by @dependabot[bot]
- Bump aioesphomeapi from 44.22.0 to 44.23.0 esphome#16161 by @dependabot[bot]
- Bump github/codeql-action from 4.35.2 to 4.35.3 esphome#16201 by @dependabot[bot]
- Bump cryptography from 47.0.0 to 48.0.0 esphome#16245 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.15.0 to 4.15.1 esphome#16281 by @dependabot[bot]
- Bump github/codeql-action from 4.35.3 to 4.35.4 esphome#16299 by @dependabot[bot]
- Bump requests from 2.33.1 to 2.34.0 esphome#16364 by @dependabot[bot]
- Bump actions/cache from 5.0.3 to 5.0.5 esphome#16365 by @dependabot[bot]
- Bump aioesphomeapi from 44.23.0 to 44.24.2 esphome#16376 by @dependabot[bot]
- Bump aioesphomeapi from 44.24.2 to 45.0.0 esphome#16391 by @dependabot[bot]
- Bump requests from 2.34.0 to 2.34.1 esphome#16408 by @dependabot[bot]
- Bump actions/create-github-app-token from 3.1.1 to 3.2.0 esphome#16409 by @dependabot[bot]
- Bump aioesphomeapi from 45.0.0 to 45.0.1 esphome#16467 by @dependabot[bot]
- Bump aioesphomeapi from 45.0.1 to 45.0.2 esphome#16469 by @dependabot[bot]
- Bump aioesphomeapi from 45.0.2 to 45.0.3 esphome#16479 by @dependabot[bot]
- Bump zeroconf from 0.148.0 to 0.149.3 esphome#16480 by @dependabot[bot]
- Bump zeroconf from 0.149.3 to 0.149.7 esphome#16492 by @dependabot[bot]
- Bump zeroconf from 0.149.7 to 0.149.12 esphome#16510 by @dependabot[bot]
- Bump aioesphomeapi from 45.0.3 to 45.0.4 esphome#16513 by @dependabot[bot]