You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/changelog/2025.12.0.md
+33-43Lines changed: 33 additions & 43 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,13 +21,13 @@ params:
21
21
## Release Overview
22
22
23
23
<!-- RELEASE_OVERVIEW_START -->
24
-
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 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.
24
+
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.
25
25
<!-- RELEASE_OVERVIEW_END -->
26
26
27
27
<!-- FEATURE_HIGHLIGHTS_START -->
28
28
## API Action Responses
29
29
30
-
ESPHome actions can now send structured responses back to clients like Home Assistant, enabling true bidirectional communication where actions return success/error status and JSON data payloads ([#12136](https://github.com/esphome/esphome/pull/12136)).
30
+
The [Native API](/components/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](https://github.com/esphome/esphome/pull/12136)).
31
31
32
32
**Key Features:**
33
33
@@ -54,7 +54,7 @@ api:
54
54
55
55
## Conditional Package Inclusion
56
56
57
-
The configuration system now supports conditional package inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables ([#11605](https://github.com/esphome/esphome/pull/11605)).
57
+
The [packages](/components/packages) system now supports conditional inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables ([#11605](https://github.com/esphome/esphome/pull/11605)).
58
58
59
59
**Key Features:**
60
60
@@ -84,18 +84,6 @@ The new [hub75](/components/display/hub75) component brings native support for H
84
84
- **LVGL compatible** - Works seamlessly with LVGL for rich graphical interfaces
85
85
- **Board presets** - Pre-configured settings for popular boards like Apollo Automation M1
86
86
87
-
```yaml
88
-
display:
89
-
- platform: hub75
90
-
id: matrix
91
-
panel_width: 64
92
-
panel_height: 64
93
-
clock_speed: 20MHz
94
-
r1_pin: 1
95
-
g1_pin: 5
96
-
# ... additional pins
97
-
```
98
-
99
87
## CC1101 Sub-1GHz Transceiver
100
88
101
89
The new [cc1101](/components/cc1101) component adds support for the Texas Instruments CC1101 Sub-1GHz transceiver, enabling 433MHz remote control integration and other sub-GHz wireless applications ([#11849](https://github.com/esphome/esphome/pull/11849)).
@@ -107,16 +95,6 @@ The new [cc1101](/components/cc1101) component adds support for the Texas Instru
107
95
- **Core integration** - Designed to work with `remote_receiver` and `remote_transmitter` components
108
96
- **Robust initialization** - Non-blocking state machine with proper chip reset handling
109
97
110
-
```yaml
111
-
cc1101:
112
-
id: cc1101_transceiver
113
-
cs_pin: GPIO5
114
-
frequency: 433.92MHz
115
-
modulation: ASK/OOK
116
-
bandwidth: 203kHz
117
-
symbol_rate: 5000
118
-
```
119
-
120
98
## USB CDC-ACM Support
121
99
122
100
The new [usb_cdc_acm](/components/usb_cdc_acm) component enables USB virtual serial port functionality on ESP32-S2 and ESP32-S3 devices ([#11687](https://github.com/esphome/esphome/pull/11687)).
@@ -146,21 +124,13 @@ The UART component now supports a `wake_loop_on_rx` flag that wakes the main loo
146
124
147
125
**Key Benefits:**
148
126
149
-
- **Z-Wave Proxy performance** - Reduces latency by ~10ms, bringing wired Ethernet performance within milliseconds of direct USB/serial connection ([#12135](https://github.com/esphome/esphome/pull/12135))
150
-
- **Real-time serial applications** - Any component requiring fast response to incoming serial data can now achieve sub-millisecond wake times
127
+
- **Z-Wave Proxy performance** - Reduces latency by ~10ms for WiFi-connected [ZWA-2 devices](https://www.home-assistant.io/blog/2025/10/13/portable-z-wave-with-wifi-and-poe/), building on the USB-connected Ethernet/PoE optimizations from 2025.11.0 ([#12135](https://github.com/esphome/esphome/pull/12135))
128
+
- **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
151
129
- **Automatic infrastructure** - The socket wake infrastructure is automatically enabled when any UART requests RX wake
152
130
153
131
## ESP8266 Socket Latency Elimination
154
132
155
-
ESP8266 devices now respond to network requests with the same speed as ESP32 devices ([#12397](https://github.com/esphome/esphome/pull/12397)).
156
-
157
-
**The Problem:**
158
-
159
-
ESP8266 used polling for socket data, sleeping up to 16ms before discovering incoming data. This affected every API request and Home Assistant command.
160
-
161
-
**The Solution:**
162
-
163
-
The loop now wakes within microseconds of data arriving using ESP8266's `esp_schedule()` mechanism, matching ESP32 and LibreTiny behavior. This is automatic for all ESP8266 devices with no configuration needed.
133
+
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](https://github.com/esphome/esphome/pull/12397)).
164
134
165
135
## Memory and IRAM Optimizations
166
136
@@ -184,7 +154,27 @@ These changes prepare ESPHome for ESP-IDF 6.0 where flash placement becomes the
184
154
185
155
**Dashboard Import Optimization:**
186
156
187
-
- **~20 bytes per device** - Package import URL now stored as pointer to flash instead of heap-allocated string ([#11951](https://github.com/esphome/esphome/pull/11951))
157
+
- **Eliminates URL heap allocation**:
158
+
- Package import URL is now stored as a pointer to `.rodata` instead of a heap-allocated `std::string`.
159
+
- On ESP32, `.rodata` resides in flash, providing RAM savings.
160
+
- On ESP8266, `.rodata` is in RAM, but this still avoids heap overhead.
The API connection layer received significant optimizations to reduce heap fragmentation and memory churn:
166
+
167
+
- **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](https://github.com/esphome/esphome/pull/12133))
168
+
- **Zero-copy API commands** - Select and light effect commands now process strings directly from protobuf buffer without heap allocation ([#12329](https://github.com/esphome/esphome/pull/12329), [#12384](https://github.com/esphome/esphome/pull/12384))
169
+
- **Flash storage for device info** - Device info strings stored in flash on ESP8266 ([#12173](https://github.com/esphome/esphome/pull/12173))
170
+
- **Flash storage for state subscriptions** - Home Assistant state subscriptions stored in flash instead of heap ([#12008](https://github.com/esphome/esphome/pull/12008))
171
+
- **Reduced service call storage** - Home Assistant service call strings use less heap ([#12151](https://github.com/esphome/esphome/pull/12151))
- **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](https://github.com/esphome/esphome/pull/11922))
188
178
189
179
## New Hardware Support
190
180
@@ -226,7 +216,7 @@ Multiple enhancements improve the LVGL experience:
226
216
- **Enhanced arc widget** - More arc parameters available in update actions ([#12066](https://github.com/esphome/esphome/pull/12066))
@@ -270,11 +260,11 @@ Multiple enhancements improve the LVGL experience:
270
260
<!-- BREAKING_CHANGES_USERS_START -->
271
261
### Component Changes
272
262
273
-
- **Micronova**: The `update_interval` configuration has moved from the hub to individual entities, allowing different update intervals per sensor. Remove `update_interval` from the `micronova:` hub section and add it to each sensor/text_sensor entity instead. [#12226](https://github.com/esphome/esphome/pull/12226)
274
-
275
-
- **Micronova**: The `memory_location` configuration is now restricted to read memory locations (0x00-0x79). If you have values above 0x79, subtract 0x80 (e.g., 0x80 becomes 0x00, 0xA0 becomes 0x20). The `memory_write_location` option on number entities has been removed as it's now calculated automatically. [#12318](https://github.com/esphome/esphome/pull/12318)
276
-
277
-
- **Micronova**: Custom button and sensor entities now require explicit `memory_location` and `address` configuration - the misleading default values have been removed. [#12371](https://github.com/esphome/esphome/pull/12371)
- `update_interval`moved from hub to individual entities - remove from `micronova:` section and add to each sensor/text_sensor
265
+
-`memory_location`now restricted to read locations (0x00-0x79) - subtract 0x80 from values above 0x79
266
+
- `memory_write_location`removed from number entities (now calculated automatically)
267
+
- Custom button/sensor entities now require explicit `memory_location` and `address` configuration
278
268
279
269
- **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. [#9530](https://github.com/esphome/esphome/pull/9530)
0 commit comments