Changelog
Release Overview
Section titled “Release Overview”ESPHome 2026.4.0 introduces native Mitsubishi A/C control via the CN105 connector, upgrades LVGL to v9.5.0 with runtime rotation and dark mode support, and massively expands Ethernet with 5 new chip types across ESP32 and RP2040 platforms. Performance improvements include interrupt-driven GPIO expanders with 99.7% I2C reduction, ESP32 CPU defaults raised to 240MHz for 34% faster operations, and an 18x faster substitution engine with support for variables in !include paths. This release also adds OTA signature verification, config bundles for remote compilation, custom ESP32 partition tables, and 4 new sensor components.
Upgrade Checklist
Section titled “Upgrade Checklist”- If you use
rotationin a display config with LVGL, move therotationoption from the display component to thelvgl:block - If you use the
i2s_audiomedia player, migrate to thespeakermedia player component (thei2s_audiomedia player has been removed) - If you use
use_legacy: trueini2s_audio, remove it (the legacy I2S driver has been removed) - If you have battery-powered or thermally constrained ESP32/S2/S3/C5 devices, consider adding
cpu_frequency: 160MHZ(the default has been raised to 240MHz) - If you use
sen5xwithvoc_baseline, remove it (the option was dead code and has been removed; usestore_baseline: trueinstead) - If you use
rp2040_pio_led_stripwithchipset: CUSTOM, use explicitbit0_high/bit0_low/bit1_high/bit1_lowtiming parameters instead - If you use
sensor.raw_statein lambdas, migrate to using filtered state oron_raw_valuetriggers (.raw_stateis deprecated) - If you use Nextion
get_wave_chan_id()in lambdas, switch toget_wave_channel_id()(the old name is deprecated) - If you maintain external components that call
TEMPLATABLE_VALUEmacro-generated setters with raw C++ constants, route values throughcg.templatable()in Python codegen - If you maintain external components using
FlushResult, rename toUARTFlushResultwithUART_FLUSH_RESULT_prefix
Mitsubishi CN105 Climate Component
Section titled “Mitsubishi CN105 Climate Component”The new mitsubishi_cn105 component brings native climate control for Mitsubishi A/C units equipped with the CN105 connector. This has been one of the most requested integrations, enabling direct UART communication with a wide range of Mitsubishi heat pumps and air conditioners without relying on external libraries or custom components.
Key Features:
- Full climate control - Power, mode, target temperature, and fan speed can be controlled directly from Home Assistant
- Non-blocking protocol driver - The parser implements the same CN105 protocol used by the popular SwiCago HeatPump project, ensuring compatibility with the same range of devices
- Smart temperature polling - The
current_temperature_min_intervaloption rate-limits room temperature reads to prevent rapid oscillations near measurement boundaries while keeping a fastupdate_intervalfor responsive control - Broad platform support - Works on ESP32, ESP32 IDF, ESP8266, and RP2040/RP2350
climate: - platform: mitsubishi_cn105 name: "Air Condition" uart_id: ac_uart update_interval: 1s current_temperature_min_interval: 60sLVGL v9 Upgrade
Section titled “LVGL v9 Upgrade”ESPHome’s LVGL integration has been upgraded from v8 to LVGL v9.5.0 (#12312), a major library migration that brings significant improvements to the graphics framework. Existing configs should compile and run, though some properties are deprecated.
Key Changes:
- Runtime rotation - Rotation is now an LVGL-level config option with dynamic runtime changes via
lvgl.display.set_rotation. This is a breaking change that requires movingrotationfrom the display configuration to thelvgl:block (#14955) - Dark mode support - A simple
dark_mode: trueoption undertheme:enables LVGL’s built-in dark theme with a single line of YAML (#15389) - All LVGL 9 events - Complete mapping of LVGL 9 events to ESPHome automation triggers (#15362)
- Drop shadow and bitmap masking - New
bitmap_mask_srcstyle property and A8 image format for drop shadow effects (#15334)
Ethernet Expansion
Section titled “Ethernet Expansion”This release dramatically expands Ethernet support across platforms, adding 5 new chip types and bringing SPI Ethernet to the RP2040 platform for the first time.
New RP2040 Ethernet Support:
- W5500 (#14820) - 100Mbps SPI Ethernet, stress tested with 344 successful API connections on a WIZnet W5500-EVB-Pico
- W5100/W5100S (#15131) - 10/100Mbps SPI Ethernet for boards like the W5100S-EVB-Pico
- W6100 and W6300 (#15543) - Next-generation WIZnet controllers with IPv6 support for boards like the W6300-EVB-Pico2
Cross-Platform Additions:
- ENC28J60 (#14945) - Microchip’s widely-available 10BASE-T controller now supported on both ESP32 (IDF) and RP2040
- SPI interface selection (#10285) - New
interfaceconfig variable lets users selectspi2orspi3host, resolving conflicts with display components on boards like the M5Stack CoreS3
GPIO Expander Interrupt-Driven Mode
Section titled “GPIO Expander Interrupt-Driven Mode”A new optional interrupt_pin configuration for GPIO expanders eliminates constant I2C/SPI polling, achieving 99.7% reduction in I2C traffic during idle periods (#15444, #15445).
Supported Expanders:
- PCF8574 and PCA9554 - I2C GPIO expanders
- MCP23008, MCP23017, MCP23S08, MCP23S17 - I2C and SPI GPIO expander family
- PI4IOE5V6408 - I2C GPIO expander
Measured Impact (ESP32-IDF, PCF8574 + 3 binary sensors):
| Metric | Polling | Interrupt | Improvement |
|---|---|---|---|
| I2C reads/min (idle) | 4100ms | 12ms | 99.7% reduction |
| Loop iterations per gate cycle | 7477 | 16 | 468x fewer |
| Binary sensor read time | ~0.6ms (I2C) | ~0.002ms (cache) | 300x faster |
Configuration is simple and fully backward compatible:
pcf8574: id: my_pcf8574 interrupt_pin: GPIO16 # Connect to INT pin on PCF8574ESP32 Performance Improvements
Section titled “ESP32 Performance Improvements”Two changes significantly improve ESP32 performance out of the box.
Default CPU Frequency Raised to Maximum (#15143):
ESP32, ESP32-S2, ESP32-S3, and ESP32-C5 now default to 240MHz instead of 160MHz. This restores the performance level that Arduino users had before May 2025 and delivers ~34% faster CPU-bound operations:
- API encryption handshake: 90ms to 64ms (29% faster)
- Protobuf encoding (BLE proxy): 34% faster
- Noise encryption: 33-34% faster across all payload sizes
Users on battery power or with thermal constraints can override with cpu_frequency: 160MHZ. This is a breaking change as it increases power consumption on affected variants.
SRAM1 as IRAM Option (#14874):
A new sram1_as_iram: true option for the original ESP32 reclaims 40KB of SRAM1 as additional IRAM at no cost to heap. This expands the flash cache window, reducing cache misses for WiFi, BLE, and API operations. ESPHome includes bootloader detection to prevent enabling this on old bootloaders (which would brick the device).
esp32: framework: type: esp-idf advanced: sram1_as_iram: trueSubstitutions and Config System Improvements
Section titled “Substitutions and Config System Improvements”The substitution engine has been rewritten to perform all variable substitutions in a single linear pass, achieving up to 18x faster config load times in large projects (#14918).
Additionally, substitutions now work in !include file paths (#12213), enabling dynamic file selection:
substitutions: eth_model: LAN8720
packages: - !include network/${eth_model}/config.yamlKey Improvements:
- Single-pass evaluation - Eliminates the old
JinjaStrdeferred-evaluation workaround; all variables are visible at evaluation time - Cross-scope expressions -
${A * B}inside included files now reliably resolves whenAis a local var andBis a root substitution - Better error messages - Circular dependency warnings include the actual cause and variable paths
The substitution pass has a minor breaking change: when multiple YAML keys resolve to the same substituted name, the last-appearing key now takes precedence (“last writer wins”).
OTA Signature Verification
Section titled “OTA Signature Verification”A new signed_ota_verification option enables firmware signature verification during OTA updates without requiring hardware Secure Boot (eFuse burning) (#15357). This protects against tampered firmware from network-based attacks.
Two Workflows:
- Private key mode (
signing_key) - Firmware is automatically signed during build. Simplest setup - Public key mode (
verification_key) - Only the public key is embedded; binaries are signed externally (e.g., in CI/CD with the private key in a secure vault)
esp32: framework: type: esp-idf advanced: signed_ota_verification: signing_key: secure_boot_signing_key.pem signing_scheme: rsa3072Config Bundles for Remote Compilation
Section titled “Config Bundles for Remote Compilation”The new esphome bundle CLI command packages a YAML config and all its local dependencies into a self-contained archive for remote compilation (#13791). This is the foundation for remote build server support, enabling low-powered devices like Home Assistant Green to offload compilation.
Key Features:
- Automatic dependency discovery - Finds fonts, images, certificates, C++ includes, web assets, local external_components, and secrets
- Filtered secrets - Only secrets actually referenced by bundled files are included
- Reproducible archives - Deterministic output with sorted entries for consistent builds
- Incremental builds - Preserves build caches across re-extractions
esphome bundle my_device.yaml # Create bundleesphome bundle my_device.yaml --list-only # Preview filesesphome compile my_device.esphomebundle.tar.gz # Compile from bundleESP32 Custom Partition Tables
Section titled “ESP32 Custom Partition Tables”ESP32 users can now define custom data partitions directly in YAML (#7682). Custom partitions are appended at the end of flash and steal space from the OTA app partitions, enabling use cases like storing calibration data, custom file systems, or additional NVS namespaces.
The partition table generation has also been unified across Arduino and IDF frameworks, and NVS has been moved to the end of flash with significantly increased size (Arduino: 20KB to 384KB, IDF: 436KB to 448KB). The partition layout changes are a breaking change but NVS data is preserved as long as the partition name remains nvs.
esp32: partitions: - name: my_data type: data subtype: spiffs size: 0x4000New Sensor and Hardware Support
Section titled “New Sensor and Hardware Support”This release adds support for several new sensors and hardware components:
- SPA06-003 (#14521, #14522, #14523) - Goermicro digital pressure and temperature sensor with both I2C and SPI support, available on Adafruit and Seeed Grove breakout boards
- HDC2080 (#9331) - Texas Instruments temperature and humidity sensor
- emonTx (#9027) - OpenEnergyMonitor energy monitoring devices (emonTx, emonPi) via UART, with JSON data parsing, automation triggers, and command sending
- BMP581 SPI (#13124) - SPI interface support for the BMP581 pressure sensor (previously I2C only)
- BMP585 support (#15277) - Adds the BMP585 ASIC ID to the existing BMP581 driver
- ESP8266 crash handler (#15465) - Post-mortem diagnostics matching existing ESP32 and RP2040 implementations, logging exception info and stack-scanned backtrace on reboot after a crash
- ESP32 Hosted SPI transport (#15551) - SPI transport and 1-bit SDIO bus width support for the
esp32_hostedWiFi offloading component
Breaking Changes
Section titled “Breaking Changes”Platform Changes
Section titled “Platform Changes”-
ESP32 Partition Table: Partition layout has changed for both Arduino and IDF frameworks. NVS has been moved to the end of flash with increased size (Arduino: 20KB to 384KB, IDF: 436KB to 448KB), and a
phy_initpartition has been added to Arduino. Existing devices will receive the new partition table on the next OTA update. NVS data is preserved as long as the partition name remainsnvs. #7682 -
ESP32 CPU Frequency: Default CPU frequency is now set to the maximum supported for each variant (ESP32/S2/S3/C5: 240MHz, up from 160MHz). This increases power consumption (~30-50% on CPU-bound workloads). Battery-powered or thermally constrained devices should explicitly set
cpu_frequency: 160MHZ. #15143 -
ESP8266 RTC Preferences: The crash handler reserves 72 bytes of RTC memory, reducing RTC preferences capacity from 96 to 78 words. Overflow goes to flash automatically. Very unlikely to affect real configs. #15465
Component Changes
Section titled “Component Changes”-
LVGL Rotation: The
rotationoption must be moved from the display configuration to thelvgl:block. LVGL now handles rotation directly, with support for runtime rotation changes vialvgl.display.set_rotation. #14955 -
I2S Audio: The legacy I2S driver (
use_legacyoption) has been removed. Thei2s_audiomedia player sub-component has also been removed. Users should migrate to the speaker media player component. #14932 -
Substitutions: When multiple YAML keys resolve to the same substituted name, the last-appearing key now takes precedence (“last writer wins”), instead of the first. This only affects the edge case where multiple keys in the same dict resolve to the same substituted name. #14918
-
Binary Sensor MultiClick: Timing sequences are now limited to 255 entries (previously unlimited). No real config would approach this limit. #15267
-
Binary Sensor Autorepeat: Timing lists are now limited to 254 entries (previously unlimited). No real config would approach this limit. #15268
Undocumented API Changes
Section titled “Undocumented API Changes”Several internal C++ APIs have changed in this release. These are not covered by the formal breaking change policy, but may affect users who write lambdas or developers maintaining external components.
Component Base Class Changes
Section titled “Component Base Class Changes”-
Component: Shrunk from 12 to 8 bytes per instance.
set_component_source(const LogString *)has been removed and replaced with a protectedset_component_source_(uint8_t)index.warn_if_blocking_over_changed from milliseconds (uint16_t) to centiseconds (uint8_t). #15103 -
Preferences:
ESPPreferenceBackendandESPPreferencesvirtual base classes have been removed and replaced with concretefinalclasses per platform. The type aliasesESPPreferenceBackendandESPPreferencesremain as backward-compatible aliases. No caller changes required. #14825
Trigger and Automation Changes
Section titled “Trigger and Automation Changes”-
Trigger trampolines: Trigger objects for common entity automations (button, sensor, binary_sensor, switch, text_sensor, number, event) are no longer instantiated as separate objects. The
Automation::trigger_back-pointer (protected field) has been removed.build_automation()and Trigger subclasses remain available for external components. #15174 -
TemplatableFn: The
TEMPLATABLE_VALUEmacro now usesTemplatableFn(4 bytes) instead ofTemplatableValue(8 bytes) for trivially copyable types.TemplatableValue<T>for non-string types no longer accepts stateful lambdas (lambdas with captures).TemplatableValueused directly is fully backward compatible. #15545
Component-Specific Changes
Section titled “Component-Specific Changes”-
Nextion:
get_wave_chan_id()is deprecated in favor ofget_wave_channel_id()(removal target: 2026.10.0). Getter methods are nowconst-qualified;get_variable_name()andget_variable_name_to_send()now returnconstreferences instead of copies. Waveform code is gated behindUSE_NEXTION_WAVEFORMdefine. #15204, #15273 -
ATM90E32:
get_phase_angle_()return type changed fromuint16_ttofloatfor correct precision. Unusedlast_periodic_millismember removed. #15238 -
AS5600: Dead
angle,raw_angle, andpositionsensor code removed (setters, members, and codegen that were never connected to the config schema). #15254 -
SEN5x: Dead
voc_baselineconfig option removed (was accepted in schema but never passed to C++). Usestore_baseline: truefor VOC baseline management. #15391 -
Graph:
legendconfig no longer accepts a list (only the first element was ever used). Single-legend configs continue to work unchanged. #15522 -
Haier:
control_methodconfig for HON protocol no longer accepts a list. Single-value configs continue to work unchanged. #15523 -
RP2040 PIO LED Strip:
CUSTOMremoved from theCHIPSETSenum (it crashed at codegen time). Use explicitbit0_high/bit0_low/bit1_high/bit1_lowtiming parameters for custom LED strips. #15537
Breaking Changes for Developers
Section titled “Breaking Changes for Developers”- CallbackManager:
std::functionreplaced with lightweightCallbacktype. Components registering callbacks must use compatible function signatures. #14853 - PollingComponent:
set_update_interval()is now non-virtual. Subclasses overriding this method should use alternative patterns. #14938 - UART FlushResult:
FlushResultrenamed toUARTFlushResultwithUART_FLUSH_RESULT_prefix for enum values. #15101 - Sensor raw_state:
.raw_stateis deprecated.raw_callback_is now gated behindUSE_SENSOR_FILTER. #15094 - Trigger trampolines eliminated: Trigger objects for common entity automations (button, sensor, binary_sensor, switch, text_sensor, number, event) are no longer instantiated.
build_automation()and Trigger subclasses remain available. #15174 - Climate/Fan custom modes: Custom mode/preset vectors are now stored on the entity instead of heap-allocated. Constructors for climate and fan traits have changed. #15206, #15209
- Trigger migrations to callback automation:
alarm_control_panel,lock, andmedia_playertriggers now use callback automation pattern. #15198, #15199, #15200 - BLE event dispatch: BLE event handler dispatch is devirtualized. #15310
- wake_loop: Moved from socket component into core. #15446
- TemplatableFn:
TEMPLATABLE_VALUEmacro now uses 4-byteTemplatableFnfor trivially copyable types. External components calling macro-generated setters with raw C++ constants instead of going throughcg.templatable()will fail to compile. #15545 - Modbus helpers: Shared helper functions refactored across modbus components. #15291, #14172
For detailed migration guides and API documentation, see the ESPHome Developers Documentation.
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)
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)
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
- 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]