ESPHome 2026.4.0 - April 2026
Read the ESPHome 2026.4.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”- [vbus] add DeltaSol CS4 (Citrin Solar 1.3) esphome#12477 by @mike1703 (new-feature)
- [psram] Add ESP32-C61 PSRAM support esphome#14795 by @swoboda1337 (new-feature)
- [ethernet] Add RP2040 W5500 Ethernet support esphome#14820 by @bdraco (new-feature)
- [mipi_rgb] Make h- and v-sync pins optional esphome#14870 by @FWeinb (new-feature)
- [mqtt] Support JSON payload with code for alarm control panel commands esphome#14731 by @heythisisnate (new-feature)
- [lvgl] Migrate to library v9.5.0 esphome#12312 by @clydebarrow (new-feature)
- [esp32] Add custom partitions and refactor partition table generation esphome#7682 by @luar123 (new-feature) (breaking-change)
- [spa06_base] Add SPA06-003 Temperature and Pressure Sensor (Part 1 of 3) esphome#14521 by @danielkent-net (new-component) (new-feature)
- [remote_base] add support for brennenstuhl comfort-line switches esphome#9407 by @aanban (new-feature)
- [spa06_i2c] Add SPA06-003 Temperature and Pressure Sensor - I2C support (Part 2 of 3) esphome#14522 by @danielkent-net (new-component) (new-feature) (new-platform)
- [ethernet] Add ENC28J60 SPI Ethernet support esphome#14945 by @bdraco (new-feature)
- [spa06_spi] Add SPA06-003 Temperature and Pressure Sensor - SPI support (Part 3 of 3) esphome#14523 by @danielkent-net (new-component) (new-feature) (new-platform)
- [text] Add text_sensor for read-only view of text component esphome#15090 by @clydebarrow (new-feature) (new-platform)
- [number] Add sensor platform esphome#15125 by @clydebarrow (new-feature) (new-platform)
- [esp32] Add sram1_as_iram option and bootloader version detection esphome#14874 by @bdraco (new-feature)
- [ethernet] Add W5100 support for RP2040 esphome#15131 by @bdraco (new-feature)
- [hub75] Add SCAN_1_8_32PX_FULL wiring option esphome#15130 by @intcreator (new-feature)
- [api] Add —no-states flag to esphome logs command esphome#15160 by @bdraco (new-feature)
- [infrared][ir_rf_proxy] Add
receiver_frequencyconfig for IR receiver demodulation frequency esphome#15156 by @kbx81 (new-feature) - [bmp581] Add SPI support for BMP581 esphome#13124 by @danielkent-net (new-component) (new-feature) (new-platform)
- [tm1637] Add buffer manipulation methods esphome#13686 by @tuct (new-feature)
- [internal_temperature] Add nRF52 Zephyr support esphome#15297 by @Ardumine (new-feature)
- [bmp581_base] Add support for BMP585 esphome#15277 by @nytaros (new-feature)
- [hdc2080] Add support for HDC2080 sensor esphome#9331 by @G-Pereira (new-component) (new-feature) (new-platform)
- [lvgl] Fixes #4 esphome#15334 by @clydebarrow (new-feature)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 1) esphome#15315 by @crnjan (new-component) (new-feature) (new-platform)
- [lvgl] Add missing event names esphome#15362 by @clydebarrow (new-feature)
- [media_player] Add enqueue action esphome#14775 by @kahrendt (new-feature)
- [dsmr] Allow setting MBUS id for thermal sensors in DSMR component esphome#7519 by @thomwiggers (new-feature)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 2) esphome#15358 by @crnjan (new-feature)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 3) esphome#15437 by @crnjan (new-feature)
- [pcf8574][pca9554] Add optional interrupt pin to eliminate polling esphome#15444 by @bdraco (new-feature)
- [mcp23xxx][pi4ioe5v6408] Add optional interrupt pin to eliminate polling esphome#15445 by @bdraco (new-feature)
- [internal_temperature] Add support for LN882X (Lightning LN882H) esphome#15370 by @Bl00d-B0b (new-feature)
- [ethernet] Add
interfaceconfiguration variable for esp-idf esphome#10285 by @rtyle (new-feature) - [lvgl] option to enable LVGL’s built-in dark theme esphome#15389 by @RAR (new-feature)
- [esp32] Add signed app verification without hardware secure boot esphome#15357 by @kbx81 (new-feature)
- [esp8266] Add crash handler for post-mortem diagnostics esphome#15465 by @bdraco (new-feature) (breaking-change)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 4) esphome#15462 by @crnjan (new-feature)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 5) esphome#15483 by @crnjan (new-feature)
- [lvgl] Implement rotation directly esphome#14955 by @clydebarrow (new-feature) (breaking-change)
- [cli] Add config bundle CLI command for remote compilation esphome#13791 by @bdraco (new-feature)
- [nextion] Expose custom protocol frames as automation triggers esphome#13248 by @edwardtfn (new-feature)
- [emontx] emonTx component esphome#9027 by @FredM67 (new-component) (new-feature) (new-platform)
- [substitutions]
!include ${filename}, Substitutions in include filename paths (package refactor part 5) esphome#12213 by @jpeletier (new-feature) - [ethernet] Add W6100 and W6300 support for RP2040 esphome#15543 by @bdraco (new-feature)
- [esp32_hosted] Add SPI transport and SDIO 1-bit bus width support esphome#15551 by @swoboda1337 (new-feature)
- [tca9555] Add interrupt pin support esphome#15613 by @bdraco (new-feature)
- [pca6416a] Add interrupt pin support esphome#15614 by @bdraco (new-feature)
- [mcp23016] Add interrupt pin support esphome#15616 by @bdraco (new-feature)
New Components
Section titled “New Components”- [spa06_base] Add SPA06-003 Temperature and Pressure Sensor (Part 1 of 3) esphome#14521 by @danielkent-net (new-component) (new-feature)
- [spa06_i2c] Add SPA06-003 Temperature and Pressure Sensor - I2C support (Part 2 of 3) esphome#14522 by @danielkent-net (new-component) (new-feature) (new-platform)
- [spa06_spi] Add SPA06-003 Temperature and Pressure Sensor - SPI support (Part 3 of 3) esphome#14523 by @danielkent-net (new-component) (new-feature) (new-platform)
- [bmp581] Add SPI support for BMP581 esphome#13124 by @danielkent-net (new-component) (new-feature) (new-platform)
- [hdc2080] Add support for HDC2080 sensor esphome#9331 by @G-Pereira (new-component) (new-feature) (new-platform)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 1) esphome#15315 by @crnjan (new-component) (new-feature) (new-platform)
- [emontx] emonTx component esphome#9027 by @FredM67 (new-component) (new-feature) (new-platform)
New Platforms
Section titled “New Platforms”- [spa06_i2c] Add SPA06-003 Temperature and Pressure Sensor - I2C support (Part 2 of 3) esphome#14522 by @danielkent-net (new-component) (new-feature) (new-platform)
- [spa06_spi] Add SPA06-003 Temperature and Pressure Sensor - SPI support (Part 3 of 3) esphome#14523 by @danielkent-net (new-component) (new-feature) (new-platform)
- [text] Add text_sensor for read-only view of text component esphome#15090 by @clydebarrow (new-feature) (new-platform)
- [number] Add sensor platform esphome#15125 by @clydebarrow (new-feature) (new-platform)
- [bmp581] Add SPI support for BMP581 esphome#13124 by @danielkent-net (new-component) (new-feature) (new-platform)
- [hdc2080] Add support for HDC2080 sensor esphome#9331 by @G-Pereira (new-component) (new-feature) (new-platform)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 1) esphome#15315 by @crnjan (new-component) (new-feature) (new-platform)
- [emontx] emonTx component esphome#9027 by @FredM67 (new-component) (new-feature) (new-platform)
Breaking Changes
Section titled “Breaking Changes”- [i2s_audio] Remove legacy I2S driver support esphome#14932 by @swoboda1337 (breaking-change)
- [esp32] Add custom partitions and refactor partition table generation esphome#7682 by @luar123 (new-feature) (breaking-change)
- [substitutions] substitutions pass and !include redesign (package refactor part 2b) esphome#14918 by @jpeletier (breaking-change)
- [esp32] Default CPU frequency to maximum supported esphome#15143 by @swoboda1337 (breaking-change)
- [binary_sensor] Use std::array in AutorepeatFilter esphome#15268 by @bdraco (breaking-change)
- [binary_sensor] Use std::array in MultiClickTrigger esphome#15267 by @bdraco (breaking-change)
- [esp8266] Add crash handler for post-mortem diagnostics esphome#15465 by @bdraco (new-feature) (breaking-change)
- [lvgl] Implement rotation directly esphome#14955 by @clydebarrow (new-feature) (breaking-change)
- [packages] Fix false deprecation warning and wrong error paths in nested packages esphome#15605 by @bdraco (breaking-change)
All changes
Section titled “All changes”- [ci] Add PR title check for unescaped angle brackets esphome#14701 by @bdraco
- [ci] Dont run codeowners workflows on release or beta PRs esphome#14703 by @jesserockz
- [const] Add UNIT_METER_PER_SECOND, UNIT_MILLILITRE, UNIT_POUND to const.py esphome#14713 by @jpeletier
- reset address_name_ esphome#12150 by @Pernotto
- [vbus] add DeltaSol CS4 (Citrin Solar 1.3) esphome#12477 by @mike1703 (new-feature)
- [const] Add CONF_CLIMATE_ID for climate component sub-entities esphome#14764 by @P4uLT
- [core] Fix std::isnan conflict with picolibc on ESP-IDF 6.0 esphome#14768 by @swoboda1337
- [wifi] Fix ESP-IDF 6.0 compatibility esphome#14766 by @swoboda1337
- [sensor] Use FixedRingBuffer in SlidingWindowFilter, add window_size limit esphome#14736 by @bdraco
- [pid] Replace std::deque with FixedRingBuffer esphome#14733 by @P4uLT
- [mipi_dsi] Fix ESP-IDF 6.0 compatibility for LCD color format esphome#14785 by @swoboda1337
- [adc] Fix ESP-IDF 6.0 compatibility for ADC_ATTEN_DB_12 esphome#14784 by @swoboda1337
- [analyze-memory] Add function call frequency analysis esphome#14779 by @bdraco
- [ci] Only run integration tests for changed components esphome#14776 by @bdraco
- [api] Inline force-variant ProtoSize calc methods esphome#14781 by @bdraco
- [esp32_rmt_led_strip][remote_transmitter][remote_receiver] Fix ESP-IDF 6.0 RMT compatibility esphome#14783 by @swoboda1337
- [scheduler] Use integer math for interval offset calculation esphome#14755 by @bdraco
- [rp2040] Add CI check for boards.py freshness esphome#14754 by @bdraco
- [core] Inline trivial EntityBase accessors esphome#14782 by @bdraco
- [api] Reduce API code size with buffer and nodelay optimizations esphome#14797 by @bdraco
- [output] Inline trivial FloatOutput accessors esphome#14786 by @bdraco
- [esp32_camera] Bump esp32-camera to 2.1.5 esphome#14806 by @swoboda1337
- [tinyusb][usb_cdc_acm] Bump esp_tinyusb to 2.1.1 esphome#14796 by @swoboda1337
- [psram] Add ESP32-C61 PSRAM support esphome#14795 by @swoboda1337 (new-feature)
- [psram] Fix ESP-IDF 6.0 compatibility for PSRAM sdkconfig options esphome#14794 by @swoboda1337
- [mipi_dsi] Fix ESP-IDF 6.0 compatibility for use_dma2d flag esphome#14792 by @swoboda1337
- [ledc] Fix ESP-IDF 6.0 compatibility for peripheral reset esphome#14790 by @swoboda1337
- [sha256] Migrate to PSA Crypto API for ESP-IDF 6.0 esphome#14809 by @bdraco
- [helpers] Replace deprecated std::is_trivial in FixedRingBuffer esphome#14808 by @bdraco
- [esp32] Disable SHA-512 in mbedTLS on IDF 6.0+ and add idf_version() helper esphome#14810 by @bdraco
- [hmac_sha256] Migrate to PSA Crypto MAC API for ESP-IDF 6.0 esphome#14814 by @bdraco
- [esp32_ble_tracker] Migrate to PSA Crypto API for ESP-IDF 6.0 esphome#14811 by @bdraco
- [dlms_meter] Migrate GCM to PSA AEAD API for ESP-IDF 6.0 esphome#14817 by @bdraco
- [debug] Fix ESP-IDF 6.0 compatibility for wakeup cause API esphome#14812 by @bdraco
- [bthome_mithermometer][xiaomi_ble] Migrate CCM to PSA AEAD API for ESP-IDF 6.0 esphome#14816 by @bdraco
- [mqtt] Fix ESP-IDF 6.0 compatibility for external MQTT component esphome#14822 by @swoboda1337
- [multiple] Fix implicit int-to-gpio_num_t conversions for GCC 15 esphome#14830 by @swoboda1337
- [ci] Support URL and version extras in generate-esp32-boards.py esphome#14828 by @swoboda1337
- [esp32] Support non-numeric version extras in IDF version string esphome#14826 by @swoboda1337
- [tests] Fix integration helper to match entities exactly esphome#14837 by @exciton
- [core] Add no-arg status_set_warning() to allow linker GC of const char* overload esphome#14821 by @bdraco
- [core] Mark leaf Component subclasses as final esphome#14833 by @bdraco
- [ethernet] Restructure for multi-platform support esphome#14819 by @bdraco
- [tinyusb] Fix regression from bump to 2.x in #14796 esphome#14848 by @kbx81
- [usb_host] Fix ESP-IDF 6.0 compatibility for external USB host component esphome#14844 by @swoboda1337
- [deep_sleep] Fix ESP-IDF 6.0 GPIO wakeup API rename esphome#14846 by @swoboda1337
- [ethernet] Add IDF 6.0 registry component dependencies esphome#14847 by @bdraco
- [api] Optimize plaintext varint encoding and devirtualize write_protobuf_packet esphome#14758 by @bdraco
- [core] Inline Mutex on all embedded platforms esphome#14756 by @bdraco
- [logger] Reduce per-message overhead by inlining hot path helpers esphome#14851 by @bdraco
- [core] Inline WarnIfComponentBlockingGuard::finish() into header esphome#14798 by @bdraco
- [core] Cache errno to avoid duplicate __errno() calls esphome#14751 by @bdraco
- [ethernet] Add RP2040 W5500 Ethernet support esphome#14820 by @bdraco (new-feature)
- [hub75] Bump esp-hub75 to 0.3.4 esphome#14862 by @swoboda1337
- [ci] Fix clang-tidy hash check 403 error on fork PRs esphome#14860 by @swoboda1337
- [i2c] Handle ESP_ERR_INVALID_RESPONSE as NACK for IDF 6.0 esphome#14867 by @swoboda1337
- [i2s_audio] Fix ESP-IDF 6.0 compatibility for I2S port types esphome#14818 by @swoboda1337
- [web_server] Fix wrong printf format specifier esphome#14836 by @Kamilcuk
- [mipi_rgb] Make h- and v-sync pins optional esphome#14870 by @FWeinb (new-feature)
- [microphone] Switch IDF test to new I2S driver esphome#14886 by @swoboda1337
- [ethernet] Mark EthernetComponent as final esphome#14842 by @bdraco
- [core] Extract shared C++ build helpers from cpp_unit_test.py esphome#14883 by @bdraco
- [core] Add CodSpeed C++ benchmarks for protobuf, main loop, and helpers esphome#14878 by @bdraco
- [esp32_ble][esp32_ble_server] Inline is_active/is_running and remove STL bloat esphome#14875 by @bdraco
- [ci] Run CodSpeed benchmarks on push to dev for baseline esphome#14899 by @bdraco
- [core] Document EventPool sizing requirement with LockFreeQueue esphome#14897 by @bdraco
- [debug][bme680_bsec] Use fnv1_hash_extend to avoid temporary string allocations esphome#14876 by @bdraco
- [ci] Add CodSpeed badge to README esphome#14901 by @bdraco
- [core] cpp tests: Allow customizing code generation during tests esphome#14681 by @jpeletier
- [tests] Fix test_show_logs_serial taking 30s due to unmocked serial port wait esphome#14903 by @bdraco
- [opentherm] Migrate from legacy timer API to GPTimer API esphome#14859 by @swoboda1337
- [ci] Bump Python to 3.14 in sync-device-classes workflow esphome#14912 by @bdraco
- [core] Inline progmem_read functions on non-ESP8266 platforms esphome#14913 by @bdraco
- [scheduler] Inline fast-path checks into header esphome#14905 by @bdraco
- [scheduler] Early exit cancel path after first match esphome#14902 by @bdraco
- [hub75] Bump esp-hub75 to 0.3.5 esphome#14915 by @swoboda1337
- [bedjet][light][i2s_audio][ld2412] Fix uninitialized pointers, div-by-zero, and buffer validation esphome#14925 by @swoboda1337
- [vl53l0x][ld2420][ble_client][inkplate] Fix state corruption, crash, OOB read, and shift UB esphome#14919 by @swoboda1337
- [vbus][shelly_dimmer][st7789v][modbus_controller] Fix integer overflows, off-by-one, and coordinate swap esphome#14916 by @swoboda1337
- [i2s_audio] Remove legacy I2S driver support esphome#14932 by @swoboda1337 (breaking-change)
- [const] Move shared volume constants to components/const esphome#14935 by @kahrendt
- [media_source] Add request helpers for smart sources esphome#14936 by @kahrendt
- [ld2412] Inline trivial gate threshold number setters esphome#14937 by @bdraco
- [core] Devirtualize PollingComponent::set_update_interval esphome#14938 by @bdraco
- [ota] Pack deferred state args into uint32 to avoid heap allocation esphome#14922 by @bdraco
- [core] Remove call_loop_ wrapper and call loop() directly esphome#14931 by @bdraco
- [core] Replace std::function with lightweight Callback in CallbackManager esphome#14853 by @bdraco
- [api] Extract overflow buffer from frame helper into APIOverflowBuffer esphome#14871 by @bdraco
- [preferences] Devirtualize preference backend and manager classes esphome#14825 by @bdraco
- [mqtt] Support JSON payload with code for alarm control panel commands esphome#14731 by @heythisisnate (new-feature)
- [speaker_source] Reshuffle playlist on repeat all restart esphome#14773 by @kahrendt
- [lvgl] Migrate to library v9.5.0 esphome#12312 by @clydebarrow (new-feature)
- [substitutions] substitutions pass and !include redesign (package refactor part 2a) esphome#14917 by @jpeletier
- [tests] Disable LeakSanitizer in C++ unit tests esphome#14712 by @jpeletier
- [esp32] Add custom partitions and refactor partition table generation esphome#7682 by @luar123 (new-feature) (breaking-change)
- [spa06_base] Add SPA06-003 Temperature and Pressure Sensor (Part 1 of 3) esphome#14521 by @danielkent-net (new-component) (new-feature)
- [absolute_humidity] loop() improvement esphome#14684 by @CFlix
- [remote_base] add support for brennenstuhl comfort-line switches esphome#9407 by @aanban (new-feature)
- [binary_sensor] Replace std::bind with inline lambda in MultiClickTrigger esphome#14956 by @bdraco
- [wireguard] Replace std::bind with inline lambdas esphome#14957 by @bdraco
- [nau7802] Replace std::bind with lambda to fit std::function SBO esphome#14958 by @bdraco
- [xiaomi_rtcgq02lm] Drop unused capture from timeout lambdas esphome#14959 by @bdraco
- [bme68x_bsec2] Store trigger time as member to avoid std::function SBO overflow esphome#14960 by @bdraco
- [core] Replace std::bind with lambdas across 13 components esphome#14961 by @bdraco
- [api] Replace std::bind with lambdas in CustomAPIDevice esphome#14963 by @bdraco
- [mqtt] Replace std::bind with lambdas in CustomMQTTDevice esphome#14964 by @bdraco
- [mqtt] Replace std::bind with lambda in MQTTPublishJsonAction esphome#14965 by @bdraco
- [http_request] Replace std::bind with lambdas in HttpRequestSendAction esphome#14966 by @bdraco
- [core] Replace std::bind with lambda in DelayAction esphome#14968 by @bdraco
- [core] Replace std::bind with placeholders to lambdas esphome#14962 by @bdraco
- [preferences] Compile out loop() when flash_write_interval is non-zero esphome#14943 by @bdraco
- [core] Inline calculate_looping_components_ into header esphome#14944 by @bdraco
- [mhz19] Fix unused function warning for detection_range_to_log_string esphome#14981 by @bdraco
- [ci] Add libretiny and zephyr to memory impact platform filter esphome#14985 by @bdraco
- Ensure lvgl libs available when editing for host esphome#14987 by @clydebarrow
- [template] alarm_control_panel collapse SensorDataStore and bypassed_sensor_indicies into SensorInfo esphome#14852 by @warthog618
- [wifi] Reject WiFi config on RP2040/RP2350 boards without CYW43 chip esphome#14990 by @bdraco
- [lvgl] Fix arc indicator widget not registered in widget_map esphome#14986 by @jpeletier
- [spa06_i2c] Add SPA06-003 Temperature and Pressure Sensor - I2C support (Part 2 of 3) esphome#14522 by @danielkent-net (new-component) (new-feature) (new-platform)
- [gpio] Use constexpr uint32_t timer ID for interlock timeout esphome#15010 by @bdraco
- [rp2040] Fix get_mac_address_raw to use ethernet MAC when WiFi unavailable esphome#15033 by @bdraco
- [ledc] Fix deprecated intr_type warning on ESP-IDF 6.0+ esphome#15009 by @bdraco
- [analyze-memory] Attribute extern C symbols to components via source file mapping esphome#15006 by @bdraco
- [wifi] Use LOG_STR_LITERAL for scan complete log on ESP8266 esphome#15001 by @bdraco
- [modbus] Fix size_t format warning in clear_rx_buffer_ esphome#15002 by @bdraco
- [preferences] Shorten TAG strings across all platforms esphome#15004 by @bdraco
- [core] Optimize Component::is_ready() with bitmask check esphome#15005 by @bdraco
- [number] Clean up NumberCall::perform() increment/decrement logic esphome#15000 by @bdraco
- [esp32] Disable PicolibC Newlib compatibility shim on IDF 6.0+ esphome#15008 by @bdraco
- [core] Store parent pointers as members to enable inline Callback storage esphome#14923 by @bdraco
- [core] Use SplitMix32 PRNG for random_uint32() esphome#14984 by @bdraco
- [benchmark] Add noise encryption benchmarks esphome#15037 by @bdraco
- [api] Enable HAVE_WEAK_SYMBOLS and HAVE_INLINE_ASM for libsodium esphome#15038 by @bdraco
- [benchmark] Add plaintext API frame write benchmarks esphome#15036 by @bdraco
- [lvgl] Don’t animate page change when not requested esphome#15069 by @clydebarrow
- [core] Inline Component::get_component_log_str() esphome#15068 by @bdraco
- [lvgl] Meter fixes esphome#15073 by @clydebarrow
- [wifi] Inline trivial WiFiAP and WiFiComponent accessors esphome#15075 by @bdraco
- [logger] Fix unit test and benchmark Logger constructor calls esphome#15085 by @bdraco
- [sht4x] Add missing hal.h include for millis() on ESP-IDF esphome#15087 by @bdraco
- [logger] Add task_log_buffer_zephyr.cpp to platform source filter esphome#15081 by @bdraco
- [tests] Fix flaky ld24xx integration tests by disabling API batching esphome#15050 by @bdraco
- [core] Reduce automation call chain stack depth esphome#15042 by @bdraco
- [logger] Move log level lookup tables to PROGMEM esphome#15003 by @bdraco
- [esp32] Mention ignore_pin_validation_error in flash pin error message esphome#14998 by @bdraco
- [web_server_idf] Inline send() to reduce httpd task stack depth esphome#15045 by @bdraco
- [core] Fix Callback::create memcpy from function reference esphome#14995 by @bdraco
- [esp32] Validate eFuse MAC reads and reject garbage MACs esphome#15049 by @bdraco
- [packet_transport] Use FixedVector and parent pointer to enable inline Callback storage esphome#14946 by @bdraco
- [core] Inline Application::loop() to eliminate stack frame esphome#15041 by @bdraco
- [logger] Fix dummy_main.cpp Logger constructor for clang-tidy esphome#15088 by @bdraco
- [core] Use placement new allocation for Pvariables esphome#15079 by @Kamilcuk
- [combination] Use FixedVector and parent pointer to enable inline Callback storage esphome#14947 by @bdraco
- [api] Emit raw tag+value writes for forced fixed32 key fields esphome#15051 by @bdraco
- [core] Attribute placement new storage symbols to components esphome#15092 by @bdraco
- [mqtt] Fix const-correctness for trigger constructors esphome#15093 by @bdraco
- [core] Fix placement new storage name for templated types esphome#15096 by @bdraco
- [benchmark] Add binary sensor publish and sensor filter benchmarks esphome#15035 by @bdraco
- [scheduler] Use placement-new for std::function move in set_timer_common_ esphome#14757 by @bdraco
- [network] Inline get_use_address() to eliminate function call overhead esphome#14942 by @bdraco
- [esp32] Patch DRAM segment for testing mode to fix grouped component test overflow esphome#15102 by @bdraco
- [uart] Rename
FlushResulttoUARTFlushResultwithUART_FLUSH_RESULT_prefix esphome#15101 by @kbx81 - [api] Devirtualize API command dispatch esphome#15044 by @bdraco
- [test] Fix flakey ld2412 integration test race condition esphome#15100 by @bdraco
- [wireguard] bump esp_wireguard to 0.4.4 for mbedtls 4.0+ compatibility esphome#15104 by @droscy
- [audio] Bump microOpus to avoid creating an extra opus-staged directory esphome#14974 by @kahrendt
- [lvgl] Various fixes esphome#15098 by @clydebarrow
- [gpio] Compile out interlock fields when unused esphome#15111 by @bdraco
- [api] Make ProtoDecodableMessage::decode() non-virtual esphome#15076 by @bdraco
- [text_sensor] Guard raw_callback_ behind USE_TEXT_SENSOR_FILTER, save 4 bytes per instance esphome#15097 by @bdraco
- [ci] Ban std::bind in new C++ code esphome#14969 by @bdraco
- [spi] Add LOG_SPI_DEVICE macro esphome#15118 by @danielkent-net
- [ethernet] Add ENC28J60 SPI Ethernet support esphome#14945 by @bdraco (new-feature)
- [spa06_spi] Add SPA06-003 Temperature and Pressure Sensor - SPI support (Part 3 of 3) esphome#14523 by @danielkent-net (new-component) (new-feature) (new-platform)
- [text] Add text_sensor for read-only view of text component esphome#15090 by @clydebarrow (new-feature) (new-platform)
- [substitutions] substitutions pass and !include redesign (package refactor part 2b) esphome#14918 by @jpeletier (breaking-change)
- [number] Add sensor platform esphome#15125 by @clydebarrow (new-feature) (new-platform)
- [esp32] Add sram1_as_iram option and bootloader version detection esphome#14874 by @bdraco (new-feature)
- [benchmark] Add noise handshake benchmark esphome#15039 by @bdraco
- [api] Store dump strings in PROGMEM to save RAM on ESP8266 esphome#14982 by @bdraco
- [api] Avoid heap allocation in PSK update timeout lambda esphome#14921 by @bdraco
- [gpio] Remove redundant last_state_ and pack GPIOBinarySensor fields esphome#15113 by @bdraco
- [light] Reorder LightState fields to eliminate padding esphome#15112 by @bdraco
- [substitutions] refactor substitute() as a pure function (package refactor part 3) esphome#15031 by @jpeletier
- [sensor] Deprecate .raw_state, guard raw_callback_ behind USE_SENSOR_FILTER esphome#15094 by @bdraco
- [api] Precompute tag bytes for forced varint and length-delimited fields esphome#15067 by @bdraco
- [substitutions] speed up config loading: substitutions pass and
!includeredesign (package refactor part 4) esphome#12126 by @jpeletier - [core] Fix cg.add_define propagation to dependencies in native ESP-IDF builds esphome#15137 by @diorcety
- [ci] Block new CONF_ constants from being added to esphome/const.py esphome#15145 by @swoboda1337
- [esp32] Default CPU frequency to maximum supported esphome#15143 by @swoboda1337 (breaking-change)
- [light] Fix incorrect mode change handling on transition to off esphome#15147 by @fblaese
- [core] get_log_str: fix false-positive error on null-terminated strings with stricter compilers esphome#15136 by @diorcety
- [core] Fix clean-all to handle custom build paths esphome#15146 by @swoboda1337
- [api] Add descriptive message to status warning when waiting for client esphome#15148 by @bdraco
- [light] Replace initial_state storage with flash-resident callback esphome#15133 by @bdraco
- [ethernet] Add W5100 support for RP2040 esphome#15131 by @bdraco (new-feature)
- [core] Use compile-time HasElse parameter in IfAction esphome#15134 by @bdraco
- [logger] Move task log buffer storage to BSS esphome#15153 by @bdraco
- [time] Remove dummy placeholder values for recalc_timestamp_utc() esphome#15129 by @bdraco
- [lvgl] Various 9.5 fixes esphome#15157 by @clydebarrow
- [core] Add CONF_LIBRETINY constant to const.py esphome#15141 by @szupi-ipuzs
- [lvgl] Update function and type names esphome#15109 by @clydebarrow
- [hub75] Add SCAN_1_8_32PX_FULL wiring option esphome#15130 by @intcreator (new-feature)
- [esp32] Fix GPIO strapping pins and add USB-JTAG warnings esphome#15105 by @FredM67
- [ai] Add instructions regarding constructor parameters esphome#15091 by @clydebarrow
- [nextion] Fix inline doc parameter types for page and touch callbacks esphome#14972 by @edwardtfn
- [audio] Bump esp-audio-libs to 2.0.4 esphome#15164 by @swoboda1337
- [benchmark] Add sensor publish_state benchmarks esphome#15034 by @bdraco
- [api] Add —no-states flag to esphome logs command esphome#15160 by @bdraco (new-feature)
- [nextion] Add defined keys to
defines.hesphome#14971 by @edwardtfn - [mcp9600] Fix setup success check using OR instead of AND esphome#15165 by @swoboda1337
- [bme68x_bsec2] Fix uninitialized bme68x_conf in measurement duration calculation esphome#15168 by @swoboda1337
- [inkplate] Use atomic GPIO write to prevent ISR race esphome#15166 by @swoboda1337
- [core] Move state logging to client-side formatting, console to VERBOSE esphome#15155 by @bdraco
- [esp32] Wrap vfprintf to fix printf stub on picolibc (IDF 6) esphome#15172 by @bdraco
- [infrared][ir_rf_proxy] Add
receiver_frequencyconfig for IR receiver demodulation frequency esphome#15156 by @kbx81 (new-feature) - [light] Move normal state logging to VERBOSE esphome#15177 by @bdraco
- [bmp581] Add SPI support for BMP581 esphome#13124 by @danielkent-net (new-component) (new-feature) (new-platform)
- [benchmark] Add climate publish_state and call benchmarks esphome#15180 by @bdraco
- [benchmark] Add cover publish_state and call benchmarks esphome#15179 by @bdraco
- [benchmark] Add light call and publish benchmarks esphome#15176 by @bdraco
- [core] Improve clean-all with no arguments esphome#15184 by @swoboda1337
- [wifi] Guard coex_background_scan with CONFIG_SOC_WIFI_SUPPORTED esphome#15187 by @swoboda1337
- [nextion] Fix leading space in pressed color string commands esphome#15190 by @edwardtfn
- [font] Add unit tests verifying correct processing of glyphs esphome#15178 by @clydebarrow
- [climate] Avoid duplicate get_traits() in publish_state esphome#15181 by @bdraco
- [nextion] Replace
or/andoperators and missingthis->esphome#15191 by @edwardtfn - [automation] Eliminate trigger trampolines with deduplicated forwarder structs esphome#15174 by @bdraco
- [fan] Add benchmarks for fan component esphome#15210 by @bdraco
- [core] Remove indirection from ControllerRegistry dispatch esphome#15173 by @bdraco
- [light] Validate effect names during config validation instead of codegen esphome#15107 by @bdraco
- [logger] Warn when VERBOSE/VERY_VERBOSE logging is active esphome#15189 by @bdraco
- [nextion] Replace
static std::string COMMAND_DELIMITERwithconstexpresphome#15195 by @edwardtfn - [git] Add support for subpath to computed destination directory esphome#15135 by @diorcety
- [safe_mode] Migrate SafeModeTrigger to callback automation esphome#15197 by @bdraco
- [sml] Migrate DataTrigger to callback automation esphome#15233 by @bdraco
- [alarm_control_panel] Migrate triggers to callback automation esphome#15198 by @bdraco
- [lock] Migrate LockStateTrigger to callback automation esphome#15199 by @bdraco
- [media_player] Migrate triggers to callback automation esphome#15200 by @bdraco
- [ld2450] Migrate LD2450DataTrigger to callback automation esphome#15201 by @bdraco
- [rtttl] Migrate FinishedPlaybackTrigger to callback automation esphome#15202 by @bdraco
- [online_image] Migrate triggers to callback automation esphome#15216 by @bdraco
- [rotary_encoder] Migrate triggers to callback automation esphome#15217 by @bdraco
- [dfplayer] Migrate FinishedPlaybackTrigger to callback automation esphome#15218 by @bdraco
- [hlk_fm22x] Migrate triggers to callback automation esphome#15219 by @bdraco
- [pn532] Migrate PN532OnFinishedWriteTrigger to callback automation esphome#15220 by @bdraco
- [pn7150][pn7160] Migrate triggers to callback automation esphome#15221 by @bdraco
- [sim800l] Migrate triggers to callback automation esphome#15222 by @bdraco
- [fingerprint_grow] Migrate triggers to callback automation esphome#15223 by @bdraco
- [ltr_als_ps] Migrate triggers to callback automation esphome#15224 by @bdraco
- [ltr501] Migrate triggers to callback automation esphome#15225 by @bdraco
- [ld2450] Fix flaky integration test race condition esphome#15226 by @bdraco
- [nextion] Migrate triggers to callback automation esphome#15227 by @bdraco
- [ezo] Migrate triggers to callback automation esphome#15228 by @bdraco
- [haier] Migrate triggers to callback automation esphome#15229 by @bdraco
- [modbus_controller] Migrate triggers to callback automation esphome#15230 by @bdraco
- [rf_bridge] Migrate triggers to callback automation esphome#15231 by @bdraco
- [factory_reset] Migrate FastBootTrigger to callback automation esphome#15232 by @bdraco
- [multiple] Fix misc hardware register bugs esphome#15208 by @swoboda1337
- [esp32_ble_server] Fix wrong union member in STOP_EVT handler esphome#15239 by @swoboda1337
- [esp32_ble_client] Fix wrong union member in OPEN_EVT handler esphome#15236 by @swoboda1337
- [pid] Fix inverted debug log conditions and broken smoothing formula esphome#15240 by @swoboda1337
- [atm90e32] Fix phase angle precision loss and remove unused member esphome#15238 by @swoboda1337
- [remote_base] Fix gobox uint64_t format specifier esphome#15237 by @swoboda1337
- [esp32] Add ESP-IDF 5.5.4 and 6.0.0 version mappings esphome#15241 by @swoboda1337
- [multiple] Fix uninitialized members and error constant types esphome#15235 by @swoboda1337
- [nextion] Replace
std::dequequeues withstd::listesphome#15211 by @edwardtfn - [sm2135] Fix copy-paste error in setup pin mode esphome#15248 by @swoboda1337
- [pid] Remove unused PIDSimulator class esphome#15247 by @swoboda1337
- [bl0940] Fix energy reference default using wrong constant in legacy mode esphome#15249 by @swoboda1337
- [sgp4x] Remove dead voc_baseline config option esphome#15250 by @swoboda1337
- [tmp117] Code clean-up esphome#15260 by @kbx81
- [nextion] Replace queue name string literals with short Nextion-native identifiers esphome#15215 by @edwardtfn
- [as5600] Remove dead angle/position sensor code esphome#15254 by @swoboda1337
- [modbus_controller] Fix wrong enum in function_code_to_register esphome#15253 by @swoboda1337
- [core] Fix area/device hash collision validation not running esphome#15259 by @swoboda1337
- [tm1637] Add buffer manipulation methods esphome#13686 by @tuct (new-feature)
- [core] Remove dead get_loop_priority code esphome#15242 by @bdraco
- [benchmark] Add BLE raw advertisement proto encode benchmarks esphome#15289 by @bdraco
- [version] Remove duplicate build_info_data.h include esphome#15288 by @bdraco
- [sensor] Use std::array in ValueList/FilterOut/ThrottleWithPriority filters esphome#15265 by @bdraco
- [ld2410] Fix flaky integration test race condition esphome#15299 by @bdraco
- [web_server_base] Reduce sizeof(WebServerBase) by 4 bytes esphome#15251 by @bdraco
- [ai] Add automation, callback manager, and test grouping docs esphome#15243 by @bdraco
- [core] Shrink Component from 12 to 8 bytes per instance esphome#15103 by @bdraco
- [binary_sensor] Remove redundant
optional<bool>state_, save 8 bytes per instance esphome#15095 by @bdraco - [text_sensor] Use std::array in MapFilter esphome#15269 by @bdraco
- [automation] Use std::array in And/Or/Xor conditions esphome#15282 by @bdraco
- [binary_sensor] Use std::array in AutorepeatFilter esphome#15268 by @bdraco (breaking-change)
- [text_sensor] Use std::array in SubstituteFilter esphome#15266 by @bdraco
- [sensor] Use std::array in OrFilter esphome#15262 by @bdraco
- [sensor] Use std::array in CalibratePolynomialFilter esphome#15264 by @bdraco
- [binary_sensor] Use std::array in MultiClickTrigger esphome#15267 by @bdraco (breaking-change)
- [sensor] Use std::array in CalibrateLinearFilter esphome#15263 by @bdraco
- [nextion] Fix log level for command processing limit message esphome#15302 by @edwardtfn
- [nextion] Add accessor const qualifiers, return by ref, and deprecate
get_wave_chan_id()esphome#15204 by @edwardtfn - [modbus_controller] Fix off-by-one bounds check in byte_from_hex_str esphome#15301 by @bdraco
- [modbus] Share helper functions across modbus components - part A esphome#15291 by @exciton
- [bme68x_bsec2] Fix warning spam, code clean-up esphome#15258 by @kbx81
- [shtcx] Code clean-up esphome#15261 by @kbx81
- [dht] Code clean-up esphome#15271 by @kbx81
- [automation] Remove actions_end_ pointer from ActionList to save RAM esphome#15283 by @bdraco
- [esp32_ble] Devirtualize BLE event handler dispatch esphome#15310 by @bdraco
- [wifi] Avoid redundant SDK calls in WiFi loop on ESP8266 esphome#15303 by @bdraco
- [wifi] Replace FreeRTOS queue with LockFreeQueue on ESP-IDF esphome#15306 by @bdraco
- [benchmark] Fix decode benchmarks being optimized away by compiler esphome#15293 by @bdraco
- [core] Suppress component source overflow warnings in testing mode esphome#15320 by @bdraco
- [lvgl] Fix align_to directives esphome#15311 by @clydebarrow
- [internal_temperature] Add nRF52 Zephyr support esphome#15297 by @Ardumine (new-feature)
- [multiple] Fix -Wformat and -Wextra warnings across 33 component files esphome#15321 by @swoboda1337
- [schema] generator fixes esphome#15276 by @glmnet
- [wifi] Move LibreTiny WiFi STA state to member variable esphome#15305 by @bdraco
- [preferences] Reduce log verbosity for unchanged NVS/FDB writes esphome#15332 by @bdraco
- [binary_sensor] Add on_multi_click integration test esphome#15329 by @bdraco
- [api] Use memcpy for fixed32 decode on little-endian platforms esphome#15292 by @bdraco
- [http_request] Fix crash when esp_http_client_init fails esphome#15328 by @bdraco
- [zwave_proxy] Clear Home ID on USB modem disconnect esphome#15327 by @kbx81
- [lvgl] Fixes #2 esphome#15161 by @clydebarrow
- [modbus] Share helper functions across modbus components - part B esphome#14172 by @exciton
- [esp32_hosted] Guard against empty firmware URL in perform() esphome#15338 by @swoboda1337
- [lvgl] Fixes #3 esphome#15304 by @clydebarrow
- [time] Fix strftime %Z and %z returning wrong timezone esphome#15330 by @bdraco
- [internal_temperature] Move code into platform specific files esphome#15339 by @jesserockz
- [bmp581_base] Add support for BMP585 esphome#15277 by @nytaros (new-feature)
- [resampler] Future-proof resampler task to avoid potential memory leaks esphome#15186 by @kahrendt
- [cover] move time_based_cover to its own subdirectory esphome#15313 by @rguca
- [nextion] Fix memory leak in
reset_()esphome#15344 by @edwardtfn - [debug] add peripherals status esphome#12053 by @tomaszduda23
- [hdc2080] Add support for HDC2080 sensor esphome#9331 by @G-Pereira (new-component) (new-feature) (new-platform)
- [runtime_stats] Store stats inline on Component to eliminate std::map lookup esphome#15345 by @bdraco
- [esp32_camera] Bump esp32-camera to v2.1.6 esphome#15349 by @swoboda1337
- [lvgl] Fixes #4 esphome#15334 by @clydebarrow (new-feature)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 1) esphome#15315 by @crnjan (new-component) (new-feature) (new-platform)
- [lvgl] Add missing event names esphome#15362 by @clydebarrow (new-feature)
- [bluetooth_proxy] Replace loop() with set_interval for advertisement flushing esphome#15347 by @bdraco
- [api] Add send_sensor_state benchmarks esphome#15352 by @bdraco
- [core] Reduce runtime_stats measurement overhead esphome#15359 by @bdraco
- [core] Force inline Component::get_component_log_str() esphome#15363 by @bdraco
- [esp32_ble_tracker] Reduce scan cycle log spam esphome#15365 by @bdraco
- [api] Inline DeferredBatch::add_item to eliminate push_back call barrier esphome#15353 by @bdraco
- [api] Simplify encode_to_buffer to single resize call esphome#15355 by @bdraco
- [nextion] Collapse nested namespace to esphome::nextion esphome#15367 by @edwardtfn
- [mitsubishi_cn105] Fix test grouping conflict with uart package esphome#15366 by @bdraco
- [zigbee] print logs after reporting info update esphome#13916 by @tomaszduda23
- [media_player] Add enqueue action esphome#14775 by @kahrendt (new-feature)
- [audio] use microFLAC library for decoding esphome#15372 by @kahrendt
- [thermostat] Fix on_boot_restore_from DEFAULT_PRESET validation bypass esphome#15383 by @swoboda1337
- [time] Use O(1) closed-form leap year math for epoch-to-year conversion esphome#15368 by @bdraco
- [ble_client] Fix descriptor_uuid ignored for text sensors esphome#15374 by @swoboda1337
- [climate] Fix MQTT target_temperature_low_state_topic calling wrong setter esphome#15376 by @swoboda1337
- [bl0940] Fix reference_voltage config ignored in non-legacy mode esphome#15375 by @swoboda1337
- [espnow] Fix enable_on_boot config option not passed to C++ esphome#15377 by @swoboda1337
- [htu21d] Fix set_heater action reading wrong config key esphome#15378 by @swoboda1337
- [mlx90393] Remove call to non-existent set_drdy_pin method esphome#15381 by @swoboda1337
- [pipsolar] Fix set_level action passing string to cv.use_id esphome#15380 by @swoboda1337
- [template] Fix cover position_action overridden by has_position default esphome#15379 by @swoboda1337
- [deep_sleep] Fix wakeup_pin_mode rejecting lowercase on ESP32/BK72XX esphome#15384 by @swoboda1337
- [dsmr] Allow setting MBUS id for thermal sensors in DSMR component esphome#7519 by @thomwiggers (new-feature)
- [spi] Add spi0 and spi1 to reserved IDs for RP2040 compatibility esphome#15388 by @bdraco
- [nextion] Gate waveform code behind
USE_NEXTION_WAVEFORM, useStaticRingBufferesphome#15273 by @edwardtfn - [at581x][canbus] Fix walrus operator skipping falsy config values esphome#15390 by @swoboda1337
- [sen5x] Remove dead voc_baseline config option esphome#15391 by @swoboda1337
- [core] Inline fast path for enable_loop esphome#15392 by @bdraco
- [ota] Use modernized namespace syntax esphome#15398 by @kbx81
- [mipi_spi] Rotation and buffer size changes esphome#15047 by @clydebarrow
- [lvgl] Fix ext_click_area property application esphome#15394 by @swoboda1337
- [ci] Run ci-custom.py as a pre-commit check esphome#15411 by @clydebarrow
- [ili9xxx] Fix SPI MOSI pin validation never executing esphome#15399 by @swoboda1337
- [ci] Fix deprecated-component matcher esphome#15417 by @clydebarrow
- [ezo_pmp] Fix change_i2c_address action using wrong template type esphome#15393 by @swoboda1337
- [host] Add graceful shutdown on SIGINT/SIGTERM esphome#15387 by @bdraco
- [scheduler] Fix unrealistic scheduler benchmarks missing periodic drain esphome#15396 by @bdraco
- [benchmarks] Add host platform benchmarks for number, select, and switch esphome#15405 by @bdraco
- [benchmarks] Add host platform benchmarks for text_sensor and button esphome#15407 by @bdraco
- [uptime] Pass known length to publish_state to avoid redundant strlen esphome#15410 by @bdraco
- [light] Pass LightTraits to avoid redundant virtual get_traits() calls esphome#15403 by @bdraco
- [light] Use reciprocal multiply in normalize_color esphome#15401 by @bdraco
- [core] Use __builtin_ctz for FiniteSetMask bit scanning esphome#15400 by @bdraco
- [modbus] Add integration tests for server and server via controller esphome#14845 by @exciton
- [ili9xxx][st7735] Add deprecation warnings esphome#15416 by @clydebarrow
- [web_server] Disable loop when no SSE clients are connected esphome#15428 by @bdraco
- [modbus_controller] Fix format specifier warnings esphome#15429 by @bdraco
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 2) esphome#15358 by @crnjan (new-feature)
- [epaper_spi] Allow runtime rotation change esphome#15419 by @Passific
- [hlw8012] Change periodic sensor reading logs to LOGV esphome#15431 by @bdraco
- [time] Support */N syntax in cron expressions esphome#15434 by @bdraco
- [total_daily_energy] Replace loop() with timeout-based midnight reset esphome#15432 by @bdraco
- [time] Use set_interval for CronTrigger instead of loop() esphome#15433 by @bdraco
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 3) esphome#15437 by @crnjan (new-feature)
- [pcf8574][pca9554] Add optional interrupt pin to eliminate polling esphome#15444 by @bdraco (new-feature)
- [mipi_spi] Run spi final validation esphome#15418 by @clydebarrow
- [pcf8574][pca9554] Disable loop when all pins are outputs esphome#15455 by @bdraco
- [spi] Enable host-platform builds for unit testing esphome#15188 by @jpeletier
- [mcp23xxx][pi4ioe5v6408] Add optional interrupt pin to eliminate polling esphome#15445 by @bdraco (new-feature)
- [internal_temperature] Add support for LN882X (Lightning LN882H) esphome#15370 by @Bl00d-B0b (new-feature)
- [ethernet] Add
interfaceconfiguration variable for esp-idf esphome#10285 by @rtyle (new-feature) - [lvgl] option to enable LVGL’s built-in dark theme esphome#15389 by @RAR (new-feature)
- [ci] move import to function esphome#15440 by @Tomer27cz
- [api] Add ListEntities benchmarks for sensor, binary_sensor, and light esphome#15427 by @bdraco
- [select] [switch] Downgrade control path logging from DEBUG to VERBOSE esphome#15406 by @bdraco
- [button] Downgrade press logging from DEBUG to VERBOSE esphome#15408 by @bdraco
- [esp32_ble] Skip dropped count memw when queue is empty esphome#15422 by @bdraco
- [mcp23xxx][pi4ioe5v6408] Disable loop when all pins are outputs esphome#15460 by @bdraco
- [api] Split Noise handshake state_action_ to reduce stack pressure esphome#15464 by @bdraco
- [esp32] Add signed app verification without hardware secure boot esphome#15357 by @kbx81 (new-feature)
- [ags10] Fix wrong type passed to cg.templatable for set_zero_point mode esphome#15467 by @swoboda1337
- [esp8266] Add crash handler for post-mortem diagnostics esphome#15465 by @bdraco (new-feature) (breaking-change)
- [api] Add max_value proto option for constant-size varint codegen esphome#15424 by @bdraco
- [at581x] Fix codegen crash when using lambdas for frequency/time/power esphome#15468 by @swoboda1337
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 4) esphome#15462 by @crnjan (new-feature)
- [mitsubishi_cn105] Add climate component for Mitsubishi A/C units with CN105 connector (Part 5) esphome#15483 by @crnjan (new-feature)
- [pylontech] Remove unnecessary Component inheritance from sensor/text_sensor esphome#15482 by @swoboda1337
- [sprinkler][dfplayer][max6956][rf_bridge] Fix cg.templatable type mismatches esphome#15480 by @swoboda1337
- [multiple] Add missing cv.COMPONENT_SCHEMA to CONFIG_SCHEMA esphome#15475 by @swoboda1337
- [rpi_dpi_rgb][st7701s][ags10] Fix Optional config keys accessed unconditionally esphome#15474 by @swoboda1337
- [gcja5][cd74hc4067][openthread_info] Fix PollingComponent mismatches esphome#15476 by @swoboda1337
- [opentherm] Fix step=0 default overriding entity step esphome#15484 by @swoboda1337
- [core] Move wake_loop out of socket component into core esphome#15446 by @bdraco
- [multiple] Add missing device_class to sensor schemas esphome#15479 by @swoboda1337
- [esp32] Fix ESP32-C6 pin validator rejecting GPIO 24-30 with wrong error esphome#15477 by @swoboda1337
- [multiple] Add missing state_class to sensor schemas esphome#15478 by @swoboda1337
- [multiple] Add missing state_class to remaining sensor schemas esphome#15486 by @swoboda1337
- [thermostat] Remove non-functional cv.templatable from preset fields esphome#15481 by @swoboda1337
- [multiple] Add missing device_class to sensor schemas (batch 2) esphome#15487 by @swoboda1337
- [api] Speed up protobuf encode 17-20% with register-optimized write path esphome#15290 by @bdraco
- [lvgl] Implement rotation directly esphome#14955 by @clydebarrow (new-feature) (breaking-change)
- [lvgl] Fix setting triggers on display esphome#15364 by @clydebarrow
- [CI] Add branches-ignore for release and beta in PR title check esphome#15491 by @jesserockz
- [espnow] Fix string data generating invalid C++ char literals esphome#15493 by @swoboda1337
- [bl0940] Fix restore_value reading from wrong config dict esphome#15492 by @swoboda1337
- [neopixelbus] Fix SPI pin validation accepting one wrong pin on ESP8266 esphome#15494 by @swoboda1337
- [pmsx003] Connect model-specific sensor validation to schema esphome#15495 by @swoboda1337
- [prometheus] Fix relabel validation not checking for required keys esphome#15496 by @swoboda1337
- [api] Use integer comparison for float zero checks in protobuf encoding esphome#15490 by @bdraco
- [config] Fix unfilled placeholder in dimensions() error message esphome#15498 by @swoboda1337
- [remote_base] Fix misc protocol schema and codegen bugs esphome#15497 by @swoboda1337
- [api] Auto-derive max_value for enum fields in protobuf codegen esphome#15469 by @bdraco
- [scheduler] Skip cancel for anonymous items, add empty-container fast path esphome#15397 by @bdraco
- [core] Replace deprecated datetime.utcfromtimestamp() esphome#15503 by @swoboda1337
- [multiple] Fix misc cosmetic bugs (batch 2) esphome#15502 by @swoboda1337
- [multiple] Fix misc cosmetic bugs (error messages, types, defaults) esphome#15499 by @swoboda1337
- [core] Replace std::vector in CallbackManager with trivial-copy container esphome#15272 by @bdraco
- [ota] Fix check_error skipping validation for RESPONSE_OK esphome#15501 by @swoboda1337
- [esp32_ble][esp32_ble_server][esp32_ble_beacon] Fix UUID regex, IndexError, and unused inheritance esphome#15504 by @swoboda1337
- [multiple] Fix misc low-priority bugs (batch 3) esphome#15506 by @swoboda1337
- [multiple] Fix validation ranges and error messages esphome#15508 by @swoboda1337
- [api] Add max_data_length proto option and optimize entity name/object_id esphome#15426 by @bdraco
- [dfrobot_sen0395] Fix list.index() on mutated list in range validator esphome#15511 by @swoboda1337
- [core] Move ControllerRegistry notify methods inline into header esphome#15505 by @bdraco
- [hdc2080] Fix tests esphome#15518 by @diorcety
- [core] Reschedule fired intervals directly into heap esphome#15516 by @bdraco
- [automation] Add CallbackAutomation dataclass and build_callback_automations helper esphome#15246 by @bdraco
- [api] Add max_data_length and force to DeviceInfoResponse/HelloResponse proto fields esphome#15514 by @bdraco
- [cli] Add config bundle CLI command for remote compilation esphome#13791 by @bdraco (new-feature)
- [grove_tb6612fng] Move direction logic from Python to C++ to fix lambda crash esphome#15513 by @swoboda1337
- [ld2420] Fix select options wrapped in extra list esphome#15524 by @swoboda1337
- [lightwaverf] Fix write pin using input schema instead of output esphome#15525 by @swoboda1337
- [mcp4461] Fix terminal disable passing string where C++ expects char esphome#15528 by @swoboda1337
- [nextion] Fix format specifiers and error message typos in command handlers esphome#15542 by @edwardtfn
- [rotary_encoder] Fix set_value action accepting any sensor ID esphome#15535 by @swoboda1337
- [seeed_mr24hpc1] Move baud rate validation to FINAL_VALIDATE_SCHEMA esphome#15536 by @swoboda1337
- [multiple] Fix missing entity base classes in Python class declarations esphome#15534 by @swoboda1337
- [graph] Fix legend config incorrectly accepting a list esphome#15522 by @swoboda1337
- [haier] Fix control_method schema incorrectly using ensure_list esphome#15523 by @swoboda1337
- [pcf8563] Fix default I2C address from 8-bit (0xA3) to 7-bit (0x51) esphome#15526 by @swoboda1337
- [multiple] Fix validation ranges (batch 2) esphome#15533 by @swoboda1337
- [udp] Fix on_receive only processing first automation esphome#15538 by @swoboda1337
- [rp2040_pio_led_strip][rp2040_pio] Fix CUSTOM chipset crash and improve error message esphome#15537 by @swoboda1337
- [light] Use function-pointer fields in LightControlAction esphome#15132 by @bdraco
- [nextion] Expose custom protocol frames as automation triggers esphome#13248 by @edwardtfn (new-feature)
- [libretiny] Fix board pin alias resolution TypeError esphome#15527 by @swoboda1337
- [emontx] emonTx component esphome#9027 by @FredM67 (new-component) (new-feature) (new-platform)
- [multiple] Fix channel/pin range validation and widen channel types esphome#15529 by @swoboda1337
- [config_validation] Add unbounded percentage validators esphome#15500 by @jesserockz
- [epaper_spi] Fix deep sleep command esphome#15544 by @clydebarrow
- [substitutions]
!include ${filename}, Substitutions in include filename paths (package refactor part 5) esphome#12213 by @jpeletier (new-feature) - [lvgl] Implement rotation with PPA esphome#15453 by @clydebarrow
- [emontx] Fix uart package name in tests esphome#15546 by @bdraco
- [ci] Add lint check for test package key matching bus directory esphome#15547 by @bdraco
- [core] Fix ANSI codes for secret text hiding esphome#15521 by @swoboda1337
- [yaml] Add IncludeFile representer to ESPHomeDumper esphome#15549 by @bdraco
- [ethernet] Add W6100 and W6300 support for RP2040 esphome#15543 by @bdraco (new-feature)
- [gdk101] Retry reset on interval for slow-booting sensor MCU esphome#11750 by @Szewcson
- [esp32_hosted] Add SPI transport and SDIO 1-bit bus width support esphome#15551 by @swoboda1337 (new-feature)
- [core] Add TemplatableFn for 4-byte function-pointer templatable storage esphome#15545 by @bdraco
- [yaml] Resolve top-level IncludeFile in load_yaml esphome#15557 by @bdraco
- [codegen] Fix templatable int type to use cg.int32 esphome#15567 by @bdraco
- [script] Resolve IncludeFile objects in component config merge esphome#15575 by @bdraco
- [web_server] Truncate update entity summary to 256 characters esphome#15570 by @bdraco
- [codegen] Fix templatable uint8 type to use cg.uint8 esphome#15572 by @bdraco
- [codegen] Fix templatable uint32 type to use cg.uint32 esphome#15574 by @bdraco
- [at581x] Fix non-templated frequency/power_consumption constants for TemplatableFn esphome#15576 by @bdraco
- [codegen] Add cg.int8 type and fix templatable int8 types esphome#15573 by @bdraco
- [lvgl] Fix args for lambda in set_rotation action esphome#15555 by @clydebarrow
- [codegen] Fix templatable int type to use cg.int_ esphome#15571 by @bdraco
- [codegen] Fix templatable bool type to use cg.bool_ esphome#15569 by @bdraco
- [spi] Fix IndexError on invalid RP2040 CLK pin esphome#15562 by @swoboda1337
- [modbus_controller] Fix output missing address validation and text_sensor division esphome#15561 by @swoboda1337
- [qspi_dbi] Connect _validate to CONFIG_SCHEMA esphome#15563 by @swoboda1337
- [json] Fix heap buffer overflow in SerializationBuffer truncation path esphome#15566 by @bdraco
- [zephyr] Fix user overlay only emitting first property esphome#15560 by @swoboda1337
- [esp32] Preserve crash data across OTA rollback reboots esphome#15578 by @bdraco
- [esp32] Capture both cores’ backtraces in crash handler esphome#15559 by @swoboda1337
- [codegen] Fix templatable float type to use cg.float_ esphome#15568 by @bdraco
- [api] Peel first write iteration, inline socket writes, zero-gap batch encoding esphome#15063 by @bdraco
- [api] Fix batch messages stuck in Nagle buffer esphome#15581 by @bdraco
- [climate] Store custom mode vectors on Climate entity to eliminate heap allocation esphome#15206 by @bdraco
- [fan] Store preset mode vector on Fan entity to eliminate heap allocation esphome#15209 by @bdraco
- [rpi_dpi_rgb][qspi_dbi] Add deprecation warnings esphome#15583 by @clydebarrow
- [api] Fix ListEntitiesRequest not read due to LWIP rcvevent tracking esphome#15589 by @bdraco
- [gdk101] Increase reset retries for slow-booting sensor MCU esphome#15584 by @bdraco
- [sx127x][cc1101] Disable loop when packet mode is inactive esphome#15606 by @swoboda1337
- [hbridge] Move light pin switching to loop esphome#15615 by @jesserockz
- [tca9555] Add interrupt pin support esphome#15613 by @bdraco (new-feature)
- [pca6416a] Add interrupt pin support esphome#15614 by @bdraco (new-feature)
- [mcp23016] Add interrupt pin support esphome#15616 by @bdraco (new-feature)
- [api] Add (inline_encode) proto option for sub-message inlining esphome#15599 by @bdraco
- [micro_wake_word] Pin esp-nn version esphome#15628 by @kahrendt
- [sx127x][cc1101][sx126x] Use GPIO interrupt to wake loop esphome#15627 by @swoboda1337
- [rp2040] Fix W5500 Ethernet pbuf corruption by mirroring LWIPMutex semantics esphome#15624 by @bdraco
- [mdns] Bump espressif/mdns to 1.11.0 esphome#15670 by @swoboda1337
- [canbus] Fix canbus.send can_id compile error esphome#15668 by @swoboda1337
- [esp32] Bump platform to 55.03.38, Arduino to 3.3.8, ESP-IDF to 5.5.4 esphome#15666 by @swoboda1337
- [packages] Fix false deprecation warning and wrong error paths in nested packages esphome#15605 by @bdraco (breaking-change)
- [lvgl] Fix use of rotation on host SDL esphome#15611 by @clydebarrow
- [packages] fix support
packages: !include mypackages.yamlesphome#15677 by @jpeletier - [core] Fix PlatformIO progress bar rendering in subprocess mode esphome#15681 by @swoboda1337
- [api] Add speed_optimized proto option for hot encode paths esphome#15691 by @bdraco
- [esp32] Fix some compiler warnings & bugs esphome#15610 by @diorcety
- [micro_wake_word] Bugfix: Use es-nn v1.1.2 (last known working version) esphome#15703 by @kahrendt
- [esp32] Update the recommended platform to 55.03.38-1 esphome#15705 by @swoboda1337
- [api] Add speed_optimized to SubscribeLogsResponse esphome#15698 by @bdraco
- [adc] Place ADC oneshot control functions in IRAM for cache safety esphome#15717 by @bdraco
- [web_server] Reset OTA backend on new upload to avoid brick after interrupted OTA esphome#15720 by @bdraco
- [esphome] Skip missing extra flash images in upload_using_esptool esphome#15723 by @bdraco
- [globals] Fix TemplatableFn deprecation warning for globals.set esphome#15733 by @bdraco
- [i2s_audio] Add PDM mics support for ESP32-P4 esphome#15333 by @fintros
- [light] Avoid addressable transition stall at low gamma-corrected values esphome#15726 by @bdraco
- [nextion] Fix command spacing pacer never throttling sends esphome#15664 by @edwardtfn
Dependency Changes
Section titled “Dependency Changes”- Bump actions/download-artifact from 8.0.0 to 8.0.1 esphome#14705 by @dependabot[bot]
- Bump ruff from 0.15.5 to 0.15.6 esphome#14774 by @dependabot[bot]
- Bump github/codeql-action from 4.32.6 to 4.33.0 esphome#14869 by @dependabot[bot]
- Bump actions/create-github-app-token from 2.2.1 to 3.0.0 esphome#14868 by @dependabot[bot]
- Bump actions/cache from 5.0.3 to 5.0.4 esphome#14929 by @dependabot[bot]
- Bump actions/cache from 5.0.3 to 5.0.4 in /.github/actions/restore-python esphome#14930 by @dependabot[bot]
- Bump codecov/codecov-action from 5.5.2 to 5.5.3 esphome#14928 by @dependabot[bot]
- Bump ruff from 0.15.6 to 0.15.7 esphome#14977 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.11.1 to 4.12.1 esphome#15024 by @dependabot[bot]
- Bump github/codeql-action from 4.33.0 to 4.34.1 esphome#15023 by @dependabot[bot]
- Bump aioesphomeapi from 44.6.2 to 44.7.0 esphome#15052 by @dependabot[bot]
- Bump pytest-cov from 7.0.0 to 7.1.0 esphome#15123 by @dependabot[bot]
- Bump aioesphomeapi from 44.7.0 to 44.8.0 esphome#15159 by @dependabot[bot]
- Bump requests from 2.32.5 to 2.33.0 esphome#15170 by @dependabot[bot]
- Bump cryptography from 46.0.5 to 46.0.6 esphome#15193 by @dependabot[bot]
- Bump codecov/codecov-action from 5.5.3 to 6.0.0 esphome#15194 by @dependabot[bot]
- Bump ruff from 0.15.7 to 0.15.8 esphome#15192 by @dependabot[bot]
- Bump github/codeql-action from 4.34.1 to 4.35.1 esphome#15245 by @dependabot[bot]
- Bump aioesphomeapi from 44.8.0 to 44.8.1 esphome#15309 by @dependabot[bot]
- Bump requests from 2.33.0 to 2.33.1 esphome#15324 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.12.1 to 4.13.0 esphome#15340 by @dependabot[bot]
- Bump pillow from 12.1.1 to 12.2.0 esphome#15361 by @dependabot[bot]
- Bump docker/login-action from 4.0.0 to 4.1.0 in the docker-actions group esphome#15386 by @dependabot[bot]
- Bump ruff from 0.15.8 to 0.15.9 esphome#15385 by @dependabot[bot]
- Bump click from 8.3.1 to 8.3.2 esphome#15421 by @dependabot[bot]
- Bump aioesphomeapi from 44.8.1 to 44.9.0 esphome#15425 by @dependabot[bot]
- Bump aioesphomeapi from 44.9.0 to 44.9.1 esphome#15470 by @dependabot[bot]
- Bump aioesphomeapi from 44.9.1 to 44.11.1 esphome#15471 by @dependabot[bot]
- Bump aioesphomeapi from 44.11.1 to 44.12.0 esphome#15515 by @dependabot[bot]
- Bump pytest from 9.0.2 to 9.0.3 esphome#15540 by @dependabot[bot]
- Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 esphome#15541 by @dependabot[bot]
- Bump cryptography from 46.0.6 to 46.0.7 esphome#15550 by @dependabot[bot]
- Bump esphome-dashboard from 20260210.0 to 20260408.1 esphome#15552 by @dependabot[bot]
- Bump CodSpeedHQ/action from 4.13.0 to 4.13.1 esphome#15577 by @dependabot[bot]
- Bump aioesphomeapi from 44.12.0 to 44.13.1 esphome#15600 by @dependabot[bot]
- Bump aioesphomeapi from 44.13.1 to 44.13.2 esphome#15637 by @dependabot[bot]
- Bump aioesphomeapi from 44.13.2 to 44.13.3 esphome#15641 by @dependabot[bot]
- Bump aioesphomeapi from 44.13.3 to 44.14.0 esphome#15695 by @dependabot[bot]
- Bump aioesphomeapi from 44.14.0 to 44.15.0 esphome#15699 by @dependabot[bot]