ESPHome 2026.1.0 - January 2026
Release Overview
ESPHome 2026.1.0 delivers one of the most requested features: automatic WiFi roaming. Devices now switch to better access points after connecting, solving the problem of devices getting stuck on distant APs after power outages or AP reboots.
The web server now uses entity names directly in URLs with collision-free encoding, fixing issues that plagued non-ASCII configurations.
This release completes major security transitions: API password authentication has been removed and API encryption is now required, while OTA updates require SHA256 authentication. ESP-IDF is now the default for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3, delivering up to 40% smaller binaries and faster compile times.
Months of performance optimization work culminates here: heap churn reduction plus allocator work enabled moving heap functions from IRAM to flash (saving ~6KB of IRAM on ESP32), removing object_id storage from RAM saves hundreds to thousands of bytes, zero-copy API support delivers ~42% more entities per packet, and ESP32 camera streaming improves by ~10% with lower latency. These optimizations translate directly into headroom for existing devices and reliability for years to come.
LibreTiny platforms (BK72xx, RTL87xx, LN882x) receive thread-safe WiFi, atomics support, and deep sleep that bring them closer to first-class status. New hardware support includes the RD-03D mmWave radar and BTHome v2 parsing for Xiaomi sensors, while Zigbee on nRF52 expands with sensor, binary sensor, and switch support.
Upgrade Checklist
- If you used
api: password:, replace it withapi: encryption: key: - If you rely on Arduino-only components, explicitly set ESP32 framework to
type: arduino - If you used web server URLs directly, note the new name-based URLs and the
/restriction in entity names - If you have lambdas using Fan, Select, Climate, Event, or Light state methods, check the Lambda API Changes below
Building forward without leaving users behind
At the end of 2024, ESPHome completed the transition from ESP-IDF 4.x to ESP-IDF 5.x for ESP32. By early 2025, as we began addressing the higher baseline memory costs on ESP32, something important became clear. Users were telling us that their devices were running out of RAM, firmware builds were failing because flash limits were exceeded, and devices that had worked reliably for years were suddenly unstable or impossible to update.
ESPHome had grown powerful. It had also grown heavy.
That growth did not happen overnight. Since 2019, the ESPHome codebase has steadily expanded. New components, new platforms, and new capabilities were added year after year. The project kept moving forward because it had to. User demand, new hardware, and ecosystem changes did not wait.
What we did not have for a long time was enough capacity to do more than one hard thing at once.
As we started reducing memory usage on ESP32 in early 2025, the work exposed a broader pattern. ESP8266 does not use ESP-IDF, but the ESP32 transition helped us see something we had missed. As development increasingly focused on ESP32, ESP8266 became less sustainable by default. Not because users needed ESP32 features, but because that was where optimization, testing, and attention naturally concentrated. When configurations became tight or devices unstable, the path of least resistance was often to move to ESP32.
Over time, that behavior became normalized.
The ESP-IDF upgrade forced us to step back and examine why so many users had already migrated. The answer was uncomfortable but clear. ESP8266 was not failing because it could not meet user needs. It was failing because we were no longer treating it as a first class platform. By the time runtime heap on ESP8266 routinely dropped below 10k, the outcome was predictable. Even modest real world configurations became fragile, and we eventually had to advise users not to use ESP8266 at all.
That realization marked a real inflection point.
Not because the ESP32 transition was wrong, but because it revealed a dependency we had allowed to form. Progress had quietly become tied to hardware replacement. People were being left behind, not by design, but by momentum. With millions of ESP8266 devices already deployed and likely to remain in homes for years, that was not an acceptable outcome.
What changed was not direction. What changed was scale.
Increased support for the Open Home Foundation changed the equation. With more Home Assistant users supporting the ecosystem through hardware purchases and Home Assistant Cloud subscriptions, ESPHome now has two full time developers and a broader base of part time contributors. That made it possible to keep moving forward while also tackling long standing performance, memory, and sustainability work.
In the middle of 2025, pressure increased again when ESPHome upgraded from Arduino 2 to Arduino 3 for ESP32. The new Arduino core brought important long term improvements, but it also increased baseline RAM and flash usage. On top of the ESP-IDF 5 transition, the impact compounded. Rather than accepting that cost, we made a structural change and moved Arduino to run as an ESP-IDF component.
This gave us tighter control over integration, build behavior, and memory ownership, and allowed us to systematically reduce the overhead introduced by the transition.
Over the following months, work continued in parallel. New components kept landing. New platforms were supported. At the same time, we removed duplication between layers, tightened boundaries, and eliminated unused paths that had quietly accumulated over time. The goal was not just compatibility, but sustainability.
This work was guided by the principles of the Open Home Foundation. Privacy, choice, and sustainability are not abstract ideals. They show up in practical ways, in how long devices remain usable, how often hardware needs to be replaced, and whether users are forced to discard perfectly good devices just to keep their software up to date. We chose sustainability through efficiency.
By the start of 2026, these efforts converged. The ESP-IDF 5 transition, the Arduino 3 integration, and the memory reduction work across ESPHome all fell into place, producing a step change in performance, RAM availability, and flash usage across supported platforms.
The results were tangible.
On ESP8266, available heap increased from under 10k to over 30k in realistic configurations. On a platform that often only has about 45k of heap available when nearly nothing is configured, that shift fundamentally changes what is possible. Devices that were unstable became reliable, and devices that could not be updated regained headroom.
In parallel, we addressed long standing performance and latency issues on ESP32-C3. Bluetooth proxies on this platform were unreliable and frustrating, but through scheduler tuning, memory optimizations, and transport improvements, they are now viable. ESP32-S3 remains the better choice for heavy Bluetooth workloads, but C3 is no longer a dead end.
ESP8266 is no longer a platform we warn users away from. It can continue serving existing deployments well into the future, even as new projects naturally gravitate toward ESP32.
What changed in 2026 is not just memory numbers or latency graphs.
What changed is intent.
ESPHome continues to move forward with new hardware support, new components, and new features, while treating sustainability as a first class requirement rather than an afterthought.
In 2026, ESPHome is faster, leaner, and more durable. It respects the hardware it runs on and the users who already invested in it.
We learned how to move forward without leaving users behind.
WiFi Roaming Support
One of the most requested features for years: ESPHome devices now automatically switch to better access points after connecting (#12809).
This addresses three scenarios where devices get stuck on suboptimal APs:
- AP reboot - Device connects to a distant AP while the nearby one restarts, never switches back
- Power outage - Devices connect to whichever AP recovers first, often the worst option
- Improv provisioning - Bluetooth or serial setup may pick a suboptimal AP
For Bluetooth proxies or Z-Wave adapters, a poor WiFi connection cascades into widespread failures. Until now, the only fix was manually restarting each device.
Post-connect roaming is designed for stationary devices and is intentionally conservative. If you already configured 802.11k or 802.11v roaming, post-connect roaming disables itself automatically. Devices scan up to 3 times after connecting (every 5 minutes), skip scanning when signal is already excellent, and only roam when finding a meaningfully better signal. Users shouldn’t need to understand RSSI thresholds to get reliable WiFi behavior.
# Enabled by default, but can be disabled:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
post_connect_roaming: false # To disableWeb Server Improvements
The web server now uses entity names directly in URLs instead of sanitized object_id values (#12627), fixing long-standing issues with URL collisions. This change is part of the broader effort to eliminate object_id collisions with non-ASCII characters - a key step toward proper UTF-8 support so users can use non-ASCII entity names in Home Assistant without collisions.
Problems Solved:
- UTF-8 name collisions - Different UTF-8 names like
"温度传感器"(temperature) and"湿度传感器"(humidity) previously both became"___", making them indistinguishable - Sub-device collisions - Multiple devices with entities named “Temperature” now have unique URLs like
/sensor/Garage/Temperature
New URL Format:
# Main device entity
/sensor/Temperature
# Sub-device entity
/sensor/Garage/Temperature
# UTF-8 names work correctly
/sensor/温度Old URLs using object_id format (e.g., /sensor/temperature_sensor) continue to work during a deprecation period until 2026.7.0.
Important restrictions:
- Names may not include
/because it is reserved as a URL path separator - Names used in URLs are limited to 120 characters
Brotli Compression for Web Assets
Web server and captive portal assets now use Brotli compression by default, saving significant flash space (#12959):
- captive_portal: 348 bytes saved (24%)
- web_server v2: 1,210 bytes saved (10%)
- web_server v3: 9,420 bytes saved (12%)
Security Enhancements
This release includes significant security improvements that complete long-standing deprecations:
API Password Authentication Removed
Password authentication has been removed from the API component after being deprecated since May 2022 (#12819). Password authentication only verified identity while all data was still transmitted in plaintext. Noise-based encryption provides both authentication and a fully encrypted data stream.
If your configuration still has password:, it will fail to compile. Users must migrate to encryption:
api:
encryption:
key: !secret api_encryption_key
# Generate a key with: openssl rand -base64 32OTA Authentication Upgraded
MD5 authentication support has been removed from OTA updates (#12707). SHA256 is now mandatory, preventing protocol downgrade attacks.
ℹ️ Important
ESPHome versions before 2025.10.0 that use password authentication cannot OTA to devices running 2026.1.0 or later.
If you use multiple systems to install and/or update your ESPHome devices, be sure they’re all up-to-date! If you need to downgrade to a version before 2025.10.0, downgrade to 2025.12.x first, and than OTA to an earlier version.
HMAC-SHA256 Support
A new hmac_sha256 component provides HMAC support using the more secure SHA256 algorithm (#12437).
ESP-IDF Default Framework
This release completes the transition announced in ESPHome 2025.8.0: ESP-IDF is now the default framework for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3 (#12746). Users have been warned about this change for months.
Benefits:
- Up to 40% smaller firmware binaries - More room for features
- Up to 2-3x faster compile times - Quicker development cycles
- Better performance - Improved runtime characteristics
- Access to newer features - Full ESP-IDF capabilities
This release also bumps to ESP-IDF 5.5.2 (#12681).
To continue using Arduino for components that require it (such as heatpumpir or midea), explicitly set type: arduino in your configuration. See the Arduino to ESP-IDF Migration Guide for details.
esp32:
board: esp32dev
framework:
type: arduino # Explicitly use Arduino if neededPerformance & Memory Optimizations
This release represents the culmination of months of work to reduce heap churn and memory usage throughout ESPHome, resulting in significant improvements across all platforms.
Heap Churn Reduction
Systematic elimination of unnecessary dynamic allocations means heap functions (malloc, free, realloc) are now primarily called during setup, not during normal operation. This enabled moving heap functions from IRAM to flash on ESP32, saving ~6KB of IRAM (#12862).
Key optimizations include:
StaticVectorandFixedVectorreplacingstd::vectorwhere sizes are knownconst char*for static strings instead ofstd::string- Pre-allocated buffers instead of dynamic allocation in hot paths
- Stack allocation where possible
- Audio/video components using pre-allocated ring buffers
Object ID RAM Removal
The object_id field is no longer stored in RAM, saving significant memory especially on ESP8266 (#12631):
- ESP8266 (37 entities): ~886 bytes saved (~24 bytes/entity)
- ESP32 (102 entities): ~497 bytes saved (~5 bytes/entity)
- Large setups (800 entities): ~3,600 bytes saved
ESP8266 Memory Optimizations
ESP8266 receives additional memory optimizations:
- Unused waveform code excluded - Saves 596 bytes RAM when
esp8266_pwmis not used (#12690) - Unused Serial objects excluded - Saves 32-64 bytes RAM (#12736)
ESP-IDF 5.5.2 Compiler Improvements
The bump to ESP-IDF 5.5.2 includes compiler improvements that reduce flash usage by ~35KB (~4%) on typical ESP32 configurations (#12681). The libc component alone shrank by ~15KB.
Logging Optimizations
Over 100 components received logging optimizations that combine consecutive log statements into single calls (#12838, #12860, #12856, and many more). Each ESP_LOG* call involves formatting, memory allocation, serial output, and network packet transmission. Combining them significantly reduces event loop blocking and the number of network packets sent to connected clients.
Additional logging improvements:
- Thread-safe logging on host platform - Consistent behavior across platforms (#13010)
- RAII guards for recursion protection - Optimized hot path performance (#13194)
- StaticVector for log listeners - Compile-time sizing eliminates heap allocation (#13196)
Zero-Copy API Protocol
Zero-copy message handling is now complete and enabled by default for all protobuf messages (#12816), eliminating unnecessary memory copies during API communication. Combined with removing object_id from the wire protocol (#12818) and 33% smaller batch items (#13199), this provides:
- ~42% more entities per packet (24 → 34)
- Faster Home Assistant reconnects - especially noticeable for large setups
- Reduced protocol overhead - no longer sending the name twice
- Lower CPU usage - zero-copy eliminates buffer allocations during message processing
- 33% less RAM per queued message - batch items reduced from 12 to 8 bytes
ESP32 Network Latency Reduction
Socket operations on ESP32 now call lwip_read() and lwip_write() directly instead of going through ESP-IDF’s VFS layer (#13179). This reduces latency for API connections, async TCP, and voice assistant components by eliminating unnecessary function pointer dispatches.
PSRAM Workaround Optimization
ESP32 r3.0+ users with PSRAM can now save ~10KB of IRAM by setting minimum_chip_revision: "3.0" (#13074). This disables workarounds for silicon bugs that were fixed in newer chip revisions.
LibreTiny Platform Improvements
LibreTiny platforms (BK72xx, RTL87xx, LN882x) receive significant improvements that bring them closer to first-class platform status:
- Thread-safe logging - Prevents buffer corruption and connection failures when non-main tasks log messages (#13062)
- Cortex-M4 atomics support - Enables proper atomic operations on RTL87xx and LN882x platforms (#13191)
- Thread-safe WiFi - Improved WiFi reliability in multi-threaded scenarios (#13191)
- Board regeneration - Updated board definitions with consolidated platform code (#13191)
- Deep sleep support - BK7231n and BK7231t chips now support deep sleep with configurable timer and GPIO wake-up (#12267)
- BLE stack disabled on BK7231N - Saves ~21KB RAM and ~225KB flash since ESPHome has no BLE support on LibreTiny (#13131)
- LibreTiny 1.9.2 - Fixes GPIO interrupt issues on LN882H that caused HLW8012/BL0937 power sensors to report zero (#13077)
New Hardware Support
RD-03D mmWave Radar
The rd03d component adds support for the Ai-Thinker RD-03D 24GHz millimeter-wave radar module with multi-target trajectory tracking (#12764).
Features:
- Multi-target tracking - Tracks up to 3 simultaneous targets
- Rich sensor data - X, Y coordinates, speed, distance, and angle for each target
BTHome MiThermometer
The bthome_mithermometer platform enables receiving data from Xiaomi Mijia BLE sensors running PVVX firmware with BTHome v2 format (#12635). Starting with PVVX firmware version 6, BTHome v2 is the only supported format.
Air Quality Index Sensor
A new standalone aqi sensor computes Air Quality Index from particulate matter readings (#12203, #12958). It supports both EPA AQI (US) and CAQI (European) calculation methods.
sensor:
- platform: pmsx003
pm_2_5:
id: pm25
pm_10_0:
id: pm10
- platform: aqi
name: "Air Quality Index"
pm_2_5: pm25
pm_10_0: pm10
calculation_type: AQI # or CAQI for European standardZigbee Support for nRF52
ESPHome now supports Zigbee on nRF52 platforms, bringing a new connectivity option alongside WiFi, Bluetooth, and Thread:
- Binary sensor support - Expose GPIO states via Zigbee (#11535)
- Sensor support - Expose ESPHome sensors via Zigbee’s Analog Input cluster with automatic unit mapping (#12187)
- Switch support - Control ESPHome switches via Zigbee as binary output (#13083)
wipe_on_boot: once- Wipe network settings only on first boot, preserving connections after OTA updates- Framework version support - Configure nRF-SDK version with experimental support for SDK 2.9.2 and 3.2.0 (#12489)
OTA Rollback Support
ESP32 devices using ESP-IDF now support automatic OTA rollback (#12460). When enabled (the default), the bootloader automatically rolls back to the previous firmware if the device crashes or resets before the boot is marked as successful.
This feature works with the safe_mode component - after a successful boot (determined by the safe_mode boot timer), the firmware is marked as valid. If the device crashes before that point, it automatically rolls back.
Note: Your bootloader must be compiled with the appropriate sdkconfig. If upgrading from an older bootloader, a serial flash may be required.
Platform & Component Improvements
AC Dimmer ESP-IDF Support
The ac_dimmer component now supports ESP-IDF framework in addition to Arduino (#7072).
DSMR ESP-IDF Support
The dsmr component now supports ESP-IDF framework and fixes multiple bugs with the DSMR parsing (#11036).
ESP32 Camera Performance
The esp32_camera component received significant performance improvements (#12601):
- ~10% more frames delivered during streaming (510-523 vs 467-474 per 60 seconds)
- ~50% reduction in idle CPU usage by skipping work when no frames are pending
- Lower latency through burst frame delivery and immediate wake signals instead of polling
Water Heater Component
ESPHome now includes a dedicated water_heater entity type for controlling water heaters, boilers, and similar hot water appliances (#12498, #12516, #12511).
- Template platform - Full control via automations and lambdas
- Multiple operating modes - Support for eco, gas, and custom modes
- Web server support - Control and monitor via the built-in web interface
ℹ️ Note
Home Assistant integration for water heater entities is not yet available. See home-assistant/core#159201 for progress.
water_heater:
- platform: template
name: "Boiler"
supported_modes:
- eco
- gas
visual:
min_temperature: 10.0
max_temperature: 85.0Experimental: IR/RF Proxy Component
⚠️ Warning
This component is experimental and the API is likely to change in future releases.
The new ir_rf_proxy component provides an API-accessible interface for transmitting and receiving infrared and RF signals, bridging Home Assistant with ESPHome’s existing remote_receiver and remote_transmitter components (#12985).
Key Features:
- Home Assistant integration - IR/RF transmission and reception exposed through the native API
- Flexible hardware support - Works with both infrared and RF configurations
- Raw timing arrays - Maximum flexibility with minimal on-device processing
- Bidirectional operation - Define multiple proxy instances for transmit and receive
This component is part of a broader effort to make IR & RF easier to use from within Home Assistant. A new experimental infrared entity platform (#13129) provides the underlying infrastructure.
ir_rf_proxy:
- name: "Living Room IR Blaster"
remote_transmitter_id: ir_tx
- name: "Bedroom IR Receiver"
remote_receiver_id: ir_rxAdditional Features
- UART event component - Trigger ESPHome events when receiving specific UART sequences (#11765)
- Templatable MQTT topics - Dynamic state and command topics via lambdas (#12441)
- Update check action - Trigger HTTP-based update checks from automations (#12415)
- SPI flexible data rates - Any achievable data rate within 5% can now be specified (#12753)
- Hub75 improvements - Rotation support, expanded bit depths (4-12), and brightness action (#12674, #12521)
- ESP32 CAN listen-only mode - Passive bus monitoring without sending ACK signals (#13084)
- MMC5603 temperature compensation - Eliminates thermal variation in magnetometer readings (#12556)
- MHZ19 configurable detection range - Set detection range at setup or dynamically via action (#12677)
- ESP32 RMT LED strip inverted logic - Support for simple transistor-based level shifters (#12825)
- ESP32 Hosted HTTP updates - Fetch coprocessor firmware from remote manifests (#13090)
- Thermostat boolean heat_cool_mode - Simplified configuration without requiring automations (#13069)
Breaking Changes
Platform Changes
ESP32: ESP-IDF is now the default framework for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3. Users who relied on the implicit Arduino default must now explicitly specify
type: arduinoif they need Arduino-specific features or have components that don’t yet support ESP-IDF (such asheatpumpir,midea, orlightwithwledeffect). #12746ESP8266: Unused Arduino Serial objects are now excluded from builds. Users who directly use
SerialorSerial1in lambdas must now explicitly enable them withenable_serial: trueorenable_serial1: trueunder theesp8266:configuration. Most users are unaffected as Serial usage typically goes through theuartcomponent. #12736ESP8266: Unused waveform code is now excluded from builds when
esp8266_pwmis not used, saving 596 bytes of RAM. Users who directly use Arduino waveform functions in lambdas must add anesp8266_pwmcomponent to their configuration. #12690
Security Changes
API: Password authentication has been removed after being deprecated since May 2022. Configurations with
password:will fail to build. Users must migrate toencryption:with a key generated viaopenssl rand -base64 32. #12819api: encryption: key: !secret api_encryption_keyOTA: ESPHome versions before 2025.10.0 cannot perform OTA updates to devices running this version. MD5 authentication support has been removed; SHA256 is now mandatory. #12707
Component Changes
Sprinkler: Internal latching valve support has been removed. The configuration variables
pump_pulse_duration,pump_off_switch_id,pump_on_switch_id,valve_pulse_duration,valve_off_switch_id, andvalve_on_switch_idare no longer available. Users with latching valves must now use an H-Bridge switch with the standardvalve_switch_idand/orpump_switch_idconfiguration. #12603Web Server: URLs now use entity names instead of sanitized
object_idvalues. Old URLs (e.g.,/sensor/temperature_sensor) still work but are deprecated and will be removed in 2026.7.0. Additionally, the/character is no longer allowed in entity, device, or area names (reserved as URL path separator), and names are limited to 120 characters maximum. #12627ESP32 Hosted: The update configuration now requires an explicit
type:field. Existing embedded mode configurations must addtype: embedded. A newtype: httpmode allows fetching firmware from remote manifests. #13090HM3301: The AQI sensor configuration has been refactored into a shared
aqicomponent. Existingaqi:configurations underhm3301continue to work but the implementation is now shared withpmsx003. #12203MMC5603: The
auto_set_resetoption is now enabled by default to eliminate temperature-related drift. This reduces maximum read frequency from 150Hz to 75Hz. Users requiring high-frequency reads can setauto_set_reset: false. #12556Ultrasonic: The
timeoutoption is deprecated and will be removed in 2026.8.0. A fixed 80ms measurement timeout is now used to fix reliability issues with some SR04 sensors that have a 12.3ms delay before sending pulses. #12897
Behavior Changes
API: The
on_client_disconnectedtrigger now fires after the client is removed from the connection list, soapi.connectedcorrectly reflects the true connection state. Users who addeddelay: 1msworkarounds can remove them. Users who relied on the disconnecting client still being counted may need to adjust their logic. #13088Display Drivers: Multiple display drivers now correctly honor clipping for
fill()andclear()operations. Code that relied on the previous (incorrect) behavior where fills ignored clipping regions may produce different results. #12808Build Info: The
compilation_timefield in the native API now correctly updates on every compile (previously only updated whenmain.cppwas rebuilt). The version text sensor format has changed to include config hash. #12425
Deprecations
- custom_components folder: The
custom_componentsfolder is deprecated and will be removed in 2026.6.0. Users should migrate toexternal_componentsinstead. A warning appears if the folder exists and contains files. #12552
Lambda API Changes
Users with lambdas that access component state should note the following changes. These methods now return StringRef instead of const char*, which is safer but requires minor syntax changes:
Fan:
get_preset_mode()returnsStringRef. Use.empty()instead of!= nullptrchecks, and==for string comparison instead ofstrcmp(). #13092Select:
current_option()returnsStringRef. Use.empty()instead of!= nullptrchecks. #13095Climate:
get_custom_fan_mode()andget_custom_preset()returnStringRef. Usehas_custom_fan_mode()or.empty()instead of!= nullptrchecks. #13103Event:
get_last_event_type()returnsStringRef. Usehas_event()or.empty()instead of!= nullptrchecks. #13104Light:
get_effect_name()returnsStringRefinstead ofstd::string. #13105
Breaking Changes for Developers
Application API:
get_compilation_time()deprecated (removal 2026.7.0),get_compilation_time_ref()removed. Useget_build_time()(Unix timestamp),get_config_hash(),get_config_version_hash(), orget_build_time_string(buffer)instead. #12425Fan API:
Fan::get_preset_mode()returnsStringRefinstead ofconst char*. Returns empty ref when no preset is set. Usehas_preset_mode()or.empty()instead of nullptr checks. Newapply_preset_mode_(call)helper for derived classes. #13092Select API:
Select::current_option()returnsStringRefinstead ofconst char*. Returns empty ref when no state is set. #13095Climate API:
Climate::get_custom_fan_mode()andClimate::get_custom_preset()returnStringRefinstead ofconst char*. NewStringRefoverloads forset_custom_fan_mode_()andset_custom_preset_()protected setters. #13103Event API:
Event::get_last_event_type()returnsStringRefinstead ofconst char*. Newhas_event()method added. #13104Light API:
LightEffect::get_name()returnsStringRefinstead ofconst char*.LightState::get_effect_name()returnsStringRefinstead ofstd::string. Newstr_equals_case_insensitive(StringRef, StringRef)helper inhelpers.h. #13105ESP8266 Serial: External components using Arduino
SerialorSerial1directly must callenable_serial()orenable_serial1()fromesphome.components.esp8266.constin theirto_code()function. #12736
For detailed migration guides and API documentation, see the ESPHome Developers Documentation.
Full list of changes
New Features
- [esp32] Add OTA rollback support esphome#12460 by @swoboda1337 (new-feature)
- [hub75] Add set_brightness action esphome#12521 by @stuartparmenter (new-feature)
- [update] Add check action to trigger update checks esphome#12415 by @rogerfachini (new-feature)
- [deep_sleep] Deep sleep for BK72xx esphome#12267 by @szupi-ipuzs (new-feature)
- [mmc5603] enable AUTO_SR_en to compensate for temperature drift esphome#12556 by @pixelgrb (new-feature) (breaking-change)
- [aqi, hm3301, pmsx003] Air Quality Index improvements esphome#12203 by @jasstrong (new-component) (new-feature) (breaking-change)
- [water_heater] (1/4) Implement API/Core/component for new water_heater component esphome#12498 by @dhoeben (new-component) (new-feature)
- Add Event Component to UART esphome#11765 by @eoasmxd (new-feature) (new-platform)
- [bme68x_bsec2] add
id:to allow extending esphome#12649 by @ssieb (new-feature) - Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors esphome#12635 by @nagyrobi (new-component) (new-feature) (new-platform)
- [spi] Allow any achievable data rate esphome#12753 by @tuct (new-feature)
- [mhz19] Make detection range configurable esphome#12677 by @jvanderneutstulen (new-feature)
- [water_heater] (2/4) Implement template for new water_heater component esphome#12516 by @dhoeben (new-feature)
- [esp32_rmt_led_strip] Support inverted logic esphome#12825 by @Frederic98 (new-feature)
- [water_heater] (4/4) Implement tests for new water_heater component esphome#12517 by @dhoeben (new-feature)
- [hub75] Bump esp-hub75 version to 0.2.2 esphome#12674 by @stuartparmenter (new-feature)
- [nrf52,zigbee] add support for binary_input esphome#11535 by @tomaszduda23 (new-component) (new-feature)
- [dsmr] Remove dependency on Arduino framework. Various bug fixes. Add missing sensors. esphome#11036 by @PolarGoose (new-feature)
- [cc1101] Add freq_offset to on_packet trigger esphome#13008 by @swoboda1337 (new-feature)
- [rd03d] Add Ai-Thinker RD-03D mmWave radar component esphome#12764 by @jasstrong (new-component) (new-feature) (new-platform)
- [aqi] Implement a sensor that computes AQI esphome#12958 by @jasstrong (new-feature) (new-platform)
- [nrf52, zigbee] Add sensor esphome#12187 by @tomaszduda23 (new-feature)
- [wifi] Add basic post-connect roaming support for stationary devices esphome#12809 by @bdraco (new-feature)
- [web_server][captive_portal] Add Brotli compression (saves ~11KB flash when using local) esphome#12959 by @bdraco (new-feature)
- [logger] Add thread-safe logging support for LibreTiny platform esphome#13062 by @bdraco (new-feature)
- [thermostat] Allow
heat_cool_modewithout an automation esphome#13069 by @kbx81 (new-feature) - [mqtt] Include session_present and reason parameters in connection callbacks esphome#12413 by @Rapsssito (new-feature)
- [ac_dimmer] Added support for ESP-IDF (5+) esphome#7072 by @latonita (new-feature)
- [esp32_hosted] Add HTTP-based coprocessor firmware update support esphome#13090 by @swoboda1337 (new-feature) (breaking-change)
- [water_heater] (3/4) Implement web_server for new water_heater component esphome#12511 by @dhoeben (new-feature)
- [esp32_can] Add listen-only mode to esp32_can component esphome#13084 by @mikaabra (new-feature)
- [nrf52,sdk] Add framework version support esphome#12489 by @tomaszduda23 (new-feature)
- [tuya] add color_type_lowercase option esphome#13101 by @lullius (new-feature)
- [mqtt] templatable state and command topics esphome#12441 by @Rapsssito (new-feature)
- [ir_rf_proxy] New component esphome#12985 by @kbx81 (new-component) (new-feature)
- [nrf52,zigbee] Add binary output as switch esphome#13083 by @tomaszduda23 (new-feature)
- [epaper_spi] Add Waveshare 2.13v3 esphome#13117 by @clydebarrow (new-feature)
New Components
- Add hmac-sha256 support esphome#12437 by @dwmw2 (new-component)
- [aqi, hm3301, pmsx003] Air Quality Index improvements esphome#12203 by @jasstrong (new-component) (new-feature) (breaking-change)
- [water_heater] (1/4) Implement API/Core/component for new water_heater component esphome#12498 by @dhoeben (new-component) (new-feature)
- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors esphome#12635 by @nagyrobi (new-component) (new-feature) (new-platform)
- [nrf52,zigbee] add support for binary_input esphome#11535 by @tomaszduda23 (new-component) (new-feature)
- [rd03d] Add Ai-Thinker RD-03D mmWave radar component esphome#12764 by @jasstrong (new-component) (new-feature) (new-platform)
- [infrared] Implement experimental API/Core/component for new component/entity type esphome#13129 by @kbx81 (new-component)
- [ir_rf_proxy] New component esphome#12985 by @kbx81 (new-component) (new-feature)
New Platforms
- Add Event Component to UART esphome#11765 by @eoasmxd (new-feature) (new-platform)
- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors esphome#12635 by @nagyrobi (new-component) (new-feature) (new-platform)
- [rd03d] Add Ai-Thinker RD-03D mmWave radar component esphome#12764 by @jasstrong (new-component) (new-feature) (new-platform)
- [aqi] Implement a sensor that computes AQI esphome#12958 by @jasstrong (new-feature) (new-platform)
Breaking Changes
- Add build info to image esphome#12425 by @dwmw2 (breaking-change)
- [core] Deprecate custom_components folder esphome#12552 by @swoboda1337 (breaking-change)
- [mmc5603] enable AUTO_SR_en to compensate for temperature drift esphome#12556 by @pixelgrb (new-feature) (breaking-change)
- [aqi, hm3301, pmsx003] Air Quality Index improvements esphome#12203 by @jasstrong (new-component) (new-feature) (breaking-change)
- [sprinkler] Remove internal latching valve support esphome#12603 by @kbx81 (breaking-change)
- [esp32] Breaking Change: Change default framework to ESP-IDF esphome#12746 by @bdraco (breaking-change)
- Fix display driver fill implementations to honor clipping correctly esphome#12808 by @stuartparmenter (breaking-change)
- [ota] Remove MD5 authentication support esphome#12707 by @bdraco (breaking-change)
- [web_server] Fix URL collisions with UTF-8 names and sub-devices esphome#12627 by @bdraco (breaking-change)
- [api] Remove deprecated password authentication esphome#12819 by @bdraco (breaking-change)
- [ultrasonic] Fix timeout issues and deprecate timeout option esphome#12897 by @swoboda1337 (breaking-change)
- [esp8266] Add enable_serial/enable_serial1 helpers to exclude unused Serial objects esphome#12736 by @bdraco (breaking-change)
- [api] Fire on_client_disconnected trigger after removing client from list esphome#13088 by @bdraco (breaking-change)
- [esp32_hosted] Add HTTP-based coprocessor firmware update support esphome#13090 by @swoboda1337 (new-feature) (breaking-change)
- [fan] Return StringRef from get_preset_mode() for safety and modern API esphome#13092 by @bdraco (breaking-change)
- [select] Return StringRef from current_option() esphome#13095 by @bdraco (breaking-change)
- [light] Return StringRef from LightEffect::get_name() and LightState::get_effect_name() esphome#13105 by @bdraco (breaking-change)
- [event] Return StringRef from get_last_event_type() esphome#13104 by @bdraco (breaking-change)
- [climate] Return StringRef from get_custom_fan_mode() and get_custom_preset() esphome#13103 by @bdraco (breaking-change)
- [hub75] Bump esp-hub75 version to 0.3.0 esphome#13243 by @stuartparmenter (breaking-change)
All changes
- [esp32_ble_client] Use stack-based MAC formatting in auth logging esphome#12393 by @bdraco
- [core] Add constexpr parse_hex_char helper and simplify parse_hex esphome#12394 by @bdraco
- [text] Add integration tests for text command API esphome#12401 by @bdraco
- [climate] Save 48 bytes per entity by conditionally compiling visual overrides esphome#12406 by @bdraco
- [api] Release prologue memory after noise handshake completes esphome#12412 by @bdraco
- Add USE_SHA256 define to sha256 component to enable tests esphome#12457 by @dwmw2
- Add HMAC-MD5 component tests esphome#12459 by @dwmw2
- Add host platform support to MD5 component esphome#12458 by @dwmw2
- Add hmac-sha256 support esphome#12437 by @dwmw2 (new-component)
- Add FNV-1a hash functions esphome#12502 by @dwmw2
- [esp32] Fix serial logging on h2, c2 & c61 esphome#12522 by @zigboi
- [esp32] improve types and variable naming esphome#12423 by @ximex
- [climate] Improve temperature unit regex esphome#12032 by @ximex
- [openthread] channel range, fix typo, use C++17 nested namespace syntax esphome#12422 by @ximex
- [spi] Use ESP-IDF driver for ESP32 Arduino esphome#12420 by @swoboda1337
- [http_request] Use ESP-IDF for ESP32 Arduino esphome#12428 by @swoboda1337
- [esp32] Remove Arduino-specific code from core.cpp esphome#12501 by @swoboda1337
- [ledc,mqtt,resampler] Remove unnecessary ESP-IDF framework restrictions esphome#12442 by @swoboda1337
- [esp32] Add OTA rollback support esphome#12460 by @swoboda1337 (new-feature)
- [hub75] Add set_brightness action esphome#12521 by @stuartparmenter (new-feature)
- [update] Add check action to trigger update checks esphome#12415 by @rogerfachini (new-feature)
- [time] Convert to C++17 nested namespace syntax esphome#12463 by @bdraco
- [factory_reset] Optimize memory by storing interval as uint16_t seconds esphome#12462 by @bdraco
- [esphome] Improve OTA field alignment to save 4 bytes on 32-bit esphome#12461 by @bdraco
- [core] Refactor str_snake_case and str_sanitize to use constexpr helpers esphome#12454 by @bdraco
- [deep_sleep] Deep sleep for BK72xx esphome#12267 by @szupi-ipuzs (new-feature)
- [nextion] Use ESP-IDF for ESP32 Arduino esphome#9429 by @edwardtfn
- [esp32] Store preference keys as uint32_t, convert to string only at NVS boundary esphome#12494 by @bdraco
- [libretiny] Store preference keys as uint32_t, convert to string only at FlashDB boundary esphome#12500 by @bdraco
- [text] Avoid string copies in callbacks by passing const ref esphome#12504 by @bdraco
- [spi] Add SPIInterface stub for clang-tidy on unsupported platforms esphome#12532 by @swoboda1337
- [nextion] Fix clang-tidy error on Zephyr for HTTPClient esphome#12538 by @swoboda1337
- [ci] Check changed headers in clang-tidy when using –changed esphome#12540 by @swoboda1337
- [select] Eliminate string allocation in state callbacks esphome#12505 by @bdraco
- [esp32] Dynamically embed managed component server certificates esphome#12509 by @swoboda1337
- Add build info to image esphome#12425 by @dwmw2 (breaking-change)
- [esp32][libretiny] Avoid duplicate snprintf when syncing preferences esphome#12542 by @bdraco
- [wifi] Reduce scan logging to prevent blocking loop during connection esphome#12544 by @bdraco
- [libretiny] Fix millis() ambiguity on BK72XX esphome#12534 by @swoboda1337
- [api] Remove unused force parameter from encode_message esphome#12551 by @bdraco
- [socket] Refactor socket implementations for memory efficiency and code quality esphome#12550 by @bdraco
- [core] Deprecate custom_components folder esphome#12552 by @swoboda1337 (breaking-change)
- [mmc5603] enable AUTO_SR_en to compensate for temperature drift esphome#12556 by @pixelgrb (new-feature) (breaking-change)
- [aqi, hm3301, pmsx003] Air Quality Index improvements esphome#12203 by @jasstrong (new-component) (new-feature) (breaking-change)
- [dht] Fix “Falling edge for bit 39 failed!” for Sonoff THS01 esphome#9225 by @rguca
- [wifi] Replace optional with sentinel values to reduce RAM and clarify API esphome#12446 by @bdraco
- [esp32_ble] Add stack-based UUID formatting to avoid heap allocations esphome#12510 by @bdraco
- [climate] Add zero-copy support for API custom fan mode and preset commands esphome#12402 by @bdraco
- [ota] Replace std::function callbacks with listener interface esphome#12167 by @bdraco
- [alarm_control_panel] Remove redundant per-state callbacks esphome#12171 by @bdraco
- [fan] Add zero-copy support for API preset mode commands esphome#12404 by @bdraco
- [sen5x][sgp4x] Move configuration keys from SEN5x and SGP4x to const.py esphome#12567 by @mebner86
- [core] Migrate entities to use lazy callbacks esphome#12580 by @bdraco
- [tests] Fix race condition in alarm control panel state transitions test esphome#12581 by @bdraco
- [text_sensor] Avoid string copies in callbacks by passing const ref esphome#12503 by @bdraco
- [api] Add zero-copy support for noise encryption key requests esphome#12405 by @bdraco
- [zwave_proxy] Add missing USE_API guards for clang-tidy esphome#12590 by @bdraco
- [const] Add CONF_ON_DATA and consolidate definitions esphome#12595 by @FredM67
- [sprinkler] Squash a few bugs + minor optimization esphome#12436 by @kbx81
- [syslog] Use C++17 nested namespace syntax esphome#12594 by @bdraco
- Add nix files to gitignore esphome#12604 by @polyfloyd
- [syslog] Eliminate heap allocations in log path esphome#12589 by @bdraco
- [api] Add zero-copy support for Home Assistant state response messages esphome#12585 by @bdraco
- [web_server] Replace str_sprintf with stack buffers esphome#12592 by @bdraco
- [water_heater] (1/4) Implement API/Core/component for new water_heater component esphome#12498 by @dhoeben (new-component) (new-feature)
- [logger] RP2040: Use write() with known length instead of println() esphome#12615 by @bdraco
- [thermostat] Enhance timer behavior for immediate response to duration changes esphome#12610 by @clinta
- [codegen] Add static storage class to global variables for size optimization esphome#12616 by @bdraco
- [api] Use union for iterators to reduce APIConnection size by ~16 bytes esphome#12563 by @bdraco
- [esp32_ble] Avoid string allocation when setting BLE device name esphome#12579 by @bdraco
- [esp32_camera] Reduce loop overhead and improve frame latency with wake_loop_threadsafe esphome#12601 by @bdraco
- [core] Add zero-allocation object_id methods esphome#12578 by @bdraco
- [core] Remove deprecated config options from before 2025 esphome#12622 by @swoboda1337
- [thermostat] Optimizations to reduce binary size esphome#12621 by @kbx81
- [sprinkler] Remove internal latching valve support esphome#12603 by @kbx81 (breaking-change)
- [esp32] Remove remaining using_esp_idf checks esphome#12623 by @swoboda1337
- [safe_mode] Defer preference sync in clean_rtc to avoid blocking event loop esphome#12625 by @bdraco
- [web_server] Make internal JSON helper methods private esphome#12624 by @bdraco
- [core] Move comment to PROGMEM on ESP8266 esphome#12554 by @bdraco
- [web_server] Use stack buffers for value formatting to reduce flash usage esphome#12575 by @bdraco
- Add Event Component to UART esphome#11765 by @eoasmxd (new-feature) (new-platform)
- [logger] Zephyr: Use k_str_out() with known length instead of printk() esphome#12619 by @bdraco
- [logger] Host: Use fwrite() with explicit length and remove platform branching esphome#12628 by @bdraco
- [core] Deprecate get_object_id() and migrate remaining usages to get_object_id_to() esphome#12629 by @bdraco
- [alarm_control_panel] Use C++17 nested namespace and remove unused include esphome#12662 by @bdraco
- [text_sensor] Return state by const reference to avoid copies esphome#12661 by @bdraco
- [wifi] Avoid unnecessary string copy in failed connection logging esphome#12659 by @bdraco
- [web_server] Move HTTP header strings to flash on ESP8266 esphome#12668 by @bdraco
- [web_server] Use C++17 nested namespace syntax esphome#12663 by @bdraco
- [wifi_info] Reduce heap allocations in text sensor formatting esphome#12660 by @bdraco
- [esp8266] Native OTA backend to reduce Arduino dependencies esphome#12675 by @bdraco
- [core] Add format_hex_to helper for zero-allocation hex formatting esphome#12670 by @bdraco
- [udp] Use stack buffer for listen address logging in dump_config esphome#12667 by @bdraco
- [wifi] Use StringRef and std::span in WiFiConnectStateListener to avoid allocations esphome#12672 by @bdraco
- [wifi] Eliminate heap allocations in dump_config logging esphome#12664 by @bdraco
- [ethernet] Eliminate heap allocations in dump_config logging esphome#12665 by @bdraco
- [core] Replace USE_ESP_IDF with USE_ESP32 across components esphome#12673 by @swoboda1337
- [internal_temperature] Add ESP32-C5 support esphome#12713 by @Swaptor
- [esp32] Bump to ESP-IDF 5.5.2, Arduino 3.3.5, platform 55.3.35 esphome#12681 by @swoboda1337
- [ota] Use precision format specifier for auth logging esphome#12706 by @bdraco
- [usb_host] sort esp32 variants esphome#12720 by @ximex
- [tests] fix typo mipi tests esphome#12715 by @ximex
- [tests] improve mipi_spi variable naming esphome#12716 by @ximex
- Fixed bug displaying negative numbers in PVVX MiThermometer Display esphome#12735 by @hsand
- [cli] Report program path on host esphome#12743 by @clydebarrow
- [esp32] Breaking Change: Change default framework to ESP-IDF esphome#12746 by @bdraco (breaking-change)
- [esp32] Add IDF framework source for Arduino builds esphome#12731 by @swoboda1337
- Update dallas_temp.cpp esphome#12695 by @bakroistvan
- [bme68x_bsec2] add
id:to allow extending esphome#12649 by @ssieb (new-feature) - [ethernet_info] Eliminate heap allocations in DNS text sensor esphome#12756 by @bdraco
- [core] Add format_hex_pretty_to buffer helper and reduce code duplication esphome#12687 by @bdraco
- [core] Make LockFreeQueue more widely available esphome#12766 by @clydebarrow
- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors esphome#12635 by @nagyrobi (new-component) (new-feature) (new-platform)
- [mipi_spi] Use stack buffer for hex formatting in verbose logging esphome#12778 by @bdraco
- Fix display driver fill implementations to honor clipping correctly esphome#12808 by @stuartparmenter (breaking-change)
- [mipi_dsi] Use stack buffer for hex formatting in very verbose logging esphome#12776 by @bdraco
- [mipi_rgb] Use stack buffer for hex formatting in init sequence logging esphome#12777 by @bdraco
- [mitsubishi] Use stack buffer for hex formatting in verbose logging esphome#12779 by @bdraco
- [modbus] Use stack buffer for hex formatting in verbose logging esphome#12780 by @bdraco
- [pn532_spi] Replace format_hex_pretty with stack-based format_hex_pretty_to esphome#12782 by @bdraco
- [qspi_dbi] Replace format_hex_pretty with stack-based format_hex_pretty_to esphome#12783 by @bdraco
- [seeed_mr60bha2] Replace format_hex_pretty with stack-based format_hex_pretty_to esphome#12784 by @bdraco
- [seeed_mr60fda2] Use stack-based format_hex_pretty_to for verbose logging esphome#12785 by @bdraco
- [zwave_proxy] Use stack-based format_hex_pretty_to for very verbose logging esphome#12786 by @bdraco
- [ee895] Use stack-based format_hex_to for verbose logging esphome#12789 by @bdraco
- [mopeka_std_check] Use stack-based format_hex_pretty_to for very verbose logging esphome#12790 by @bdraco
- [espnow] Use stack buffer for hex formatting in verbose logging esphome#12738 by @bdraco
- [i2c] Use stack buffer for hex formatting in verbose logging esphome#12739 by @bdraco
- [hlk_fm22x] Use stack buffer for hex formatting in verbose logging esphome#12740 by @bdraco
- [esp32_ble_tracker] Use stack buffer for hex formatting in very verbose logging esphome#12741 by @bdraco
- [ethernet] Use stack buffer for hex formatting in very verbose logging esphome#12742 by @bdraco
- [ble_client] Use stack buffer for hex formatting in very verbose logging esphome#12744 by @bdraco
- [light] Use StringRef to avoid allocation in JSON effect name serialization esphome#12758 by @bdraco
- [ota] Remove MD5 authentication support esphome#12707 by @bdraco (breaking-change)
- [xiaomi_*] Use stack-based hex formatting for bindkey logging esphome#12798 by @bdraco
- [usb_cdc_acm] Use stack-based hex formatting in verbose logging esphome#12792 by @bdraco
- [spi] Allow any achievable data rate esphome#12753 by @tuct (new-feature)
- [api] Auto-generate StringRef for incoming API string fields esphome#12648 by @bdraco
- [core] Remove unused USE_ESP32_FRAMEWORK_ARDUINO ifdefs esphome#12813 by @swoboda1337
- [ultrasonic] Use interrupt-based measurement for reliability esphome#12617 by @swoboda1337
- [web_server] Fix URL collisions with UTF-8 names and sub-devices esphome#12627 by @bdraco (breaking-change)
- Update webserver local assets to 20260102-230255 esphome#12817 by @esphomebot
- [api] Auto-generate zero-copy pointer access for incoming API bytes fields esphome#12654 by @bdraco
- [api] Use StringRef in handle_action_response to avoid temporary string esphome#12655 by @bdraco
- [packet_transport] Use stack-based format_hex_pretty_to for logging esphome#12791 by @bdraco
- [api] Use pointer to FixedVector for siren tones field esphome#12657 by @bdraco
- [voice_assistant] Use zero-copy buffer access for audio data esphome#12656 by @bdraco
- [ld2410][ld2412][ld2450] Use stack buffers for hex logging esphome#12688 by @bdraco
- [api] Use StringRef in send_action_response and send_execute_service_response esphome#12658 by @bdraco
- [mqtt] Avoid heap allocations when logging IP addresses esphome#12686 by @bdraco
- [tuya] Use stack buffers for hex logging to avoid heap allocations esphome#12689 by @bdraco
- [udp] Avoid heap allocations when joining multicast groups esphome#12685 by @bdraco
- [wifi] Use wifi_ssid_to() to avoid heap allocations in automation and connection checks esphome#12678 by @bdraco
- [captive_portal] Use stack buffer for IP address logging in DNS server esphome#12679 by @bdraco
- [esp32_improv] Use stack buffer for URL formatting to avoid heap allocation esphome#12682 by @bdraco
- [wifi] Use stack buffers for IP address logging to avoid heap allocations esphome#12680 by @bdraco
- [esp32] Add minimum_chip_revision setting and log chip revision at startup esphome#12696 by @bdraco
- [cse7766] Use stack buffer for hex formatting in debug logging esphome#12732 by @bdraco
- [wifi] Use precision format specifier for SSID logging to avoid stack copy esphome#12704 by @bdraco
- [shelly_dimmer] Use stack buffer for hex formatting in command logging esphome#12721 by @bdraco
- [remote_base] Use stack buffer for hex formatting in mirage protocol logging esphome#12722 by @bdraco
- [remote_base] Use stack buffer for hex formatting in haier protocol logging esphome#12723 by @bdraco
- [rc522] Use stack buffers for hex formatting in tag logging esphome#12725 by @bdraco
- [opentherm] Replace heap-allocating format calls with printf format specifiers in debug_error esphome#12726 by @bdraco
- [a01nyub] Use stack buffer for hex formatting in error logging esphome#12727 by @bdraco
- [a02yyuw] Use stack buffer for hex formatting in error logging esphome#12728 by @bdraco
- [jsn_sr04t] Use stack buffer for hex formatting in error logging esphome#12729 by @bdraco
- [sonoff_d1] Use stack buffer for hex formatting in logging esphome#12730 by @bdraco
- [nextion] Use stack buffers for hex formatting in upload logging esphome#12733 by @bdraco
- [epaper_spi] Use stack buffer for hex formatting in command logging esphome#12734 by @bdraco
- [esp32_improv] Use stack buffer for hex formatting in verbose logging esphome#12737 by @bdraco
- [gpio] Avoid heap allocation in dump_summary esphome#12760 by @bdraco
- [core] Remove object_id RAM storage - no longer in hot path after #12627 esphome#12631 by @bdraco
- [api] Remove object_id from API protocol - clients compute it from name #12698 esphome#12818 by @bdraco
- [api] Use stack-based format_hex_pretty_to for packet logging macros esphome#12788 by @bdraco
- [kuntze] Use stack buffer for hex formatting in verbose logging esphome#12775 by @bdraco
- [xiaomi_ble] Use stack-based hex formatting in verbose logging esphome#12793 by @bdraco
- [hte501] Use stack-based hex formatting in verbose logging esphome#12794 by @bdraco
- [addressable_light] Use StringRef to avoid allocation when saving effect name esphome#12759 by @bdraco
- [tee501] Use stack-based hex formatting in verbose logging esphome#12795 by @bdraco
- [gps] add icon for HDOP and use correct state_class for longitude and… esphome#12718 by @ximex
- [vbus] Use stack-based hex formatting in verbose logging esphome#12796 by @bdraco
- [uponor_smatrix] Use stack-based hex formatting in verbose logging esphome#12797 by @bdraco
- [core] Add CONF_ON_START (#12439) esphome#12440 by @robertklep
- [api] Enable zero-copy bytes SOURCE_BOTH messages esphome#12816 by @bdraco
- [esp8266] Exclude unused waveform code to save ~596 bytes RAM esphome#12690 by @bdraco
- [tests] Remove reserved / character from entity names in component tests esphome#12820 by @bdraco
- [uart] make sure that all variables are initialized esphome#12823 by @tomaszduda23
- [api] Remove deprecated password authentication esphome#12819 by @bdraco (breaking-change)
- [nrf52, zephyr] move nrf52-specific code to nrf52 component esphome#12582 by @mrk-its
- [api] Fix KeyError when running logs after password removal esphome#12831 by @bdraco
- [mhz19] Make detection range configurable esphome#12677 by @jvanderneutstulen (new-feature)
- [mhz19] Refactor Actions to Parented esphome#12837 by @jvanderneutstulen
- Fix comment typos esphome#12828 by @jhollowe
- [espnow] Use stack-based MAC formatting and remove dead code esphome#12836 by @bdraco
- [wifi] Combine scan result log lines to reduce loop blocking with many matching APs esphome#12830 by @bdraco
- [core] Fix startup delay from setup timing logs when console connected esphome#12832 by @bdraco
- [wifi] Use stack-based MAC formatting in ESP8266 and IDF event handlers esphome#12834 by @bdraco
- [image] Use alternative version of CairoSVG on Windows esphome#12811 by @clydebarrow
- [absolute_humidity] Combine log statements to reduce loop blocking esphome#12838 by @bdraco
- [nrf52] add printk use case documentation esphome#12839 by @tomaszduda23
- [water_heater] (2/4) Implement template for new water_heater component esphome#12516 by @dhoeben (new-feature)
- [esp32_ble_tracker] Combine log statements to reduce loop blocking esphome#12860 by @bdraco
- [http_request] Combine log statements to reduce loop blocking esphome#12859 by @bdraco
- [water_heater] Combine log statements to reduce loop blocking esphome#12858 by @bdraco
- [update] Combine log statements to reduce loop blocking esphome#12857 by @bdraco
- [ethernet] Combine log statements to reduce loop blocking esphome#12854 by @bdraco
- [uart] Combine log statements to reduce loop blocking esphome#12855 by @bdraco
- [captive_portal] Combine log statements to reduce loop blocking esphome#12853 by @bdraco
- [ac_dimmer] Fix ESP8266 build by requiring waveform support esphome#12852 by @bdraco
- [bp1658cj] Combine log statements to reduce loop blocking esphome#12851 by @bdraco
- [ble_nus] Combine log statements to reduce loop blocking esphome#12850 by @bdraco
- [bedjet] Combine log statements to reduce loop blocking esphome#12848 by @bdraco
- [as3935] Combine log statements to reduce loop blocking esphome#12846 by @bdraco
- [anova] Combine log statements to reduce loop blocking esphome#12845 by @bdraco
- [ads1118] Combine log statements to reduce loop blocking esphome#12844 by @bdraco
- [ads1115] Combine log statements to reduce loop blocking esphome#12843 by @bdraco
- [ade7880] Combine log statements to reduce loop blocking esphome#12842 by @bdraco
- [adc] Combine log statements to reduce loop blocking esphome#12841 by @bdraco
- [esp32_rmt_led_strip] Support inverted logic esphome#12825 by @Frederic98 (new-feature)
- [ac_dimmer] Combine log statements to reduce loop blocking esphome#12840 by @bdraco
- [wifi] Combine log statements to reduce loop blocking esphome#12856 by @bdraco
- [binary_sensor] Combine log statements to reduce loop blocking esphome#12849 by @bdraco
- [esp32] Move heap functions to flash, saving ~6KB esphome#12862 by @bdraco
- [water_heater] (4/4) Implement tests for new water_heater component esphome#12517 by @dhoeben (new-feature)
- [cst816] Combine log statements to reduce loop blocking esphome#12872 by @bdraco
- [esp_ldo] Combine log statements to reduce loop blocking esphome#12886 by @bdraco
- [epaper_spi] Combine log statements to reduce loop blocking esphome#12881 by @bdraco
- [chsc6x] Combine log statements to reduce loop blocking esphome#12871 by @bdraco
- [cap1188] Combine log statements to reduce loop blocking esphome#12868 by @bdraco
- [dht] Combine log statements to reduce loop blocking esphome#12877 by @bdraco
- [espnow] Combine log statements to reduce loop blocking esphome#12887 by @bdraco
- [esp8266_pwm] Combine log statements to reduce loop blocking esphome#12885 by @bdraco
- [endstop] Combine log statements to reduce loop blocking esphome#12879 by @bdraco
- [fan] Combine log statements to reduce loop blocking esphome#12889 by @bdraco
- [debug] Combine log statements to reduce loop blocking esphome#12875 by @bdraco
- [esp32_ble_client] Combine log statements to reduce loop blocking esphome#12883 by @bdraco
- [ezo_pmp] Combine log statements to reduce loop blocking esphome#12888 by @bdraco
- [esp32_ble_tracker] Make start_scan action idempotent esphome#12864 by @bdraco
- [es8388] Combine log statements to reduce loop blocking esphome#12882 by @bdraco
- [esp32][libretiny] Reuse preference buffer to avoid heap churn esphome#12890 by @bdraco
- [esp32_hosted] Combine log statements to reduce loop blocking esphome#12884 by @bdraco
- [ens160_base] Combine log statements to reduce loop blocking esphome#12880 by @bdraco
- [emmeti] Combine log statements to reduce loop blocking esphome#12878 by @bdraco
- [dfrobot_sen0395] Combine log statements to reduce loop blocking esphome#12876 by @bdraco
- [current_based] Combine log statements to reduce loop blocking esphome#12873 by @bdraco
- [cd74hc4067] Combine log statements to reduce loop blocking esphome#12870 by @bdraco
- [cc1101] Combine log statements to reduce loop blocking esphome#12869 by @bdraco
- [factory_reset] Combine log statements to reduce loop blocking esphome#12866 by @bdraco
- [ultrasonic] Fix timeout issues and deprecate timeout option esphome#12897 by @swoboda1337 (breaking-change)
- [hub75] Bump esp-hub75 version to 0.2.2 esphome#12674 by @stuartparmenter (new-feature)
- [gcja5] Combine log statements to reduce loop blocking esphome#12898 by @bdraco
- [gl_r01_i2c] Combine log statements to reduce loop blocking esphome#12899 by @bdraco
- [wifi] Fix LibreTiny thread safety with queue-based event handling esphome#12833 by @bdraco
- [openthread] Combine log statements to reduce loop blocking esphome#12917 by @bdraco
- [opentherm] Combine log statements to reduce loop blocking esphome#12916 by @bdraco
- [my9231] Combine log statements to reduce loop blocking esphome#12915 by @bdraco
- [mqtt] Combine log statements to reduce loop blocking esphome#12914 by @bdraco
- [mcp9600] Combine log statements to reduce loop blocking esphome#12913 by @bdraco
- [mcp3204] Combine log statements to reduce loop blocking esphome#12912 by @bdraco
- [hc8] Combine log statements to reduce loop blocking esphome#12900 by @bdraco
- [hlw8012] Combine log statements to reduce loop blocking esphome#12901 by @bdraco
- [honeywellabp] Combine log statements to reduce loop blocking esphome#12902 by @bdraco
- [ina260] Combine log statements to reduce loop blocking esphome#12903 by @bdraco
- [ina2xx_base] Combine log statements to reduce loop blocking esphome#12904 by @bdraco
- [lc709203f] Combine log statements to reduce loop blocking esphome#12905 by @bdraco
- [ledc] Combine log statements to reduce loop blocking esphome#12906 by @bdraco
- [mopeka_std_check] Combine log statements to reduce loop blocking esphome#12911 by @bdraco
- [modbus] Combine log statements to reduce loop blocking esphome#12910 by @bdraco
- [libretiny_pwm] Combine log statements to reduce loop blocking esphome#12907 by @bdraco
- [m5stack_8angle] Combine log statements to reduce loop blocking esphome#12908 by @bdraco
- [vl53l0x] Combine log statements to reduce loop blocking esphome#12929 by @bdraco
- [tuya] Combine log statements to reduce loop blocking esphome#12924 by @bdraco
- [sx1509] Combine log statements to reduce loop blocking esphome#12920 by @bdraco
- [tlc5947] Combine log statements to reduce loop blocking esphome#12921 by @bdraco
- [tmp1075] Combine log statements to reduce loop blocking esphome#12923 by @bdraco
- [uln2003] Combine log statements to reduce loop blocking esphome#12926 by @bdraco
- [mqtt] Combine log statements to reduce loop blocking esphome#12938 by @bdraco
- [usb_uart] Combine log statements to reduce loop blocking esphome#12928 by @bdraco
- [sun] Combine log statements to reduce loop blocking esphome#12919 by @bdraco
- [waveshare_epaper] Combine log statements to reduce loop blocking esphome#12931 by @bdraco
- [usb_host] Combine log statements to reduce loop blocking esphome#12927 by @bdraco
- [wireguard] Combine log statements to reduce loop blocking esphome#12932 by @bdraco
- [xiaomi_xmwsdj04mmc] Combine log statements to reduce loop blocking esphome#12936 by @bdraco
- [ufire_ec] Combine log statements to reduce loop blocking esphome#12925 by @bdraco
- [xpt2046] Combine log statements to reduce loop blocking esphome#12937 by @bdraco
- [wl_134] Combine log statements to reduce loop blocking esphome#12933 by @bdraco
- [x9c] Combine log statements to reduce loop blocking esphome#12934 by @bdraco
- [xgzp68xx] Combine log statements to reduce loop blocking esphome#12935 by @bdraco
- [voice_assistant] Combine log statements to reduce loop blocking esphome#12930 by @bdraco
- [tlc5971] Combine log statements to reduce loop blocking esphome#12922 by @bdraco
- [wifi] Combine log statements to reduce loop blocking esphome#12939 by @bdraco
- [api] Fix message batch size mismatch and improve naming consistency esphome#12940 by @bdraco
- [pcf8574] Combine log statements to reduce loop blocking esphome#12941 by @bdraco
- [qspi_dbi] Combine log statements to reduce loop blocking esphome#12948 by @bdraco
- [pn7160] Combine log statements to reduce loop blocking esphome#12945 by @bdraco
- [rpi_dpi_rgb] Combine log statements to reduce loop blocking esphome#12953 by @bdraco
- [pn7150] Combine log statements to reduce loop blocking esphome#12944 by @bdraco
- [pn532] Combine log statements to reduce loop blocking esphome#12943 by @bdraco
- [pid] Combine log statements to reduce loop blocking esphome#12942 by @bdraco
- [pulse_counter] Combine log statements to reduce loop blocking esphome#12946 by @bdraco
- [qmp6988] Combine log statements to reduce loop blocking esphome#12947 by @bdraco
- [radon_eye_rd200] Combine log statements to reduce loop blocking esphome#12949 by @bdraco
- [remote_base] Combine log statements to reduce loop blocking esphome#12950 by @bdraco
- [remote_receiver] Combine log statements to reduce loop blocking esphome#12951 by @bdraco
- [rp2040_pwm] Combine log statements to reduce loop blocking esphome#12952 by @bdraco
- [shelly_dimmer] Combine log statements to reduce loop blocking esphome#12956 by @bdraco
- [safe_mode] Combine log statements to reduce loop blocking esphome#12955 by @bdraco
- [runtime_stats] Combine log statements to reduce loop blocking esphome#12954 by @bdraco
- [nrf52,zigbee] add support for binary_input esphome#11535 by @tomaszduda23 (new-component) (new-feature)
- [sht3xd] Combine log statements to reduce loop blocking esphome#12957 by @bdraco
- [st7567_i2c] Combine log statements to reduce loop blocking esphome#12975 by @bdraco
- [st7567_spi] Combine log statements to reduce loop blocking esphome#12976 by @bdraco
- [st7789v] Combine log statements to reduce loop blocking esphome#12978 by @bdraco
- [shtcx] Combine log statements to reduce loop blocking esphome#12960 by @bdraco
- [sim800l] Combine log statements to reduce loop blocking esphome#12961 by @bdraco
- [sm16716] Combine log statements to reduce loop blocking esphome#12962 by @bdraco
- [sm2135] Combine log statements to reduce loop blocking esphome#12963 by @bdraco
- [sonoff_d1] Combine log statements to reduce loop blocking esphome#12966 by @bdraco
- [spi_device] Combine log statements to reduce loop blocking esphome#12967 by @bdraco
- [ssd1325_spi] Combine log statements to reduce loop blocking esphome#12972 by @bdraco
- [sm2335] Combine log statements to reduce loop blocking esphome#12965 by @bdraco
- [sm2235] Combine log statements to reduce loop blocking esphome#12964 by @bdraco
- [ssd1351_spi] Combine log statements to reduce loop blocking esphome#12974 by @bdraco
- [ssd1327_spi] Combine log statements to reduce loop blocking esphome#12973 by @bdraco
- [ssd1322_spi] Combine log statements to reduce loop blocking esphome#12971 by @bdraco
- [ssd1306_spi] Combine log statements to reduce loop blocking esphome#12970 by @bdraco
- [ssd1306_i2c] Combine log statements to reduce loop blocking esphome#12969 by @bdraco
- [spi_led_strip] Combine log statements to reduce loop blocking esphome#12968 by @bdraco
- [st7735] Combine log statements to reduce loop blocking esphome#12977 by @bdraco
- [whirlpool] support for 14 byte whirlpool IR receiver messages esphome#12774 by @mukaschultze
- [esp32_ble] Avoid heap allocation in ESPBTUUID::from_raw for string literals esphome#12980 by @bdraco
- [esp32_ble_tracker, ble_client] Reduce heap allocations with stack-based string formatting esphome#12982 by @bdraco
- [captive_portal] Avoid defer overhead on ESP8266 when saving WiFi credentials esphome#12981 by @bdraco
- [light] Use zero-copy set_effect overload in JSON schema parsing esphome#12979 by @bdraco
- [ci] Add LibreTiny (BK72XX) to memory impact analysis esphome#12983 by @bdraco
- [api] Avoid heap string copies in Home Assistant state subscription callbacks esphome#12506 by @bdraco
- [esphome OTA] Allow compilation on host platform esphome#11655 by @guillempages
- [async_tcp] Add AsyncClient for ESP-IDF and host esphome#12337 by @dwmw2
- [image] Replace use of cairosvg with resvg-py esphome#12863 by @clydebarrow
- [dsmr] Remove dependency on Arduino framework. Various bug fixes. Add missing sensors. esphome#11036 by @PolarGoose (new-feature)
- [cc1101] Add freq_offset to on_packet trigger esphome#13008 by @swoboda1337 (new-feature)
- [radon_eye_rd200] update Radon Eye RD200 with v2/v3 support esphome#7962 by @paukstis
- [voice_assistant] Reduce heap allocation with stack-based timer formatting esphome#13001 by @bdraco
- [midea] Reduce heap allocations with stack-based string formatting esphome#13000 by @bdraco
- [thermopro_ble] Reduce heap allocation with stack-based string formatting esphome#12999 by @bdraco
- [atc_mithermometer] Reduce heap allocations with stack-based string formatting esphome#12996 by @bdraco
- [b_parasite] Reduce heap allocation with stack-based string formatting esphome#12998 by @bdraco
- [ruuvi_ble] Reduce heap allocation with stack-based string formatting esphome#12997 by @bdraco
- [bthome_mithermometer] Reduce heap allocations with stack-based string formatting esphome#12995 by @bdraco
- [bedjet] Use stack-based UUID formatting in logging esphome#12993 by @bdraco
- [xiaomi_ble] Reduce heap allocations with stack-based string formatting esphome#12992 by @bdraco
- [mopeka] Reduce heap allocations with stack-based string formatting esphome#12990 by @bdraco
- [airthings_wave_base, airthings_ble] Use stack-based string formatting in logging esphome#12989 by @bdraco
- [esp8266] Add enable_serial/enable_serial1 helpers to exclude unused Serial objects esphome#12736 by @bdraco (breaking-change)
- [esp8266] Avoid heap allocation in preferences save/load esphome#12465 by @bdraco
- [pvvx_mithermometer] Reduce heap allocations with stack-based string formatting esphome#12994 by @bdraco
- [rd03d] Add Ai-Thinker RD-03D mmWave radar component esphome#12764 by @jasstrong (new-component) (new-feature) (new-platform)
- [radon_eye_rd200, radon_eye_ble] Use stack-based string formatting in logging esphome#12991 by @bdraco
- [opentherm][nau7802] Use direct format specifiers instead of to_string().c_str() esphome#13019 by @bdraco
- [improv_base] Optimize next_url to avoid STL string operations esphome#13015 by @bdraco
- [mqtt] Move Home Assistant discovery keys to PROGMEM on ESP8266 esphome#13011 by @bdraco
- [ble_scanner] Use stack-based string formatting to reduce heap allocations esphome#13013 by @bdraco
- [ota] Fix ESP32-S3 OTA crash with hardware SHA acceleration on IDF 5.5.x esphome#13021 by @bdraco
- [wifi] Clean up duplicate and empty logging output esphome#13018 by @bdraco
- [xiaomi_ble] Simplify set_bindkey using parse_hex and const char* esphome#13014 by @bdraco
- [core] Auto-replace / in entity names with Unicode fraction slash during deprecation period esphome#13016 by @bdraco
- [wifi] Eliminate heap allocations in IP address logging esphome#13017 by @bdraco
- [neopixelbus] Fix ESP8266 compilation by enabling Serial/Serial1 for NeoPixelBus library esphome#13027 by @bdraco
- [async_tcp] Fix build conflicts and use IDF component for ESP32 esphome#13025 by @dwmw2
- [aqi] Implement a sensor that computes AQI esphome#12958 by @jasstrong (new-feature) (new-platform)
- [api] Eliminate std::string from ClientInfo struct esphome#12566 by @bdraco
- [text_sensor][text] Add const char* overloads to publish_state to eliminate heap churn esphome#13030 by @bdraco
- [esp32_camera][uart] Add missing wake_loop_threadsafe() preprocessor guards esphome#13043 by @bdraco
- Map
HEAT_COOLtoMODE_AUTOin HeatpumpIR component esphome#12058 by @poolski - [sml] Eliminate heap allocations in text sensor esphome#13039 by @bdraco
- [openthread_info] Eliminate heap allocations in text sensors esphome#13036 by @bdraco
- [homeassistant] Eliminate heap allocation in text sensor state updates esphome#13035 by @bdraco
- [ethernet_info] Eliminate heap allocations in text sensors esphome#13034 by @bdraco
- [pylontech] Eliminate heap allocations in text sensors esphome#13033 by @bdraco
- [wifi_info] Eliminate heap churn in text sensors esphome#13031 by @bdraco
- [ci] Add lint check to prevent usage of deprecated CORE.using_esp_idf esphome#13029 by @bdraco
- [dsmr] Eliminate heap allocation when publishing telegram esphome#13032 by @bdraco
- [text_sensor][text] Avoid heap allocation when state unchanged esphome#13044 by @bdraco
- [esp32] Don’t warn about no ota rollback if no ota at all esphome#13045 by @clydebarrow
- [zwave_proxy] Add logging if client sends zero-length message esphome#13052 by @kbx81
- [zwave_proxy] Make
send_framesafer, makeset_home_idprotected esphome#13055 by @kbx81 - [nrf52, zigbee] Add sensor esphome#12187 by @tomaszduda23 (new-feature)
- [api] Simplify string handling by removing bifurcated client/server storage esphome#12822 by @bdraco
- [api] Coalesce log packets to reduce buffer pressure and prevent dropped state updates esphome#13026 by @bdraco
- [sun] Eliminate heap allocation in text sensor esphome#13037 by @bdraco
- [ble_client] Eliminate heap allocations in text sensor esphome#13038 by @bdraco
- [analyze-memory] Add RAM symbol analysis by component esphome#13040 by @bdraco
- [preferences] Fix preferences not syncing in safe mode due to component registration order esphome#13041 by @bdraco
- [sun_gtil2] Eliminate heap allocations in text sensor publishing esphome#13047 by @bdraco
- [http_request] Store JSON keys in flash for ESP8266 esphome#13048 by @bdraco
- [mqtt] Use ESPHOME_F() for JSON strings to reduce ESP8266 RAM usage esphome#13049 by @bdraco
- [esp32_hosted] Add SHA256 alignment for hardware DMA compatibility esphome#13050 by @bdraco
- [ld2410/ld2412/ld2450] Use index-based select publish_state to avoid heap allocations esphome#13051 by @bdraco
- [core] Add integer overload for fnv1a_hash_extend esphome#13054 by @bdraco
- [tuya] Avoid heap allocation in text sensor enum publish esphome#13056 by @bdraco
- [core] Improve log timestamp accuracy by batching serial reads esphome#12750 by @bdraco
- [es8388] Use index-based select publish_state to avoid heap allocations esphome#13053 by @bdraco
- [modbus_controller] Replace format_hex_pretty with stack-based format_hex_pretty_to esphome#12781 by @bdraco
- [logger] Add thread-safe logging for host platform esphome#13010 by @bdraco
- [wifi] Add basic post-connect roaming support for stationary devices esphome#12809 by @bdraco (new-feature)
- [debug] Use stack buffers with buf_append helper instead of std::string esphome#13020 by @bdraco
- [abbwelcome] Use stack-based formatting to eliminate heap allocations esphome#12799 by @bdraco
- [web_server][captive_portal] Add Brotli compression (saves ~11KB flash when using local) esphome#12959 by @bdraco (new-feature)
- Update webserver local assets to 20260107-214817 esphome#13064 by @esphomebot
- [esp32_touch] Disable hardware timeout to prevent continuous interrupts esphome#13059 by @marcbodea
- [logger] Add thread-safe logging support for LibreTiny platform esphome#13062 by @bdraco (new-feature)
- [image] Add define and core data esphome#13058 by @clydebarrow
- [thermostat] Allow
heat_cool_modewithout an automation esphome#13069 by @kbx81 (new-feature) - [logger] Enable loop disable optimization for LibreTiny task log buffer esphome#13078 by @bdraco
- [libretiny] Bump to 1.9.2 esphome#13077 by @bdraco
- [wifi] Disable SoftAP support on Arduino ESP32 when ap: not configured esphome#13076 by @bdraco
- [core] Improve minimum_chip_revision warning for PSRAM users esphome#13074 by @bdraco
- [wifi] Fix infinite roaming when best-signal AP is crashed/broken esphome#13071 by @bdraco
- [mqtt] Reduce heap allocations in topic string building esphome#13072 by @bdraco
- [wifi] Limit ignored disconnect events on LibreTiny to speed up AP failover esphome#13070 by @bdraco
- [mqtt] Include session_present and reason parameters in connection callbacks esphome#12413 by @Rapsssito (new-feature)
- [ac_dimmer] Added support for ESP-IDF (5+) esphome#7072 by @latonita (new-feature)
- [wifi] Warn when AP is configured without captive_portal or web_server esphome#13087 by @bdraco
- [web_server] Use centralized length constants for buffer sizing esphome#13073 by @bdraco
- [api] Fire on_client_disconnected trigger after removing client from list esphome#13088 by @bdraco (breaking-change)
- [hub75] Fix depth and gamma mode defines esphome#13091 by @stuartparmenter
- [api] Add methods supporting efficient packed repeated sint32 field encoding for #12985 esphome#13094 by @kbx81
- [remote_base] Add zero-copy packed sint32 decoder for #12985 esphome#13093 by @kbx81
- Revert “[wifi] Disable SoftAP support on Arduino ESP32 when ap: not configured” esphome#13099 by @bdraco
- [hub75] Fix gamma_correct to use enum value instead of key string esphome#13102 by @stuartparmenter
- [mapping] Fix test SPI data rate for RP2040 esphome#13108 by @bdraco
- [mdns] Remove deprecated api password from test configuration esphome#13107 by @bdraco
- [CI] skip endpoint check due to test grouping esphome#13111 by @tomaszduda23
- [esp32_hosted] Add HTTP-based coprocessor firmware update support esphome#13090 by @swoboda1337 (new-feature) (breaking-change)
- [water_heater] (3/4) Implement web_server for new water_heater component esphome#12511 by @dhoeben (new-feature)
- Update webserver local assets to 20260110-013228 esphome#13113 by @esphomebot
- [aqi] Fix precision loss for low PM concentration values esphome#13120 by @jasstrong
- [esp32_hosted] Bump component versions esphome#13118 by @swoboda1337
- [core] Rename FixedVector::shrink_to_fit() to release() for clarity esphome#13130 by @bdraco
- [api] Proto code generator changes for #12985 esphome#13100 by @kbx81
- [sensor] Use C++17 nested namespace syntax esphome#13116 by @bdraco
- [libretiny] Disable BLE stack on BK7231N to save ~21KB RAM esphome#13131 by @bdraco
- [helpers] Add format_hex_prefixed_to for “0x” prefixed hex formatting esphome#13115 by @bdraco
- [web_server] Fix v1 compilation on ESP-IDF by adding missing write method esphome#13153 by @bdraco
- [wifi] Fix captive portal/improv only attempting last configured network esphome#13086 by @bdraco
- [uptime] Format text sensor output on stack to avoid heap allocations esphome#13150 by @bdraco
- [improv_serial] Use int8_to_str to avoid heap allocation for RSSI formatting esphome#13149 by @bdraco
- [web_server_idf] Reduce heap usage in DefaultHeaders and auth esphome#13141 by @bdraco
- [light] Move LightColorValues::lerp() out of header to reduce code duplication esphome#13138 by @bdraco
- [safe_mode] Conditionally compile callback when on_safe_mode is configured esphome#13136 by @bdraco
- [ch422g][lc709203f][qmc5883l] Avoid heap allocation in status_set_warning calls esphome#13152 by @bdraco
- [runtime_stats] Fix log output formatting alignment esphome#13155 by @bdraco
- [ci] Add RP2040 to memory impact analysis esphome#13134 by @bdraco
- [fan] Return StringRef from get_preset_mode() for safety and modern API esphome#13092 by @bdraco (breaking-change)
- [select] Return StringRef from current_option() esphome#13095 by @bdraco (breaking-change)
- [light] Return StringRef from LightEffect::get_name() and LightState::get_effect_name() esphome#13105 by @bdraco (breaking-change)
- [event] Return StringRef from get_last_event_type() esphome#13104 by @bdraco (breaking-change)
- [climate] Return StringRef from get_custom_fan_mode() and get_custom_preset() esphome#13103 by @bdraco (breaking-change)
- [api] Use StringRef for HomeassistantServiceMap.value to eliminate heap allocations esphome#13154 by @bdraco
- [tuya][rc522][remote_base] Migrate format_hex_pretty() to stack-based alternatives esphome#13158 by @bdraco
- [infrared] Implement experimental API/Core/component for new component/entity type esphome#13129 by @kbx81 (new-component)
- [rd03d] Filter targets with sentinel speed values esphome#13146 by @jasstrong
- [nrf52,zigbee] Warning if spaces in description esphome#13114 by @tomaszduda23
- [api] Use stack buffer for bytes field dumping in proto message logs esphome#13162 by @bdraco
- [mqtt][prometheus][graph] Migrate value_accuracy_to_string() to stack-based alternative esphome#13159 by @bdraco
- [nfc] Use stack-based hex formatting in pn7150/pn7160 components esphome#13163 by @bdraco
- [esp32_can] Add listen-only mode to esp32_can component esphome#13084 by @mikaabra (new-feature)
- [deep_sleep] Fix GPIO wakeup comment esphome#12815 by @jvanderneutstulen
- [deep_sleep] Fix GPIO wakeup on ESP32-C3/C6 esphome#12803 by @jvanderneutstulen
- [nrf52,sdk] Add framework version support esphome#12489 by @tomaszduda23 (new-feature)
- [web_server] Fix select compilation error in v1 esphome#13169 by @bdraco
- [core] Migrate callers and soft deprecate get_mac_address()/get_mac_address_pretty() esphome#13157 by @bdraco
- [infrared] Use set_data() for vector timings in control() esphome#13171 by @bdraco
- [core] Soft deprecate heap-allocating string helpers to prevent fragmentation patterns esphome#13156 by @bdraco
- [tuya] add color_type_lowercase option esphome#13101 by @lullius (new-feature)
- [mqtt] templatable state and command topics esphome#12441 by @Rapsssito (new-feature)
- [ci] Add format_hex_pretty to heap-allocating helper lint check esphome#13178 by @bdraco
- [ir_rf_proxy] New component esphome#12985 by @kbx81 (new-component) (new-feature)
- [socket] Call lwip_read/lwip_write directly on ESP32 to reduce network I/O latency esphome#13179 by @bdraco
- [bme68x_bsec2] use EntityBase instead of Component for the id esphome#13185 by @ssieb
- [ld24xx] add id to support extending esphome#13183 by @ssieb
- [improv_serial] Use stack buffers for webserver URL formatting esphome#13175 by @bdraco
- [api] Use stack buffer for VERY_VERBOSE proto message dumps esphome#13176 by @bdraco
- [mqtt] Avoid intermediate string allocations in publish calls esphome#13174 by @bdraco
- [i2s_audio] Bugfix: Buffer overflow in software volume control esphome#13190 by @kahrendt
- [wifi] Fix ESP8266 disconnect callback order to set error flag before notifying listeners esphome#13189 by @bdraco
- [libretiny] Regenerate boards, enable Cortex-M4 atomics, and consolidate platform code esphome#13191 by @bdraco
- [nrf52,zigbee] Add binary output as switch esphome#13083 by @tomaszduda23 (new-feature)
- [ota] Mark partition valid when OTA begins to prevent rollback blocking esphome#13195 by @swoboda1337
- [epaper_spi] Add Waveshare 2.13v3 esphome#13117 by @clydebarrow (new-feature)
- [ssd1306_i2c] fix “SSD1306 72x40” display initialization (add SSD1306B Iref setup) esphome#13148 by @Cougar
- [logger] Use RAII guards for recursion protection and optimize hot path esphome#13194 by @bdraco
- [logger] Use StaticVector for log listeners with compile-time sizing esphome#13196 by @bdraco
- [wifi] Use StaticVector for WiFi listeners with per-type compile-time sizing esphome#13197 by @bdraco
- [bh1750] Eliminate heap allocations by replacing callbacks with state machine esphome#11950 by @bdraco
- [api] Reduce batch RAM usage by 33% via switch dispatch esphome#13199 by @bdraco
- [usb_cdc_acm] move esp32 implementation to new file esphome#12824 by @tomaszduda23
- [scheduler] Eliminate heap allocations for std::string names and add uint32_t ID API esphome#13200 by @bdraco
- [ethernet_info] Convert to event-driven IP state listener pattern esphome#13203 by @bdraco
- [web_server] Store method/domain comparison strings in flash on ESP8266 esphome#13205 by @bdraco
- [image] Correctly handle dimensions in physical units esphome#13209 by @clydebarrow
- [core] Optimize and normalize entity state publishing logs with » format esphome#13236 by @bdraco
- [api] Fix state updates being sent to clients that did not subscribe esphome#13237 by @bdraco
- [core] Fix platform subcomponents not filtering source files esphome#13208 by @bdraco
- [core] Fix ESP32-S2/S3 hardware SHA crash by aligning HashBase digest buffer esphome#13234 by @bdraco
- [safe_mode] Detect bootloader rollback support at runtime esphome#13230 by @swoboda1337
- [qr_code] Allocate and free memory for QR code buffer esphome#13161 by @rootnegativ1
- [web_server][captive_portal] Change default compression from Brotli to gzip esphome#13246 by @bdraco
- [sprinkler] Fix scheduler deprecation warnings and heap churn with FixedVector esphome#13251 by @bdraco
- [dallas_temp] Use const char* for set_timeout to fix deprecation warning and heap churn esphome#13250 by @bdraco
- [api] Fix clock conflicts when multiple clients connected to homeassistant time esphome#13253 by @bdraco
- [esp32_ble_client] Reduce GATT data event logging to prevent firmware update failures esphome#13252 by @bdraco
- [ntc, resistance] change log level to verbose esphome#13268 by @mrtoy-me
- [hmac_sha256] Replace unsafe sprintf with format_hex_to esphome#13290 by @bdraco
- [hub75] Bump esp-hub75 version to 0.3.0 esphome#13243 by @stuartparmenter (breaking-change)
- [http_request] Unable to handle chunked responses esphome#7884 by @HLFCode
- [network] Fix IPAddress::str_to() to lowercase IPv6 hex digits esphome#13325 by @bdraco
- [api] Fix truncation of Home Assistant attributes longer than 255 characters esphome#13348 by @bdraco
- [core] Fix state leakage and module caching when processing multiple configurations esphome#13368 by @swoboda1337
- [x9c] Fix potentiometer unable to decrement esphome#13382 by @swoboda1337
- [wifi_info] Fix missing state when both IP+DNS or SSID+BSSID configure esphome#13385 by @bdraco
- Bump actions/create-github-app-token from 2.2.0 to 2.2.1 esphome#12370 by @dependabot[bot]
- Bump peter-evans/create-pull-request from 7.0.11 to 8.0.0 esphome#12409 by @dependabot[bot]
- Bump codecov/codecov-action from 5.5.1 to 5.5.2 esphome#12408 by @dependabot[bot]
- Bump tornado from 6.5.2 to 6.5.3 esphome#12430 by @dependabot[bot]
- Bump actions/upload-artifact from 5.0.0 to 6.0.0 esphome#12452 by @dependabot[bot]
- Bump actions/download-artifact from 6.0.0 to 7.0.0 esphome#12449 by @dependabot[bot]
- Bump actions/cache from 4.3.0 to 5.0.1 esphome#12450 by @dependabot[bot]
- Bump github/codeql-action from 4.31.7 to 4.31.8 esphome#12451 by @dependabot[bot]
- Bump actions/cache from 4.3.0 to 5.0.1 in /.github/actions/restore-python esphome#12453 by @dependabot[bot]
- Bump ruff from 0.14.8 to 0.14.9 esphome#12448 by @dependabot[bot]
- Bump aioesphomeapi from 43.2.1 to 43.3.0 esphome#12507 by @dependabot[bot]
- Bump tornado from 6.5.3 to 6.5.4 esphome#12508 by @dependabot[bot]
- Bump github/codeql-action from 4.31.8 to 4.31.9 esphome#12524 by @dependabot[bot]
- Bump ruamel-yaml from 0.18.16 to 0.18.17 esphome#12555 by @dependabot[bot]
- Bump voluptuous from 0.15.2 to 0.16.0 esphome#12573 by @dependabot[bot]
- Bump docker/setup-buildx-action from 3.11.1 to 3.12.0 in the docker-actions group esphome#12574 by @dependabot[bot]
- Bump ruff from 0.14.9 to 0.14.10 esphome#12572 by @dependabot[bot]
- Bump aioesphomeapi from 43.3.0 to 43.4.0 esphome#12597 by @dependabot[bot]
- Bump aioesphomeapi from 43.4.0 to 43.5.0 esphome#12599 by @dependabot[bot]
- Bump aioesphomeapi from 43.5.0 to 43.6.0 esphome#12644 by @dependabot[bot]
- Bump aioesphomeapi from 43.6.0 to 43.7.0 esphome#12699 by @dependabot[bot]
- Bump bleak from 2.0.0 to 2.1.0 esphome#12700 by @dependabot[bot]
- Bump aioesphomeapi from 43.7.0 to 43.8.0 esphome#12701 by @dependabot[bot]
- Bump aioesphomeapi from 43.8.0 to 43.9.0 esphome#12702 by @dependabot[bot]
- Bump aioesphomeapi from 43.9.0 to 43.9.1 esphome#12724 by @dependabot[bot]
- Bump bleak from 2.1.0 to 2.1.1 esphome#12804 by @dependabot[bot]
- Bump aioesphomeapi from 43.9.1 to 43.10.0 esphome#12821 by @dependabot[bot]
- Bump ruamel-yaml from 0.18.17 to 0.19.1 esphome#12768 by @dependabot[bot]
- Bump aioesphomeapi from 43.10.0 to 43.10.1 esphome#12865 by @dependabot[bot]
- Bump ruff from 0.14.10 to 0.14.11 esphome#13082 by @dependabot[bot]
- Bump esphome-dashboard from 20251013.0 to 20260110.0 esphome#13109 by @dependabot[bot]
- Bump aioesphomeapi from 43.10.1 to 43.11.0 esphome#13132 by @dependabot[bot]
- Bump aioesphomeapi from 43.11.0 to 43.12.0 esphome#13139 by @dependabot[bot]
- Bump aioesphomeapi from 43.12.0 to 43.13.0 esphome#13160 by @dependabot[bot]
- Bump github/codeql-action from 4.31.9 to 4.31.10 esphome#13173 by @dependabot[bot]
- Bump yamllint from 1.37.1 to 1.38.0 esphome#13192 by @dependabot[bot]
All Changelogs
- ESPHome 2026.1.0 - January 2026 (current page)
- ESPHome 2025.12.0 - December 2025
- 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
