ESPHome 2025.12.0 - December 2025
Release Overview
ESPHome 2025.12.0 introduces API action responses for bidirectional communication with Home Assistant, conditional package inclusion for dynamic configurations, and HUB75 LED matrix display support. This release delivers significant memory optimizations saving up to 10KB of IRAM on ESP32 devices, eliminates per-packet heap allocations in API connections and socket latency on ESP8266, and adds 8 new components including the CC1101 sub-GHz transceiver and USB CDC-ACM support. LVGL receives multiple usability improvements, and the WiFi component has been refactored for instant callback-based updates across all platforms.
API Action Responses
The Native API now supports actions that send structured responses back to clients like Home Assistant, enabling true bidirectional communication where actions return success/error status and JSON data payloads (#12136).
Key Features:
- Status responses - Report success or failure with optional error messages
- Data responses - Return structured JSON data from actions using ArduinoJson
- Auto-detection - Response mode automatically detected based on
api.respondusage - Three modes -
none(fire and forget),status(success/error only), oroptional/only(with data)
This unlocks new use cases like query-type actions that return device configuration, sensor readings, or diagnostic information directly to Home Assistant.
api:
actions:
- action: get_sensor_reading
variables:
sensor_name: string
then:
- api.respond:
data: !lambda |-
root["sensor"] = sensor_name;
root["value"] = 42.5;
root["unit"] = "°C";Conditional Package Inclusion
The packages system now supports conditional inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables (#11605).
Key Features:
- Conditional imports - Include packages based on boolean conditions using Jinja2 expressions
- Package merging after substitutions - Packages are now merged after substitution resolution, enabling generated components to merge correctly with manually defined ones
- LVGL extend support - The
!extendand!removedirectives now work with LVGL-style configurations (#11534)
substitutions:
network_package: !include network.yaml
network_enabled: true
packages:
- ${ network_enabled and network_package or {} }This enables creating reusable configuration templates that adapt to different hardware variants or deployment scenarios.
HUB75 LED Matrix Display Support
The new hub75 component brings native support for HUB75 LED matrix panels, enabling large-format LED displays for information dashboards, signage, and creative projects (#11153).
Key Features:
- Multiple ESP32 variants - Supports ESP32 (I2S), ESP32-S3 (LCD CAM + GDMA), and ESP32-P4 (PARLIO)
- Flexible configuration - Configurable panel dimensions, clock speed, and pin assignments
- LVGL compatible - Works seamlessly with LVGL for rich graphical interfaces
- Board presets - Pre-configured settings for popular boards like Apollo Automation M1
CC1101 Sub-1GHz Transceiver
The new cc1101 component adds support for the Texas Instruments CC1101 Sub-1GHz transceiver, enabling 433MHz remote control integration and other sub-GHz wireless applications (#11849).
Key Features:
- 433.92MHz support - Perfect for integrating 433MHz remotes and sensors
- ASK/OOK modulation - Works with common remote control protocols
- Core integration - Designed to work with
remote_receiverandremote_transmittercomponents - Robust initialization - Non-blocking state machine with proper chip reset handling
USB CDC-ACM Support
The new usb_cdc_acm component enables USB virtual serial port functionality on ESP32-S2 and ESP32-S3 devices (#11687).
Key Features:
- Multi-interface support - Up to 2 independent CDC-ACM interfaces per device
- Configurable buffers - Adjustable RX/TX ring buffer sizes
- Line state callbacks - Notifications for DTR, RTS, baud rate, and other line coding changes
- Bridge-ready - Designed to connect USB serial interfaces to UART or other serial interfaces
WiFi Info Callback Architecture
The WiFi component has been refactored from polling-based updates to event-driven callbacks, significantly improving responsiveness (#10748).
Key Features:
- Immediate updates - WiFi info sensors now update instantly when state changes instead of waiting for poll intervals
- Reduced overhead - Eliminates continuous polling in wifi_info sensors
- Platform consistency - All platforms (ESP8266, ESP32, LibreTiny, Pico W) now use the same callback infrastructure
- New power save mode sensor - Reports current WiFi power save mode (#11480)
- AP active condition - New
wifi.ap_activecondition for automation triggers (#11852)
Low Latency UART Processing
The UART component now supports a wake_loop_on_rx flag that wakes the main loop immediately when data arrives, enabling near-real-time serial processing (#12172).
Key Benefits:
- Z-Wave Proxy performance - Reduces latency by ~10ms for WiFi-connected ZWA-2 devices, building on the USB-connected Ethernet/PoE optimizations from 2025.11.0 (#12135)
- Real-time serial applications - Any component requiring fast response to incoming serial data can now achieve sub-millisecond wake times by enabling this flag in their code
- Automatic infrastructure - The socket wake infrastructure is automatically enabled when any UART requests RX wake
ESP8266 Socket Latency Elimination
ESP8266 previously had higher network latency than ESP32 and LibreTiny because it used polling for socket data, sleeping up to 16ms before discovering incoming data. This affected every API request and Home Assistant command. The loop now wakes within microseconds of data arriving using ESP8266’s esp_schedule() mechanism, bringing ESP8266 to near parity with ESP32 and LibreTiny. This is automatic for all ESP8266 devices with no configuration needed (#12397).
Memory and IRAM Optimizations
This release includes substantial memory optimizations, particularly for ESP32 devices using ESP-IDF:
FreeRTOS and Ring Buffer Flash Placement:
- ~8KB IRAM savings - FreeRTOS functions moved to flash by default (#12182)
- ~1.5KB additional IRAM savings - Ring buffer functions moved to flash (#12184)
- Escape hatches - Use
freertos_in_iram: trueorringbuf_in_iram: trueif issues occur
These changes prepare ESPHome for ESP-IDF 6.0 where flash placement becomes the default.
BLE Client Memory Reduction:
- 24-40 bytes per BLE client - Replaced
std::stringwith fixedchar[18]for MAC address storage (#12070)
Text Sensor Optimization:
- 24-32 bytes per text sensor - Eliminated duplicate string storage when no filters configured (#12205)
Dashboard Import Optimization:
- Eliminates URL heap allocation:
- Package import URL is now stored as a pointer to
.rodatainstead of a heap-allocatedstd::string. - On ESP32,
.rodataresides in flash, providing RAM savings. - On ESP8266,
.rodatais in RAM, but this still avoids heap overhead. - (#11951)
- Package import URL is now stored as a pointer to
API Connection Optimizations:
The API connection layer received significant optimizations to reduce heap fragmentation and memory churn:
- Eliminated per-packet heap allocation - Previously every API packet received required a new heap allocation. The receive buffer is now reused across packets, with excess capacity released after initial sync completes. This reduces heap fragmentation on busy devices. For quiet devices, the initial sync memory spike is released rather than held for the lifetime of the connection. (Connections can last for months.) (#12133)
- Zero-copy API commands - Select and light effect commands now process strings directly from protobuf buffer without heap allocation (#12329, #12384)
- Flash storage for device info - Device info strings stored in flash on ESP8266 (#12173)
- Flash storage for state subscriptions - Home Assistant state subscriptions stored in flash instead of heap (#12008)
- Reduced service call storage - Home Assistant service call strings use less heap (#12151)
- APINoiseContext optimization - Removed shared_ptr overhead (#11981)
- Loop-based reboot timeout - Avoids scheduler heap churn (#12291)
Sensor Timeout Filter Optimization:
- Eliminates scheduler heap churn - Timeout filters now use a loop-based implementation instead of scheduler timeouts. This is particularly important for LD2410/LD2420/LD2450 users with many timeout filters, where the old implementation caused ~70 heap operations/second and constant scheduler pool exhaustion when someone was in range of the sensor (#11922)
New Hardware Support
This release adds support for 8 new components and numerous display models:
New Sensor Components:
- hlw8032 - Single-phase power metering IC (#7241)
- stts22h - High-accuracy temperature sensor (#11778)
- thermopro_ble - ThermoPro BLE temperature/humidity sensors (#11835)
- hc8 - HC8 CO2 sensor (#11872)
New Time Component:
New Display Models:
- Waveshare 4.26" e-paper with SSD1677 controller (#11887)
- Waveshare S3 LCD 3.16" (#12309)
- Guition JC4827W543 480x272 display (#12034)
- Guition JC4880P443 480x800 MIPI DSI display (#12068)
- M5Stack Core2 display (#12301)
Platform Enhancements:
- ESP32-C5 PSRAM support with quad mode and speeds up to 120MHz (#12215)
- Seeed XIAO ESP32-C6 board definition (#12307)
- Remote transmitter/receiver support for RP2040 (#12048)
- nRF52 DC-DC converter settings (#11841)
LVGL Improvements
Multiple enhancements improve the LVGL experience:
- Direct button text - Set
text:directly on buttons without nested label widgets (#11964) - Auto row/column padding -
pad_allnow applies to inter-row/column spacing in flex layouts (#11879) - Display sync option - New
update_when_display_idleoption syncs LVGL updates with display refresh (#11896) - Enhanced arc widget - More arc parameters available in update actions (#12066)
- Scroll properties - Added missing scroll-related configuration options (#11901)
Component Enhancements
Gree Climate:
- New
turbo,light,health, andxfanswitches for supported models (#12160)
Climate IR:
- Optional humidity sensor support (#9805)
SPS30 Particulate Sensor:
- Idle mode functionality to extend sensor life and reduce power consumption (#12255)
PCA9685 PWM:
- Phase balancer option to fix LED flickering during animations (#9792)
Prometheus:
- Event and text component metrics support (#10240)
MCP3204 ADC:
- Differential mode measurement support (#7436)
Developer Features
IDF Component Improvements:
- Shorthand syntax for ESP-IDF components like
espressif/esp_hosted^2.6.6(#12127) - YAML can now override component versions defined in code
API Enhancements:
state_subscription_onlyflag for reliable API connection detection without logger false positives (#11906)- New
measurement_anglestate class for angle sensors (#12085)
Breaking Changes
Component Changes
Micronova: Multiple configuration changes (#12226, #12318, #12371):
update_intervalmoved from hub to individual entities - remove frommicronova:section and add to each sensor/text_sensormemory_locationnow restricted to read locations (0x00-0x79) - subtract 0x80 from values above 0x79memory_write_locationremoved from number entities (now calculated automatically)- Custom button/sensor entities now require explicit
memory_locationandaddressconfiguration
Prometheus: Light color metrics (
light_color_*) are now only generated if the light component supports those color modes. This reduces memory usage on ESP8266 but may affect monitoring setups that expected all metrics regardless of light capabilities. #9530Text Sensor: The public
raw_statemember has been removed. If you access.raw_statedirectly in a lambda, update to use.get_raw_state()instead. #12205
Platform Changes
- I2C on ESP32-C5/C6/P4: Fixed I2C port logic for chips with Low Power (LP) I2C ports. Users with multiple I2C buses on these chips may need to verify their port assignments. #12063
Behavior Changes
- WiFi Info: Text sensors now use callback-based updates instead of polling. Updates happen immediately when WiFi state changes rather than on fixed intervals. This improves responsiveness but may change timing behavior if your automations depended on the polling interval. #10748
Breaking Changes for Developers
Component::mark_failed() and status_set_error(): The
const char*overloads are deprecated and will be removed in 2026.6.0. UseLOG_STR()instead:this->mark_failed(LOG_STR("Error message")). This fixes dangling pointer bugs when passing temporary strings. #12021BLEClientBase::address_str(): Return type changed from
const std::string&toconst char*. Remove.c_str()calls:client->address_str()instead ofclient->address_str().c_str(). #12070TextSensor::raw_state: Changed from public member to protected
raw_state_. Useget_raw_state()method instead of direct member access. #12205WiFi component callbacks: New callback architecture with
wifi_connect_state_callback_,ip_state_callback_, andwifi_scan_state_callback_. Automation triggers moved toautomation.h. #10748Micronova:
MicroNovaFunctionsenum removed - value interpretation now determined at compile time. Theget_set_fan_speed_offset()public method removed from sensor entity. #12363
For detailed migration guides and API documentation, see the ESPHome Developers Documentation.
Full list of changes
New Features
- [nrf52] add settings for dcdc converter esphome#11841 by @tomaszduda23 (new-feature)
- [config] !extend / !remove support for LVGL-style configs esphome#11534 by @jpeletier (new-feature)
- [stts22h] Add support for STTS22H temperature sensor esphome#11778 by @B48D81EFCC (new-component) (new-feature) (new-platform)
- [hc8] Add support for HC8 CO2 sensor esphome#11872 by @omartijn (new-component) (new-feature) (new-platform)
- [climate_ir] Add optional humidity sensor esphome#9805 by @damib (new-feature)
- [mcp3204] differential mode support esphome#7436 by @markodraca (new-feature)
- [bm8563] Add bm8563 component esphome#11616 by @abmantis (new-component) (new-feature) (new-platform)
- [mipi_dsi] add guition JC4880P443 display esphome#12068 by @23900 (new-feature)
- [wifi] ap_active condition esphome#11852 by @AzonInc (new-feature)
- [thermopro_ble] Add thermopro ble support esphome#11835 by @sittner (new-component) (new-feature) (new-platform)
- [prometheus] Add event and text base components metrics esphome#10240 by @jzucker2 (new-feature)
- [api] Connected Condition - state_subscription_only flag esphome#11906 by @AzonInc (new-feature)
- Add more lvgl arc update parameters esphome#12066 by @bdm310 (new-feature)
- [lvgl] Add missing obj scroll properties esphome#11901 by @clydebarrow (new-feature)
- [lvgl] Automatically pad rows and columns esphome#11879 by @clydebarrow (new-feature)
- [lvgl] Add option to sync updates with display esphome#11896 by @clydebarrow (new-feature)
- [lvgl] Allow setting text directly on a button esphome#11964 by @clydebarrow (new-feature)
- [epaper_spi] Add SSD1677 and Waveshare 4.26 esphome#11887 by @clydebarrow (new-feature)
- [esp32] Improve IDF component support esphome#12127 by @swoboda1337 (new-feature)
- [mipi_spi] add guition JC4827W543 C/R esphome#12034 by @jpeletier (new-feature)
- Add MEASUREMENT_ANGLE to SensorStateClass esphome#12085 by @jakubcermak (new-feature)
- [psram] Add C5 support esphome#12215 by @swoboda1337 (new-feature)
- [remote_transmitter, remote_receiver] Add RP2040 support esphome#12048 by @j-be (new-feature)
- [esp32] Place FreeRTOS functions in flash by default (prep for IDF 6.0) esphome#12182 by @bdraco (new-feature)
- [esp32] Place ring buffer functions in flash by default (prep for IDF 6.0) esphome#12184 by @bdraco (new-feature)
- [gree]
turbo,light,health,xfanswitches for supported models esphome#12160 by @nagyrobi (new-feature) (new-platform) - [cc1101] Add new cc1101 component esphome#11849 by @lygris (new-component) (new-feature)
- [wifi, wifi_info] Add a WiFi power mode text sensor esphome#11480 by @kahrendt (new-feature)
- [sps30] Add idle mode functionality esphome#12255 by @c0mputerguru (new-feature)
- [hub75] HUB75 display component esphome#11153 by @stuartparmenter (new-component) (new-feature) (new-platform)
- [mipi_spi] Add M5CORE2 model that extends the ILI9341 driver chip esphome#12301 by @lboue (new-feature)
- [api] Device defined action responses esphome#12136 by @jesserockz (new-feature)
- Add seeed_xiao_esp32c6 board definition esphome#12307 by @berikv (new-feature)
- [hlw8032] Single-phase metering IC esphome#7241 by @rici4kubicek (new-component) (new-feature) (new-platform)
- [usb_cdc_acm] New component esphome#11687 by @kbx81 (new-component) (new-feature)
- [pca9685] Allow to disable the phase balancer for PCA9685 esphome#9792 by @jonau (new-feature)
- [mipi_rgb] Add Waveshare 3.16 esphome#12309 by @clydebarrow (new-feature)
- [core] Packages refactor and conditional package inclusion (package refactor part 1) esphome#11605 by @jpeletier (new-feature)
New Components
- [stts22h] Add support for STTS22H temperature sensor esphome#11778 by @B48D81EFCC (new-component) (new-feature) (new-platform)
- [hc8] Add support for HC8 CO2 sensor esphome#11872 by @omartijn (new-component) (new-feature) (new-platform)
- [bm8563] Add bm8563 component esphome#11616 by @abmantis (new-component) (new-feature) (new-platform)
- [thermopro_ble] Add thermopro ble support esphome#11835 by @sittner (new-component) (new-feature) (new-platform)
- [cc1101] Add new cc1101 component esphome#11849 by @lygris (new-component) (new-feature)
- [hub75] HUB75 display component esphome#11153 by @stuartparmenter (new-component) (new-feature) (new-platform)
- [hlw8032] Single-phase metering IC esphome#7241 by @rici4kubicek (new-component) (new-feature) (new-platform)
- [usb_cdc_acm] New component esphome#11687 by @kbx81 (new-component) (new-feature)
New Platforms
- [stts22h] Add support for STTS22H temperature sensor esphome#11778 by @B48D81EFCC (new-component) (new-feature) (new-platform)
- [hc8] Add support for HC8 CO2 sensor esphome#11872 by @omartijn (new-component) (new-feature) (new-platform)
- [bm8563] Add bm8563 component esphome#11616 by @abmantis (new-component) (new-feature) (new-platform)
- [thermopro_ble] Add thermopro ble support esphome#11835 by @sittner (new-component) (new-feature) (new-platform)
- [gree]
turbo,light,health,xfanswitches for supported models esphome#12160 by @nagyrobi (new-feature) (new-platform) - [hub75] HUB75 display component esphome#11153 by @stuartparmenter (new-component) (new-feature) (new-platform)
- [hlw8032] Single-phase metering IC esphome#7241 by @rici4kubicek (new-component) (new-feature) (new-platform)
Breaking Changes
- [core] Deprecate unsafe const char
*APIs in mark_failed() and status_set_error(), add LogString*overloads esphome#12021 by @bdraco (breaking-change) - [wifi_info] Use callbacks instead of polling esphome#10748 by @kbx81 (breaking-change)
- [esp32_ble_client] Replace std::string with char[18] for BLE address storage esphome#12070 by @bdraco (breaking-change)
- [prometheus] Avoid generating unused light color metrics to reduce memory usage on ESP8266 esphome#9530 by @pgolawsk (breaking-change)
- [text_sensor] Avoid duplicate string storage when no filters configured esphome#12205 by @bdraco (breaking-change)
- [micronova] Set update_interval on entities instead on hub esphome#12226 by @edenhaus (breaking-change)
- [micronova] Set the write bit automatically esphome#12318 by @edenhaus (breaking-change)
- [i2c] Fix port logic with ESP-IDF esphome#12063 by @arno1801 (breaking-change)
- [micronova] Remove MicroNovaFunctions esphome#12363 by @edenhaus (breaking-change)
- [micronova] Require memory location and address for custom entities esphome#12371 by @edenhaus (breaking-change)
All changes
- [wifi] Pass ManualIP by const reference to reduce stack usage esphome#11858 by @bdraco
- [esp32_ble] Use stack allocation for MAC formatting in dump_config esphome#11860 by @bdraco
- [wifi] Use stack allocation for BSSID formatting in logging esphome#11859 by @bdraco
- [nrf52] add settings for dcdc converter esphome#11841 by @tomaszduda23 (new-feature)
- [font] Store data in flash only esphome#11926 by @clydebarrow
- [binary_sensor] Modernize to C++17 nested namespaces and remove redundant qualifications esphome#11929 by @bdraco
- Add tests for sensor timeout filters esphome#11923 by @bdraco
- [lvgl] Migrate lv_font creation into Font class and optimize esphome#11915 by @clydebarrow
- [cover] Modernize to C++17 nested namespaces esphome#11935 by @bdraco
- [config] !extend / !remove support for LVGL-style configs esphome#11534 by @jpeletier (new-feature)
- [number] Modernize to C++17 nested namespaces esphome#11945 by @bdraco
- [wifi] Skip redundant setter calls for default values esphome#11943 by @bdraco
- [dashboard_import] Store package import URL in .rodata instead of RAM esphome#11951 by @bdraco
- [ld24xx] Use stack allocation for MAC and version formatting esphome#11961 by @bdraco
- [bme68x] Print error when no sensors are configured esphome#11976 by @swoboda1337
- [wifi, captive_portal, web_server, wifi_info] Use stack allocation for MAC address formatting esphome#11963 by @bdraco
- [light] Modernize namespace declarations to C++17 syntax esphome#11986 by @bdraco
- [ld24xx] Modernize namespace declarations to C++17 syntax esphome#11988 by @bdraco
- [api] Fix format warnings in dump esphome#11999 by @swoboda1337
- [socket] Fix IPv6 address parsing for BSD sockets esphome#11996 by @dwmw2
- [stts22h] Add support for STTS22H temperature sensor esphome#11778 by @B48D81EFCC (new-component) (new-feature) (new-platform)
- Document XFLIP handling in ST7701S esphome#12014 by @jpeletier
- [select] Modernize namespace declarations to C++17 syntax esphome#12007 by @bdraco
- [mdns] Modernize to C++17 nested namespace syntax esphome#11983 by @bdraco
- [lock] Modernize to C++17 nested namespaces esphome#11982 by @bdraco
- [core] Document threading model rationale in ThreadModel enum esphome#11979 by @bdraco
- [nrf52,i2c] fix review comment esphome#11931 by @tomaszduda23
- [core] Optimize DelayAction for no-argument case using if constexpr esphome#11913 by @bdraco
- [hc8] Add support for HC8 CO2 sensor esphome#11872 by @omartijn (new-component) (new-feature) (new-platform)
- [climate_ir] Add optional humidity sensor esphome#9805 by @damib (new-feature)
- [tests] Fix mipi_spi test board esphome#12031 by @ximex
- [mcp3204] differential mode support esphome#7436 by @markodraca (new-feature)
- [bm8563] Add bm8563 component esphome#11616 by @abmantis (new-component) (new-feature) (new-platform)
- [api] Rename
USE_API_SERVICEStoUSE_API_USER_DEFINED_ACTIONSesphome#12029 by @jesserockz - [core] Fix error on invalid id extend/remove esphome#12064 by @jpeletier
- [ci] Fix filename esphome#12065 by @swoboda1337
- [ci] Fix test grouping esphome#12067 by @swoboda1337
- [mipi_dsi] add guition JC4880P443 display esphome#12068 by @23900 (new-feature)
- [logger] Reduce UART overhead on ESP32/ESP8266 and fix buffer truncation esphome#11927 by @bdraco
- [api] Reduce heap allocations in DeviceInfoResponse esphome#11952 by @bdraco
- [web_server_base] Replace shared_ptr with unique_ptr for AsyncWebServer esphome#11984 by @bdraco
- [ethernet] Conditionally compile manual_ip to save 24 bytes RAM esphome#11832 by @bdraco
- [light] Dynamically disable loop when idle to reduce CPU overhead esphome#11881 by @bdraco
- [api] Use stack buffer for MAC address in Noise handshake esphome#12072 by @bdraco
- [wifi] ap_active condition esphome#11852 by @AzonInc (new-feature)
- [esp32] Use the IDF I2C implementation on Arduino esphome#12076 by @swoboda1337
- [thermopro_ble] Add thermopro ble support esphome#11835 by @sittner (new-component) (new-feature) (new-platform)
- [prometheus] Add event and text base components metrics esphome#10240 by @jzucker2 (new-feature)
- [api] Connected Condition - state_subscription_only flag esphome#11906 by @AzonInc (new-feature)
- [api] Optimize APINoiseContext memory usage by removing shared_ptr overhead esphome#11981 by @bdraco
- [api] Remove redundant socket pointer from APIFrameHelper esphome#11985 by @bdraco
- [wifi] Add runtime power saving mode control esphome#11478 by @kahrendt
- [logger] Eliminate strlen overhead on LibreTiny esphome#11938 by @bdraco
- [wifi] Use ESP-IDF IP formatting macros directly to eliminate heap allocations esphome#12078 by @bdraco
- [prometheus] Use current_option() instead of deprecated .state for select entities esphome#12079 by @bdraco
- [core] Deprecate unsafe const char
*APIs in mark_failed() and status_set_error(), add LogString*overloads esphome#12021 by @bdraco (breaking-change) - [bluetooth_proxy] Fix crash due to null pointer esphome#12084 by @kbx81
- [wifi_info] Use callbacks instead of polling esphome#10748 by @kbx81 (breaking-change)
- [ble_client] Write static BLE data directly from flash without allocation esphome#11826 by @bdraco
- [template.alarm_control_panel] Replace std::map with FixedVector for heap and flash savings esphome#11893 by @bdraco
- Add more lvgl arc update parameters esphome#12066 by @bdm310 (new-feature)
- [esp8266] Use C++17 nested namespaces and constexpr esphome#12096 by @bdraco
- [api] Use const char
*pointers for light effects to eliminate heap allocations esphome#12090 by @bdraco - [core] Reduce flash size by combining set_name() and set_object_id() calls esphome#11941 by @bdraco
- [web_server] Consolidate turn_on/turn_off handlers to eliminate duplicate lambdas esphome#12094 by @bdraco
- [esp32_ble] Optimize name storage to reduce RAM and eliminate heap allocations esphome#12071 by @bdraco
- [ltr390] Simplify mode tracking with bitmask instead of vector/function esphome#12093 by @bdraco
- [sht4x] Read and store a serial number of SHT4x sensors esphome#12089 by @namezys
- Add developer-breaking-change labelling esphome#12095 by @jesserockz
- [core] Replace seq<>/gens<> with std::index_sequence for code clarity esphome#11921 by @bdraco
- [core] Deduplicate identical stateless lambdas to reduce flash usage esphome#11918 by @bdraco
- [esp32_ble_client] Replace std::string with char[18] for BLE address storage esphome#12070 by @bdraco (breaking-change)
- [lvgl] Fix lambda return types for coord and font validators esphome#12113 by @bdraco
- [lvgl] Add missing obj scroll properties esphome#11901 by @clydebarrow (new-feature)
- [lvgl] Automatically pad rows and columns esphome#11879 by @clydebarrow (new-feature)
- Revert “[core] Deduplicate identical stateless lambdas to reduce flash usage” esphome#12117 by @bdraco
- [packages] Fix package schema validation esphome#12116 by @jpeletier
- [prometheus] Avoid generating unused light color metrics to reduce memory usage on ESP8266 esphome#9530 by @pgolawsk (breaking-change)
- make thermostat humidification_action public esphome#12132 by @jonoberheide
- [core] Fix for missing arguments to shared_lambda esphome#12115 by @clydebarrow
- [lvgl] Add option to sync updates with display esphome#11896 by @clydebarrow (new-feature)
- [lvgl] Allow setting text directly on a button esphome#11964 by @clydebarrow (new-feature)
- [epaper_spi] Add SSD1677 and Waveshare 4.26 esphome#11887 by @clydebarrow (new-feature)
- [inkplate] Ignore strapping pin warnings on default pins esphome#12110 by @jesserockz
- [esp32] Improve IDF component support esphome#12127 by @swoboda1337 (new-feature)
- [logger] Replace std::function callbacks with LogListener interface esphome#12153 by @bdraco
- [light] Replace sparse enum switch with linear search to save 156 bytes RAM esphome#12140 by @bdraco
- [wifi] Save 112 bytes BSS on ESP8266 by calling SDK directly for BSSID esphome#12137 by @bdraco
- [esp32_ble_tracker] Replace scanner state callback with listener interface esphome#12156 by @bdraco
- [wifi] Replace std::function callbacks with listener interfaces esphome#12155 by @bdraco
- [api] Eliminate rx_buf heap churn and release buffers after initial sync esphome#12133 by @bdraco
- [tests] Remote packages with substitutions esphome#12145 by @jpeletier
- [packages] Restore remote shorthand vars and !remove in early package contents validation esphome#12158 by @jpeletier
- [sensor] Replace timeout filter scheduler with loop-based implementation esphome#11922 by @bdraco
- [logger] Conditionally compile log level change listener esphome#12168 by @bdraco
- [ble_client] Convert to C++17 namespace style esphome#12176 by @bdraco
- [number] Reduce NumberCall size by 4 bytes on 32-bit platforms esphome#12178 by @bdraco
- [light] Store log_percent parameter strings in flash on ESP8266 esphome#12174 by @bdraco
- [mipi_spi] add guition JC4827W543 C/R esphome#12034 by @jpeletier (new-feature)
- Add MEASUREMENT_ANGLE to SensorStateClass esphome#12085 by @jakubcermak (new-feature)
- [ade7953_base] Add missing CODEOWNERS esphome#12181 by @dlitz
- [climate] Use C++17 nested namespace syntax esphome#12194 by @bdraco
- [esp32_can] Add P4 support esphome#12201 by @swoboda1337
- [openthread] Add C5 support esphome#12200 by @swoboda1337
- [mdns] Bump mDNS component to 1.9.1 esphome#12207 by @HeMan
- [lock] Refactor trigger classes to template and add integration tests esphome#12193 by @bdraco
- [web_server] Replace routing table with if-else chain to save 116 bytes RAM esphome#12139 by @bdraco
- [psram] Add C5 support esphome#12215 by @swoboda1337 (new-feature)
- [uart] Add
wake_loop_on_rxflag for low latency processing esphome#12172 by @kbx81 - [wifi_info] Fix compilation error when using only mac_address sensor, add tests esphome#12222 by @kbx81
- [uart] Convert to C++17 namespace style esphome#12220 by @kbx81
- [core] Fix status_momentary API misuse and optimize parameter type esphome#12216 by @bdraco
- [micronova] Convert to C++17 namespace style esphome#12229 by @edenhaus
- [remote_transmitter, remote_receiver] Add RP2040 support esphome#12048 by @j-be (new-feature)
- [uart] Automatically enable the socket wake infrastructure when RX wake requested esphome#12221 by @kbx81
- [zwave_proxy] Use new socket wake infrastructure to reduce latency, convert to C++17 namespace style esphome#12135 by @kbx81
- [helpers] Fix unit tests following #12135 esphome#12237 by @kbx81
- [datetime] Convert to C++17 nested namespace style esphome#12235 by @bdraco
- [button] Convert to C++17 nested namespace style esphome#12233 by @bdraco
- [mqtt] Enable support for the RTL87XX platform esphome#7697 by @popovec
- [esp8266] Allow IN&OUT pin config for ESP8266 esphome#12238 by @DjordjeMandic
- [esp32] Place FreeRTOS functions in flash by default (prep for IDF 6.0) esphome#12182 by @bdraco (new-feature)
- [cover] Store cover state strings in flash on ESP8266 esphome#12196 by @bdraco
- [ota] Use ESP-IDF OTA backend for all ESP32 builds esphome#12244 by @swoboda1337
- [esp32] Place ring buffer functions in flash by default (prep for IDF 6.0) esphome#12184 by @bdraco (new-feature)
- [text_sensor] Avoid duplicate string storage when no filters configured esphome#12205 by @bdraco (breaking-change)
- [core] Filter noisy platformio log messages esphome#12218 by @swoboda1337
- [lock] Store lock state strings in flash on ESP8266 esphome#12163 by @bdraco
- [esp32_camera] Replace std::function callbacks with CameraListener interface esphome#12165 by @bdraco
- [light] Use listener pattern for state callbacks with lazy allocation esphome#12166 by @bdraco
- [core] Add RAM strings and symbols analysis to analyze-memory command esphome#12161 by @bdraco
- [web_server] Store update state strings in flash on ESP8266 esphome#12204 by @bdraco
- [valve] Store valve state strings in flash on ESP8266 esphome#12202 by @bdraco
- [web_server_idf] Fix SSE multi-line message formatting esphome#12247 by @bdraco
- [text_sensor] Add deprecation warning for raw_state member access esphome#12246 by @bdraco
- [wifi] Fix ap_active condition esphome#12227 by @AzonInc
- [core] Add PROGMEM macros and move web_server JSON keys to flash esphome#12214 by @bdraco
- [tests] Allow substitution tests to run independently for debugging esphome#12224 by @jpeletier
- [gree]
turbo,light,health,xfanswitches for supported models esphome#12160 by @nagyrobi (new-feature) (new-platform) - [cc1101] Add new cc1101 component esphome#11849 by @lygris (new-component) (new-feature)
- [text_sensor] Fix spurious raw_state deprecation warnings esphome#12262 by @bdraco
- [tests] Add testing of command line substitutions esphome#12210 by @jpeletier
- [core] Improve CORE.data documentation with dataclass pattern esphome#12170 by @bdraco
- [cst816] Fix CST826 & CST836 esphome#12260 by @jsmarion
- [wifi, wifi_info] Add a WiFi power mode text sensor esphome#11480 by @kahrendt (new-feature)
- [esp32] Sort variants in situ esphome#10410 by @ximex
- [lvgl] fix hello_world passing invalid parameter to parse_yaml esphome#12274 by @jpeletier
- [tests] Bump esp32_hosted in the test code esphome#12289 by @swoboda1337
- [CI] Update renamed action repo esphome#12290 by @jesserockz
- [api] Use loop-based reboot timeout check to avoid scheduler heap churn esphome#12291 by @bdraco
- [remote_receiver] buffer usage fix and idle optimizations esphome#9999 by @Citizen07
- Update readme logo esphome#12294 by @jesserockz
- [esp32] Change imports to use esp32 only, not .const esphome#12243 by @jesserockz
- [remote_receiver] Fix Zephyr clang tidy esphome#12299 by @swoboda1337
- [api] Simplify MessageCreator to trivially copyable type esphome#12295 by @bdraco
- [esp32] Add support for ESP32-C61 variant esphome#12285 by @swoboda1337
- [light] Fix schedule_show not enabling loop for idle addressable lights esphome#12302 by @bdraco
- [sps30] Add idle mode functionality esphome#12255 by @c0mputerguru (new-feature)
- [hub75] HUB75 display component esphome#11153 by @stuartparmenter (new-component) (new-feature) (new-platform)
- [mipi_spi] Add M5CORE2 model that extends the ILI9341 driver chip esphome#12301 by @lboue (new-feature)
- [esp32] Add missing variant support esphome#12305 by @swoboda1337
- [cc1101] Use Hz and cv.frequency instead of kHz esphome#12313 by @swoboda1337
- [image] Add USE_IMAGE in defines.h esphome#12317 by @clydebarrow
- [ci-custom] Fix after switch from string to path esphome#12314 by @clydebarrow
- [api] Device defined action responses esphome#12136 by @jesserockz (new-feature)
- [text_sensor] Reduce filter memory usage using const char
*esphome#12334 by @bdraco - [nextion] Use 16-bit id for pics esphome#12330 by @edwardtfn
- [text] Add component tests with pattern coverage esphome#12345 by @bdraco
- [esp8266] Allow use of recvfrom for esphome sockets esphome#12342 by @elupus
- [template] Use C++17 nested namespace syntax esphome#12346 by @bdraco
- [text] Store pattern as const char
*to reduce memory usage esphome#12335 by @bdraco - [micronova] Set update_interval on entities instead on hub esphome#12226 by @edenhaus (breaking-change)
- [micronova] Move STOVE_STATES to text sensor file as it’s used only there esphome#12349 by @edenhaus
- [micronova] Add FINAL_VALIDATE_SCHEMA to validate uart esphome#12350 by @edenhaus
- [core] Move Color::gradient to cpp to avoid duplicate code esphome#12348 by @bdraco
- [wifi_signal] Update signal strength immediately on WiFi connect/disconnect esphome#12347 by @bdraco
- [wifi_signal] Add ifdef guards for clang-tidy compatibility esphome#12362 by @bdraco
- Add seeed_xiao_esp32c6 board definition esphome#12307 by @berikv (new-feature)
- [micronova] Set the write bit automatically esphome#12318 by @edenhaus (breaking-change)
- [hlw8032] Single-phase metering IC esphome#7241 by @rici4kubicek (new-component) (new-feature) (new-platform)
- [hub75] fix id conflict esphome#12365 by @arno1801
- [usb_cdc_acm] New component esphome#11687 by @kbx81 (new-component) (new-feature)
- [pca9685] Allow to disable the phase balancer for PCA9685 esphome#9792 by @jonau (new-feature)
- [core] Use StringRef for get_comment and get_compilation_time to avoid allocations esphome#12219 by @bdraco
- [select] Add zero-copy support for API select commands esphome#12329 by @bdraco
- [micronova] Make stove switch entity independent esphome#12355 by @edenhaus
- [i2c] Fix port logic with ESP-IDF esphome#12063 by @arno1801 (breaking-change)
- Update URLs esphome#12369 by @smarthome-10
- [micronova] Remove MicroNovaFunctions esphome#12363 by @edenhaus (breaking-change)
- [sx1509] Change setup priority from HARDWARE to IO esphome#12373 by @mirko
- [psram] Fix boot failure with 120MHz Octal flash esphome#12377 by @clydebarrow
- [pio] Rationalise library definitions in platformio.ini esphome#12374 by @clydebarrow
- [scheduler] Avoid std::string allocation in RetryArgs esphome#12311 by @bdraco
- [mdns] Reduce RAM usage by eliminating MAC address heap allocation esphome#12073 by @bdraco
- [core] Add PR template instruction to AI instructions esphome#12375 by @swoboda1337
- [api] Store device info strings in flash on ESP8266 esphome#12173 by @bdraco
- [packages] Add more information and deprecation deadline for “single package” includes esphome#12280 by @jpeletier
- [api] Use StringRef for ActionResponse error message to avoid copy esphome#12240 by @bdraco
- [api] Store Home Assistant state subscriptions in flash instead of heap esphome#12008 by @bdraco
- [wifi] Fix LibreTiny spurious disconnect events aborting connections esphome#12357 by @bdraco
- [api] Reduce heap usage for Home Assistant service call string storage esphome#12151 by @bdraco
- [micronova] Require memory location and address for custom entities esphome#12371 by @edenhaus (breaking-change)
- [epaper_spi] Set reasonable default update interval esphome#12331 by @clydebarrow
- [mipi_rgb] Add Waveshare 3.16 esphome#12309 by @clydebarrow (new-feature)
- [ci] Allow memory impact target branch build to fail without blocking CI esphome#12381 by @bdraco
- [ci] Isolate usb_cdc_acm in component tests due to tinyusb/usb_host conflict esphome#12392 by @bdraco
- [micronova] Fix test UART package key to match directory name esphome#12391 by @bdraco
- [tests] Fix clang-tidy warnings in custom_api_device_component fixture esphome#12390 by @bdraco
- [core] Packages refactor and conditional package inclusion (package refactor part 1) esphome#11605 by @jpeletier (new-feature)
- Bump pytest from 9.0.0 to 9.0.1 esphome#11874 by @dependabot[bot]
- Bump pylint from 4.0.2 to 4.0.3 esphome#11894 by @dependabot[bot]
- Bump github/codeql-action from 4.31.2 to 4.31.3 esphome#11911 by @dependabot[bot]
- Bump ruff from 0.14.4 to 0.14.5 esphome#11910 by @dependabot[bot]
- Bump ruamel-yaml-clib from 0.2.14 to 0.2.15 esphome#11956 by @dependabot[bot]
- Bump actions/checkout from 5.0.0 to 5.0.1 esphome#11957 by @dependabot[bot]
- Bump github/codeql-action from 4.31.3 to 4.31.4 esphome#11977 by @dependabot[bot]
- Bump pyupgrade from 3.21.1 to 3.21.2 esphome#12002 by @dependabot[bot]
- Bump actions/checkout from 5.0.1 to 6.0.0 esphome#12022 by @dependabot[bot]
- Bump github/codeql-action from 4.31.4 to 4.31.5 esphome#12080 by @dependabot[bot]
- Bump peter-evans/create-pull-request from 7.0.8 to 7.0.9 esphome#12082 by @dependabot[bot]
- Bump actions/create-github-app-token from 2.1.4 to 2.2.0 esphome#12081 by @dependabot[bot]
- Bump bleak from 1.1.1 to 2.0.0 esphome#12083 by @dependabot[bot]
- Bump aioesphomeapi from 42.7.0 to 42.8.0 esphome#12092 by @dependabot[bot]
- Bump actions/setup-python from 6.0.0 to 6.1.0 esphome#12106 by @dependabot[bot]
- Bump actions/setup-python from 6.0.0 to 6.1.0 in /.github/actions/restore-python esphome#12108 by @dependabot[bot]
- Bump aioesphomeapi from 42.8.0 to 42.9.0 esphome#12189 by @dependabot[bot]
- Bump ruff from 0.14.5 to 0.14.7 esphome#12190 by @dependabot[bot]
- Bump github/codeql-action from 4.31.5 to 4.31.6 esphome#12234 by @dependabot[bot]
- Bump aioesphomeapi from 42.9.0 to 42.10.0 esphome#12245 by @dependabot[bot]
- Bump pylint from 4.0.3 to 4.0.4 esphome#12239 by @dependabot[bot]
- Bump actions/checkout from 6.0.0 to 6.0.1 esphome#12259 by @dependabot[bot]
- Bump actions/stale from 10.1.0 to 10.1.1 esphome#12270 by @dependabot[bot]
- Bump ruff from 0.14.7 to 0.14.8 esphome#12286 by @dependabot[bot]
- Bump peter-evans/create-pull-request from 7.0.9 to 7.0.11 esphome#12303 by @dependabot[bot]
- Bump github/codeql-action from 4.31.6 to 4.31.7 esphome#12304 by @dependabot[bot]
- Bump aioesphomeapi from 43.0.0 to 43.1.0 esphome#12333 by @dependabot[bot]
- Bump pytest from 9.0.1 to 9.0.2 esphome#12332 by @dependabot[bot]
- Bump aioesphomeapi from 43.1.0 to 43.2.1 esphome#12385 by @dependabot[bot]
All Changelogs
- ESPHome 2025.12.0 - December 2025 (current page)
- ESPHome 2025.11.0 - November 2025
- ESPHome 2025.10.0 - 15th October 2025
- ESPHome 2025.9.0 - 17th September 2025
- ESPHome 2025.8.0 - 20th August 2025
- ESPHome 2025.7.0 - 16th July 2025
- ESPHome 2025.6.0 - 18th June 2025
- ESPHome 2025.5.0 - 21st May 2025
- ESPHome 2025.4.0 - 16th April 2025
- ESPHome 2025.3.0 - 19th March 2025
- ESPHome 2025.2.0 - 19th February 2025
- ESPHome 2024.12.0 - 18th December 2024
- ESPHome 2024.11.0 - 20th November 2024
- ESPHome 2024.10.0 - 16th October 2024
- ESPHome 2024.9.0 - 18th September 2024
- ESPHome 2024.8.0 - 21st August 2024
- ESPHome 2024.7.0 - 17th July 2024
- ESPHome 2024.6.0 - 19th June 2024
- ESPHome 2024.5.0 - 15th May 2024
- ESPHome 2024.4.0 - 17th April 2024
- ESPHome 2024.3.0 - 20th March 2024
- ESPHome 2024.2.0 - 21st February 2024
- ESPHome 2023.12.0 - 20th December 2023
- ESPHome 2023.11.0 - 15th November 2023
- ESPHome 2023.10.0 - 18th October 2023
- ESPHome 2023.9.0 - 27th September 2023
- ESPHome 2023.8.0 - 16th August 2023
- ESPHome 2023.7.0 - 19th July 2023
- ESPHome 2023.6.0 - 21st June 2023
- ESPHome 2023.5.0 - 17th May 2023
- ESPHome 2023.4.0 - 19th April 2023
- ESPHome 2023.3.0 - 15th March 2023
- ESPHome 2023.2.0 - 15th February 2023
- ESPHome 2022.12.0 - 14th December 2022
- ESPHome 2022.11.0 - 16th November 2022
- ESPHome 2022.10.0 - 19th October 2022
- ESPHome 2022.9.0 - 21st September 2022
- ESPHome 2022.8.0 - 17th August 2022
- ESPHome 2022.6.0 - 15th June 2022
- ESPHome 2022.5.0 - 18th May 2022
- ESPHome 2022.4.0 - 20th April 2022
- ESPHome 2022.3.0 - 16th March 2022
- ESPHome 2022.2.0 - 16th February 2022
- ESPHome 2022.1.0 - 19th January 2022
- ESPHome 2021.12.0 - 11th December 2021
- ESPHome 2021.11.0 - 17th November 2021
- ESPHome 2021.10.0 - 20th October 2021
- ESPHome 2021.9.0 - 15th September 2021
- ESPHome 2021.8.0 - 18th August 2021
- Changelog - Version 1.20.0 - 21st July 2021
- Changelog - Version 1.19.0 - 16th June 2021
- Changelog - Version 1.18.0 - 19th May 2021
- Changelog - Version 1.17.0 - 4th May 2021
- Changelog - Version 1.16.0 - February 3, 2021
- Changelog - Version 1.15.0 - September 13, 2020
- Changelog - Version 1.14.0 - November 1
- Changelog - Version 1.13.0 - May 30th 2019
- Changelog - Version 1.12.0
- Changelog - Version 1.11.0
- Changelog - Version 1.10.0
- Changelog - Version 1.9.0
- Version 1.8.0
- Version 1.7.0




