Skip to content

Blog

register_action Now Requires Explicit synchronous= Parameter

All register_action() calls now require an explicit synchronous=True or synchronous=False parameter. This enables the StringRef optimization for synchronous actions (zero-copy string argument passing) while ensuring asynchronous actions safely use owning std::string to prevent dangling references. Existing external components will continue to work but will see a warning at config time until updated.

This is a breaking change for external components in ESPHome 2026.3.0 and later.

RP2040 Framework Update: Pico-SDK 2.0 and GCC 14

The RP2040 platform has been updated to arduino-pico 5.5.0 (from 3.9.4), pico-sdk 2.1.0 (from 1.5.1), and GCC 14 (from GCC 12). Several hardware register names, API functions, and macros have changed. External components targeting RP2040 may need updates.

This is a breaking change for external components in ESPHome 2026.3.0 and later.

Socket Abstraction Layer Devirtualized

The socket::Socket and socket::ListenSocket types have been changed from virtual base classes to concrete type aliases. Listen sockets now use the ListenSocket type instead of Socket. These changes save 1,020–3,228 bytes of flash across platforms by eliminating virtual dispatch overhead.

This is a breaking change for external components in ESPHome 2026.3.0 and later.

UART flush() Now Returns FlushResult

The UARTComponent::flush() method return type has changed from void to FlushResult. External components that subclass UARTComponent and override flush() must update their override to return a FlushResult value.

This is a breaking change for external components in ESPHome 2026.3.0 and later.