ESPHome 2026.3.0 - March 2026
Read the ESPHome 2026.3.0 release notes on the blog for the release overview, feature highlights, upgrade checklist, and breaking changes.
Full list of changes
Section titled “Full list of changes”The lists below are grouped by tag and may contain duplicates across sections.
New Features
Section titled “New Features”- [mipi_spi] Add Waveshare 1.83 v2 panel esphome#13680 by @schdro (new-feature)
- [epaper_spi] Add WeAct 3-color e-paper display support esphome#13894 by @pgolawsk (new-feature)
- [epaper_spi] Add Waveshare 7.5in e-Paper (H) esphome#13991 by @corneliusludmann (new-feature)
- [media_player] Add more commands to support Sendspin esphome#12258 by @kahrendt (new-feature)
- [audio, speaker] Add support for decoding Ogg Opus files esphome#13967 by @kahrendt (new-feature) (breaking-change)
- [esp32_camera] Add support for sensors without JPEG support esphome#9496 by @mback2k (new-feature)
- [esp32] Add engineering_sample option for ESP32-P4 esphome#14139 by @swoboda1337 (new-feature) (breaking-change)
- [wifi] Add band_mode configuration for ESP32-C5 dual-band WiFi esphome#14148 by @swoboda1337 (new-feature)
- [nrf52,logger] Early debug esphome#11685 by @tomaszduda23 (new-feature)
- [cc1101] actions to change general and tuner settings esphome#14141 by @sxtfov (new-feature)
- [hdc302x] Add new component esphome#10160 by @joshuasing (new-component) (new-feature) (new-platform)
- [version] text sensor add option
hide_hashto restore the pre-2026.1 behavior esphome#14251 by @nagyrobi (new-feature) - [esp_ldo] Add channels 1&2 support with additional option to enable it, add source voltage bypass/pass-through esphome#14177 by @p1ngb4ck (new-feature)
- [mipi_dsi] Add more Waveshare panels and comments esphome#14023 by @gtjoseph (new-feature)
- [esp32_touch] Migrate to new unified touch sensor driver (esp_driver_touch_sens) esphome#14033 by @swoboda1337 (new-feature)
- [esp32_ble] allow setting of min/max key_size and auth_req_mode esphome#7138 by @whitty (new-feature)
- [esp32_hosted] Add configurable SDIO clock frequency esphome#14319 by @deirdreobyrne (new-feature)
- [safe_mode] Add feature to explicitly mark a boot as successful esphome#14306 by @mcassaniti (new-feature)
- [esp32] Enable
execute_from_psramfor P4 esphome#14329 by @clydebarrow (new-feature) - [sen6x] Add SEN6x sensor support esphome#12553 by @mebner86 (new-component) (new-feature) (new-platform)
- [gt911] Support for interrupt line via IO Expander (resubmit) esphome#14358 by @PedanticAvenger (new-feature)
- [media_source] Add new Media Source platform component esphome#14417 by @kahrendt (new-component) (new-feature)
- [lps22] Add support for the LPS22DF variant esphome#14397 by @melak (new-feature)
- [openthread] Add tx power option esphome#14200 by @schdro (new-feature)
- [speaker] Add off on capability to media player esphome#9295 by @rwrozelle (new-feature)
- [integration] Add set method to publish and save sensor value esphome#13316 by @JiriPrchal (new-feature)
- [openthread] static log level code quality improvement esphome#14456 by @rwrozelle (new-feature) (breaking-change)
- [audio_file] New component for embedding files into firmware esphome#14434 by @kahrendt (new-component) (new-feature)
- [audio_file] Add media source platform esphome#14436 by @kahrendt (new-feature)
- [ble_nus] Add uart support esphome#14320 by @tomaszduda23 (new-feature)
- [rp2040] Fix Pico W LED pin and auto-generate board definitions for arduino-pico 5.5.x esphome#14528 by @bdraco (new-feature)
- [http_request] Make TLS buffer configurable on ESP8266 esphome#14009 by @AndreKR (new-feature)
- [uart][usb_uart] Add debug_prefix option to distinguish multiple defined uarts in log esphome#14525 by @p1ngb4ck (new-feature)
- [uart] Return
flushresult, expose timeout via config esphome#14608 by @kbx81 (new-feature) - [usb_uart] Return
flushresult, expose timeout via config esphome#14616 by @kbx81 (new-feature) - [nrf52, ota] ble and serial OTA based on mcumgr esphome#11932 by @tomaszduda23 (new-component) (new-feature) (new-platform)
- [serial_proxy] New component esphome#13944 by @kbx81 (new-component) (new-feature)
- [nextion] Add configurable HTTP parameters for TFT upload esphome#14234 by @edwardtfn (new-feature) (breaking-change)
- [rp2040] Use picotool for BOOTSEL upload and improve upload UX esphome#14483 by @bdraco (new-feature)
- [rp2040_ble] Add BLE component for RP2040/RP2350 esphome#14603 by @bdraco (new-component) (new-feature)
- [runtime_image] Add support for 8bit BMPs and fix existing issues esphome#10733 by @mahumpula (new-feature)
- [speaker_source] Add new media player esphome#14649 by @kahrendt (new-component) (new-feature) (new-platform)
- [dew_point] Add dew_point sensor component esphome#14441 by @CFlix (new-component) (new-feature) (new-platform)
- [speaker_source] Add playlist management esphome#14652 by @kahrendt (new-feature)
- [speaker_source] Add shuffle support esphome#14653 by @kahrendt (new-feature)
- [speaker_source] Add announcement pipeline esphome#14654 by @kahrendt (new-feature)
- [esp32] Add crash handler to capture and report backtrace across reboots esphome#14709 by @bdraco (new-feature)
New Components
Section titled “New Components”- [runtime_image, online_image] Create runtime_image component to decode images esphome#10212 by @kahrendt (new-component)
- [hdc302x] Add new component esphome#10160 by @joshuasing (new-component) (new-feature) (new-platform)
- [sen6x] Add SEN6x sensor support esphome#12553 by @mebner86 (new-component) (new-feature) (new-platform)
- [media_source] Add new Media Source platform component esphome#14417 by @kahrendt (new-component) (new-feature)
- [audio_file] New component for embedding files into firmware esphome#14434 by @kahrendt (new-component) (new-feature)
- [nrf52, ota] ble and serial OTA based on mcumgr esphome#11932 by @tomaszduda23 (new-component) (new-feature) (new-platform)
- [serial_proxy] New component esphome#13944 by @kbx81 (new-component) (new-feature)
- [rp2040_ble] Add BLE component for RP2040/RP2350 esphome#14603 by @bdraco (new-component) (new-feature)
- [speaker_source] Add new media player esphome#14649 by @kahrendt (new-component) (new-feature) (new-platform)
- [dew_point] Add dew_point sensor component esphome#14441 by @CFlix (new-component) (new-feature) (new-platform)
New Platforms
Section titled “New Platforms”- [hdc302x] Add new component esphome#10160 by @joshuasing (new-component) (new-feature) (new-platform)
- [sen6x] Add SEN6x sensor support esphome#12553 by @mebner86 (new-component) (new-feature) (new-platform)
- [nrf52, ota] ble and serial OTA based on mcumgr esphome#11932 by @tomaszduda23 (new-component) (new-feature) (new-platform)
- [nrf52] allow to update OTA via cmd esphome#12344 by @tomaszduda23 (new-platform)
- [speaker_source] Add new media player esphome#14649 by @kahrendt (new-component) (new-feature) (new-platform)
- [dew_point] Add dew_point sensor component esphome#14441 by @CFlix (new-component) (new-feature) (new-platform)
Breaking Changes
Section titled “Breaking Changes”- [audio, speaker] Add support for decoding Ogg Opus files esphome#13967 by @kahrendt (new-feature) (breaking-change)
- [opentherm] Remove deprecated opentherm_version config option esphome#14103 by @swoboda1337 (breaking-change)
- [esp32] Add engineering_sample option for ESP32-P4 esphome#14139 by @swoboda1337 (new-feature) (breaking-change)
- [time] Eliminate libc timezone bloat (~9.5KB flash ESP32, ~2% RAM on ESP8266) esphome#13635 by @bdraco (breaking-change)
- [rp2040] Update arduino-pico framework from 3.9.4 to 5.5.0 esphome#14328 by @bdraco (breaking-change)
- [sgp30] Fix serial number truncation from 48-bit to 24-bit esphome#14478 by @swoboda1337 (breaking-change)
- [openthread] static log level code quality improvement esphome#14456 by @rwrozelle (new-feature) (breaking-change)
- [core] Move entity icon strings to PROGMEM on ESP8266 esphome#14437 by @bdraco (breaking-change)
- [core] Move device class strings to PROGMEM on ESP8266 esphome#14443 by @bdraco (breaking-change)
- [rp2040] Wrap printf/vprintf/fprintf to eliminate _vfprintf_r (~9.2 KB flash) esphome#14622 by @bdraco (breaking-change)
- [esp8266] Wrap printf/vprintf/fprintf to eliminate _vfiprintf_r (~1.6 KB flash) esphome#14621 by @bdraco (breaking-change)
- [nextion] Add configurable HTTP parameters for TFT upload esphome#14234 by @edwardtfn (new-feature) (breaking-change)
- [micronova] Add command queue esphome#12268 by @edenhaus (breaking-change)
- [light] Fix ambiguous set_effect overload for const char* esphome#14732 by @bdraco (breaking-change)
All changes
Section titled “All changes”- [mipi_spi] Add Waveshare 1.83 v2 panel esphome#13680 by @schdro (new-feature)
- [web_server] Guard icon JSON field with USE_ENTITY_ICON esphome#13948 by @bdraco
- [analyze_memory] Fix mDNS packet buffer miscategorized as wifi_config esphome#13949 by @bdraco
- [web_server] Switch from getParam to arg API to eliminate heap allocations esphome#13942 by @bdraco
- [wifi] Deprecate wifi_ssid() in favor of wifi_ssid_to() esphome#13958 by @bdraco
- [helpers] Add heap warnings to format_hex_pretty, deprecate ethernet/web_server std::string APIs esphome#13959 by @bdraco
- [web_server] Flatten deq_push_back_with_dedup_ to inline vector realloc esphome#13968 by @bdraco
- [core] Flatten single-callsite vector realloc functions esphome#13970 by @bdraco
- [usb_host] Extract cold path from loop(), replace std::string with buffer API esphome#13957 by @bdraco
- [runtime_image, online_image] Create runtime_image component to decode images esphome#10212 by @kahrendt (new-component)
- [core] Make LOG_ENTITY_ICON a no-op when icons are compiled out esphome#13973 by @bdraco
- [nfc] Replace constant std::vector with static constexpr std::array esphome#13978 by @bdraco
- [http_request] Improve TLS logging on ESP8266 esphome#13985 by @AndreKR
- [epaper_spi] Add WeAct 3-color e-paper display support esphome#13894 by @pgolawsk (new-feature)
- [audio] Support reallocating non-empty AudioTransferBuffer esphome#13979 by @kahrendt
- [epaper_spi] Add Waveshare 7.5in e-Paper (H) esphome#13991 by @corneliusludmann (new-feature)
- [runtime_image] Remove stored RAMAllocator member esphome#13998 by @bdraco
- [online_image] Remove stored RAMAllocator member from DownloadBuffer esphome#13999 by @bdraco
- [camera, camera_encoder] Remove stored RAMAllocator member esphome#13997 by @bdraco
- [json, core] Remove stored RAMAllocator, make constructors constexpr esphome#14000 by @bdraco
- [api] Remove unused reserve from APIServer constructor esphome#14017 by @bdraco
- [display] Make COLOR_OFF and COLOR_ON inline constexpr esphome#14044 by @bdraco
- [core] Make setup_priority and component state constants constexpr esphome#14041 by @bdraco
- [pca9685] Make mode constants inline constexpr esphome#14042 by @bdraco
- [tlc59208f] Make mode constants inline constexpr esphome#14043 by @bdraco
- [core] Remove dead global_state variable esphome#14060 by @bdraco
- [core] Remove unnecessary IRAM_ATTR from yield(), delay(), feed_wdt(), and arch_feed_wdt() esphome#14063 by @bdraco
- [api] Add handshake timeout to prevent connection slot exhaustion esphome#14050 by @bdraco
- [http_request] Replace heavy STL containers with std::vector for headers esphome#14024 by @bdraco
- [core] Shrink Application::dump_config_at_ from size_t to uint16_t esphome#14053 by @bdraco
- [core] Conditionally compile setup_priority override infrastructure esphome#14057 by @bdraco
- [mqtt] Use constexpr for compile-time constants esphome#14075 by @bdraco
- [web_server] Move climate static traits to DETAIL_ALL only esphome#14066 by @bdraco
- [bluetooth_proxy][esp32_ble_client][esp32_ble_server] Use constexpr for compile-time constants esphome#14073 by @bdraco
- [api] Use constexpr for compile-time constant esphome#14072 by @bdraco
- [packet_transport] Use constexpr for compile-time constants esphome#14074 by @bdraco
- [remote_base] Use constexpr for compile-time constants esphome#14076 by @bdraco
- [core] Use constexpr for compile-time constants esphome#14071 by @bdraco
- [http_request] Replace std::map with std::vector in action template esphome#14026 by @bdraco
- [nfc] Use constexpr for compile-time constants esphome#14077 by @bdraco
- [pn7160] Use constexpr for compile-time constants esphome#14078 by @bdraco
- [bluetooth_proxy] Use constexpr for remaining compile-time constants esphome#14080 by @bdraco
- [audio] Add support for sinking via an arbitrary callback esphome#14035 by @kahrendt
- [media_player] Add more commands to support Sendspin esphome#12258 by @kahrendt (new-feature)
- [mdns] add Sendspin advertisement support esphome#14013 by @kahrendt
- [audio, speaker] Add support for decoding Ogg Opus files esphome#13967 by @kahrendt (new-feature) (breaking-change)
- [esp32_camera] Add support for sensors without JPEG support esphome#9496 by @mback2k (new-feature)
- [esp32_ble_server] add test for lambda characteristic esphome#14091 by @Rapsssito
- [socket] Log error when UDP socket requested on LWIP TCP-only platforms esphome#14089 by @bdraco
- [logger] Replace LogListener virtual interface with LogCallback struct esphome#14084 by @bdraco
- [core] Devirtualize call_loop() and mark_failed() in Component esphome#14083 by @bdraco
- [cse7761] Use constexpr for compile-time constants esphome#14081 by @bdraco
- [ci] Update lint message to recommend constexpr over static const esphome#14099 by @bdraco
- [e131] Replace std::map with std::vector for universe tracking esphome#14087 by @bdraco
- [web_server] Reduce set_json_id flash and stack usage esphome#14029 by @bdraco
- [core] Optimize WarnIfComponentBlockingGuard::finish() hot path esphome#14040 by @bdraco
- [audio] Support decoding audio directly from flash esphome#14098 by @kahrendt
- [opentherm] Remove deprecated opentherm_version config option esphome#14103 by @swoboda1337 (breaking-change)
- [esp32] Remove deprecated add_idf_component() parameters and IDF component refresh option esphome#14105 by @swoboda1337
- [i2c] Remove deprecated stop parameter overloads and readv/writev methods esphome#14106 by @swoboda1337
- [audio] Disable FLAC CRC validation to improve decoding effeciancy esphome#14108 by @kahrendt
- [json] Add SerializationBuffer for stack-first JSON serialization esphome#13625 by @bdraco
- [core] Use constexpr for PROGMEM arrays esphome#14127 by @bdraco
- [esp8266][web_server] Use constexpr for PROGMEM arrays in codegen esphome#14128 by @bdraco
- [core] Use constexpr for hand-written PROGMEM arrays in C++ esphome#14129 by @bdraco
- [e131] Drain all queued packets per loop iteration esphome#14133 by @bdraco
- [esp32] Bump ESP-IDF to 5.5.3 esphome#14122 by @swoboda1337
- [esp32] Bump ESP-IDF to 5.5.3.1, revert GATTS workaround esphome#14147 by @bdraco
- [esp32] Add engineering_sample option for ESP32-P4 esphome#14139 by @swoboda1337 (new-feature) (breaking-change)
- [wifi] Add band_mode configuration for ESP32-C5 dual-band WiFi esphome#14148 by @swoboda1337 (new-feature)
- [e131] Remove dead LWIP TCP code path from loop() esphome#14155 by @swoboda1337
- [safe_mode] Extract RTC_KEY constant for shared use esphome#14121 by @pgolawsk
- [nrf52,logger] Early debug esphome#11685 by @tomaszduda23 (new-feature)
- [logger] Fix loop disable optimization using wrong preprocessor guard esphome#14158 by @bdraco
- [core] Deduplicate base64 encode/decode logic esphome#14143 by @bdraco
- [usb_host] Implement disable_loop/enable_loop pattern for USB components esphome#14163 by @bdraco
- [api] Warn when clients connect with outdated API version esphome#14145 by @bdraco
- [api,ota,captive_portal] Fix fd leaks and clean up socket_ip_loop_monitored setup paths esphome#14167 by @bdraco
- [uptime] Use scheduler millis_64() for rollover-safe uptime tracking esphome#14170 by @bdraco
- [logger] Reduce UART driver heap waste on ESP32 esphome#14168 by @bdraco
- [api] Write protobuf encode output to pre-sized buffer directly esphome#14018 by @bdraco
- [mqtt] add missing precision in HA autodiscovery esphome#14010 by @Rapsssito
- [cc1101] actions to change general and tuner settings esphome#14141 by @sxtfov (new-feature)
- [epaper_spi] Fix color mapping for weact esphome#14134 by @clydebarrow
- [nrf52] print line number after crash in logs esphome#14165 by @tomaszduda23
- [ci] Suggest StringRef instead of std::string_view esphome#14183 by @bdraco
- [scheduler] Reduce lock acquisitions in process_defer_queue_ esphome#14107 by @bdraco
- [scheduler] Use relaxed memory ordering for atomic reads under lock esphome#14140 by @bdraco
- [scheduler] De-template and consolidate scheduler helper functions esphome#14164 by @bdraco
- [platformio] Add exponential backoff and session reset to download retries esphome#14191 by @bdraco
- [nextion] Add error log for failed HTTP status during TFT upload esphome#14190 by @edwardtfn
- [web_server_base] Remove unnecessary Component inheritance and modernize esphome#14204 by @bdraco
- [core] Conditionally compile get_loop_priority with USE_LOOP_PRIORITY esphome#14210 by @bdraco
- [http_request] Replace
std::list<Header>withstd::vectorinperform()chain esphome#14027 by @bdraco - [logger] Make tx_buffer_ compile-time sized esphome#14205 by @bdraco
- [libretiny] Tune oversized lwIP defaults for ESPHome esphome#14186 by @bdraco
- [core] Move CONF_OUTPUT_POWER into const.py esphome#14201 by @schdro
- [binary_sensor] Conditionally compile filter infrastructure esphome#14215 by @bdraco
- [sensor] Conditionally compile filter infrastructure esphome#14214 by @bdraco
- [text_sensor] Conditionally compile filter infrastructure esphome#14213 by @bdraco
- [openthread_info] Optimize: Devirtualize/unify esphome#14208 by @schdro
- [openthread] Add Thread version DEBUG trace esphome#14196 by @schdro
- [openthread] Refactor to optimize and match code rules esphome#14156 by @schdro
- [logger] Use subtraction-based line number formatting to avoid division esphome#14219 by @bdraco
- [core] Fix multiline log continuations without leading whitespace esphome#14217 by @swoboda1337
- [hdc302x] Add new component esphome#10160 by @joshuasing (new-component) (new-feature) (new-platform)
- [core] Avoid expensive modulo in LockFreeQueue for non-power-of-2 sizes esphome#14221 by @bdraco
- [remote_transmitter/remote_receiver] Rename _esp32.cpp to _rmt.cpp esphome#14226 by @swoboda1337
- [http_request] Retry update check on startup until network is ready esphome#14228 by @swoboda1337
- [esp32,core] Move CONF_ENABLE_OTA_ROLLBACK to core esphome#14231 by @tomaszduda23
- [nrf52,logger] generate crash magic in python esphome#14173 by @tomaszduda23
- [nfc] Fix logging tag for nfc helpers esphome#14235 by @jamesmyatt
- [core] Add pow10_int helper, replace powf in normalize_accuracy and sensor filters esphome#14114 by @bdraco
- [core] Move build_info_data.h out of application.h to fix incremental rebuilds esphome#14230 by @swoboda1337
- [version] Use C++17 nested namespace syntax esphome#14240 by @bdraco
- [switch] Use C++17 nested namespace syntax esphome#14241 by @bdraco
- [text] Use C++17 nested namespace syntax esphome#14242 by @bdraco
- [text_sensor] Use C++17 nested namespace syntax esphome#14243 by @bdraco
- [usb_host] Use C++17 nested namespace syntax esphome#14244 by @bdraco
- [i2c] Use C++17 nested namespace syntax esphome#14245 by @bdraco
- [ethernet] Use C++17 nested namespace syntax esphome#14246 by @bdraco
- [cse7766] Use C++17 nested namespace syntax esphome#14247 by @bdraco
- [network] Use C++17 nested namespace syntax esphome#14248 by @bdraco
- [esp32] Improve ESP32-P4 engineering sample warning message esphome#14252 by @swoboda1337
- [version] text sensor add option
hide_hashto restore the pre-2026.1 behavior esphome#14251 by @nagyrobi (new-feature) - [core] Prevent inlining of mark_matching_items_removed_locked_ on Thumb-1 esphome#14256 by @bdraco
- [esp32_ble_server] add max_clients option for multi-client support esphome#14239 by @RAR
- [web_server_idf] Pass std::function by rvalue reference esphome#14262 by @bdraco
- [api] Pass std::function by rvalue reference in state subscriptions esphome#14261 by @bdraco
- [core] Pass std::function by rvalue reference in scheduler esphome#14260 by @bdraco
- [core] Use custom deleter for SchedulerItem unique_ptr to prevent destructor inlining esphome#14258 by @bdraco
- [dlms_meter/kamstrup_kmp] Replace powf with pow10_int esphome#14125 by @bdraco
- [light] Add additional light effect test cases esphome#14266 by @bdraco
- [light] Replace std::lerp with lightweight lerp_fast in LightColorValues::lerp esphome#14238 by @bdraco
- [sensirion_common] Move sen5x’s sensirion_convert_to_string_in_place() function to sensirion_common esphome#14269 by @mikelawrence
- [config] Improve dimensions validation and fix online_image resize aspect ratio esphome#14274 by @swoboda1337
- [web_server] Fix uptime display overflow after ~24.8 days esphome#13739 by @bdraco
- Update webserver local assets to 20260225-155043 esphome#14275 by @esphomebot
- [ac_dimmer] Use a shared ESP32 GPTimer for multiple dimmers esphome#13523 by @Szpadel
- [core] more accurate check for leap year and valid day_of_month esphome#14197 by @ximex
- [api] Split ProtoVarInt::parse into 32-bit and 64-bit phases esphome#14039 by @bdraco
- [lcd_base] Fix millis() truncation to uint8_t esphome#14289 by @swoboda1337
- [shelly_dimmer] Fix millis overflow in ACK timeout check esphome#14288 by @swoboda1337
- [bl0942] Fix millis overflow in packet timeout check esphome#14285 by @swoboda1337
- [light] Fix millis overflow in transition progress and flash timing esphome#14292 by @swoboda1337
- [ble_presence] Fix millis overflow in presence timeout check esphome#14293 by @swoboda1337
- [lightwaverf] Fix millis overflow in send timeout check esphome#14294 by @swoboda1337
- [pn532] Replace millis zero sentinel with optional esphome#14295 by @swoboda1337
- [ld2420] Fix buffer overflows in command response parsing esphome#14297 by @swoboda1337
- [gp8403] Fix enum size mismatch in voltage register write esphome#14296 by @swoboda1337
- [mcp2515] Fix millis overflow in set_mode_ timeout esphome#14298 by @swoboda1337
- [wled] Fix millis overflow in blank timeout esphome#14300 by @swoboda1337
- [logger] Mark Logger and LoggerMessageTrigger as final esphome#14291 by @bdraco
- [mdns] Mark MDNSComponent as final esphome#14290 by @bdraco
- [ota] Mark OTA backend and component leaf classes as final esphome#14287 by @bdraco
- [api] Mark ListEntitiesIterator and InitialStateIterator as final esphome#14284 by @bdraco
- [web_server] Mark classes as final esphome#14283 by @bdraco
- [safe_mode] Mark SafeModeComponent and SafeModeTrigger as final esphome#14282 by @bdraco
- [core] ESP32: massively reduce main loop socket polling overhead by replacing select() esphome#14249 by @bdraco
- [ci] Add undocumented C++ API change checkbox and auto-label esphome#14317 by @bdraco
- Add socket compile tests for libretiny platforms esphome#14314 by @bdraco
- [core] Use placement new for global Application instance esphome#14052 by @bdraco
- [wifi] Use memcpy-based insertion sort for scan results esphome#13960 by @bdraco
- [libretiny] Use -Os optimization for ESPHome source on BK72xx (SDK remains at -O1) esphome#14322 by @bdraco
- [libretiny] Use C++17 nested namespace syntax esphome#14325 by @bdraco
- [esp_ldo] Add channels 1&2 support with additional option to enable it, add source voltage bypass/pass-through esphome#14177 by @p1ngb4ck (new-feature)
- [api] Add DEFROSTING to ClimateAction esphome#13976 by @lyubomirtraykov
- Update webserver local assets to 20260226-220330 esphome#14330 by @esphomebot
- [mipi_dsi] Add more Waveshare panels and comments esphome#14023 by @gtjoseph (new-feature)
- [time] Eliminate libc timezone bloat (~9.5KB flash ESP32, ~2% RAM on ESP8266) esphome#13635 by @bdraco (breaking-change)
- [web_server_idf] Prefer make_unique_for_overwrite for noninit recv buffer esphome#14279 by @bdraco
- [rp2040] Update arduino-pico framework from 3.9.4 to 5.5.0 esphome#14328 by @bdraco (breaking-change)
- [esp8266] Remove forced scanf linkage to save ~8KB flash esphome#13678 by @bdraco
- [usb_uart] Performance, correctness and reliability improvements esphome#14333 by @kbx81
- [esp32_touch] Migrate to new unified touch sensor driver (esp_driver_touch_sens) esphome#14033 by @swoboda1337 (new-feature)
- [esp32_ble] allow setting of min/max key_size and auth_req_mode esphome#7138 by @whitty (new-feature)
- [core] Extend fast select optimization to LibreTiny platforms esphome#14254 by @bdraco
- [audio] Bump microOpus to v0.3.4 esphome#14346 by @kahrendt
- [mdns] Update espressif/mdns to v1.10.0 esphome#14338 by @bdraco
- [esp32_hosted] Add configurable SDIO clock frequency esphome#14319 by @deirdreobyrne (new-feature)
- [core] Add millis_64() HAL function with native ESP32 implementation esphome#14339 by @bdraco
- [wifi] Remove stale TODO comment for ESP8266 callback deferral esphome#14347 by @bdraco
- [wifi] Use direct SDK APIs for LibreTiny SSID retrieval esphome#14349 by @bdraco
- [safe_mode] Add feature to explicitly mark a boot as successful esphome#14306 by @mcassaniti (new-feature)
- [ci] Skip memory impact target branch build when tests don’t exist esphome#14316 by @bdraco
- [wifi] Add LibreTiny component test configs esphome#14351 by @bdraco
- [core] Fix Application asm label for Mach-O using USER_LABEL_PREFIX esphome#14334 by @bdraco
- [host] Use native clock_gettime for millis_64() esphome#14340 by @bdraco
- [color] Use integer math in Color::gradient to reduce code size esphome#14354 by @bdraco
- [esp32] Enable
execute_from_psramfor P4 esphome#14329 by @clydebarrow (new-feature) - [zephyr] Use native k_uptime_get() for millis_64() esphome#14350 by @bdraco
- [component] Devirtualize call_dump_config esphome#14355 by @bdraco
- [ci] Add PR title format check esphome#14345 by @swoboda1337
- [rp2040] Use native time_us_64() for millis_64() esphome#14356 by @bdraco
- [sht3xd] Allow sensors that don’t support serial number read esphome#14224 by @lwratten
- [sen6x] Add SEN6x sensor support esphome#12553 by @mebner86 (new-component) (new-feature) (new-platform)
- [ci] Fix C++ unit tests missing time component dependency esphome#14364 by @bdraco
- [gps] Fix codegen deadlock when automations reference sibling sensors esphome#14365 by @swoboda1337
- [web_server] Add climate preset, fan mode, and humidity support esphome#14061 by @rwagoner
- [sen6x] Fix test sensor ID collisions with sen5x esphome#14367 by @bdraco
- [esp32] Wrap printf/vprintf/fprintf to eliminate _vfprintf_r (~11 KB flash) esphome#14362 by @bdraco
- [gt911] Support for interrupt line via IO Expander (resubmit) esphome#14358 by @PedanticAvenger (new-feature)
- [core] Make register_component protected, remove runtime checks esphome#14371 by @bdraco
- [api] Outline keepalive ping logic from APIConnection::loop() esphome#14374 by @bdraco
- [core] Inline set_component_state_ and use it in Application esphome#14369 by @bdraco
- [core] Move CONF_STOP_BITS, CONF_DATA_BITS, CONF_PARITY to const.py esphome#14379 by @bdraco
- [ld2410][ld2412] Fix signed char causing incorrect distance values esphome#14380 by @bdraco
- [uart] Replace wake-on-RX task+queue with direct ISR callback esphome#14382 by @bdraco
- [ci] Fix TypeError in ci-custom.py when POST lint checks fail esphome#14378 by @bdraco
- [ld2450] Use atan2f for angle calculation esphome#14388 by @bdraco
- [ld2450] Use integer dedup for direction text sensor updates esphome#14386 by @bdraco
- [ld2450] Single-pass zone target counting esphome#14387 by @bdraco
- [core] Extract set_status_flag_ helper to deduplicate status_set methods esphome#14384 by @bdraco
- [uart] Enable wake-on-RX by default on ESP32 esphome#14391 by @bdraco
- [api] Use StringRef for user service string arguments esphome#13974 by @bdraco
- [preferences] Reduce heap churn with small inline buffer optimization esphome#13259 by @bdraco
- [time,api] Send pre-parsed timezone struct over protobuf esphome#14233 by @bdraco
- [rtttl] improve comments Part 2 esphome#13971 by @ximex
- [openthread] Disable default enabled OT diag code esphome#14399 by @schdro
- [api] Remove virtual destructor from ProtoMessage esphome#14393 by @bdraco
- [ld2410] Add UART mock integration test for LD2410 component esphome#14377 by @bdraco
- [core] Wake main loop from ISR in enable_loop_soon_any_context() esphome#14383 by @bdraco
- [openthread] Disable default enabled OT console build esphome#14390 by @schdro
- Create integration tests for modbus esphome#14395 by @exciton
- Use cached files on network errors in external_files esphome#14055 by @Copilot
- [core] Move millis_64 rollover tracking out of Scheduler esphome#14360 by @bdraco
- [core] Auto-wrap static strings in PROGMEM on ESP8266 via TemplatableValue esphome#13885 by @bdraco
- [light] Replace powf gamma with pre-computed lookup tables (LUT) esphome#14123 by @bdraco
- [web_server] Avoid temporary std::string allocations in request parameter parsing esphome#14366 by @bdraco
- [core] Deduplicate ControllerRegistry notify dispatch loop esphome#14394 by @bdraco
- [light] Resolve effect names to indices at codegen time esphome#14265 by @bdraco
- [socket] Devirtualize socket abstraction layer esphome#14398 by @bdraco
- [core] Compile-time detection of loop() overrides esphome#14405 by @bdraco
- [mcp23016] Fix register access to use 16-bit paired transactions esphome#13676 by @netixx
- [socket] Fix pre-existing bugs found during socket devirtualization review esphome#14404 by @bdraco
- [core] Fix compile-time loop() detection for multiple inheritance esphome#14411 by @bdraco
- [core] Add ESP8266 support to wake_loop_any_context() esphome#14392 by @bdraco
- [core] Eliminate __udivdi3 in millis() on ESP32 and RP2040 esphome#14409 by @bdraco
- [const] Move CONF_WATCHDOG esphome#14415 by @LinoSchmidt
- [tests] Fix flaky log assertion race in oversized payload tests esphome#14414 by @bdraco
- [ci] Skip PR title check for dependabot PRs esphome#14418 by @swoboda1337
- [media_source] Add new Media Source platform component esphome#14417 by @kahrendt (new-component) (new-feature)
- [lps22] Add support for the LPS22DF variant esphome#14397 by @melak (new-feature)
- [ld2450] Clear all related sensors when a target is not being tracked esphome#13602 by @ccutrer
- [core] Inline HighFrequencyLoopRequester::is_high_frequency() esphome#14423 by @bdraco
- [openthread] Add tx power option esphome#14200 by @schdro (new-feature)
- [const][uart][usb_uart][weikai][core] Move constants to components/const esphome#14430 by @clydebarrow
- [speaker] Add off on capability to media player esphome#9295 by @rwrozelle (new-feature)
- [socket] Cache lwip_sock pointers and inline ready() chain esphome#14408 by @bdraco
- [core] Pack entity string properties into PROGMEM-indexed uint8_t fields esphome#14171 by @bdraco
- [ci] Add lint check to prevent powf in core and base entity platforms esphome#14126 by @bdraco
- [bk72xx] Fix ~100ms loop stalls by raising main task priority esphome#14420 by @bdraco
- [core] Inline trivial Component state accessors esphome#14425 by @bdraco
- [ci] Add code-owner-approved label workflow esphome#14421 by @bdraco
- [usb_uart] Don’t claim interrupt interface for ch34x esphome#14431 by @clydebarrow
- [rtttl] add new codeowner esphome#14440 by @ximex
- [tests] Fix integration test race condition in PlatformIO cache init esphome#14435 by @swoboda1337
- [globals] Fix handling of string booleans in yaml esphome#14447 by @jesserockz
- [core] add a StaticTask helper to manage task lifecycles esphome#14446 by @kahrendt
- [core] Replace custom esphome::optional with std::optional esphome#14368 by @bdraco
- [media_source] Clarify threading contract esphome#14433 by @kahrendt
- [core] improve help text for —device option, mention
OTAesphome#14445 by @tvogel - [integration] Add set method to publish and save sensor value esphome#13316 by @JiriPrchal (new-feature)
- [runtime_stats] Use micros() for accurate per-component timing esphome#14452 by @bdraco
- [core] Call loop() directly in main loop, bypass call() indirection esphome#14451 by @bdraco
- [ld2412] Add integration tests with mock UART esphome#14448 by @bdraco
- [sx127x] Fix preamble MSB register always written as zero esphome#14457 by @swoboda1337
- [remote_base][remote_receiver] Fix OOB access in pronto comparison and RMT buffer allocation esphome#14459 by @swoboda1337
- [pn7160][pn7150][pn532] Fix tag purge skipping, NDEF bounds check, and NDEF length byte order esphome#14460 by @swoboda1337
- [fingerprint_grow] Fix OOB write and uint16 overflow esphome#14462 by @swoboda1337
- [ld2420] Fix buffer overflows in simple mode, energy mode, and calibration esphome#14458 by @swoboda1337
- [mixer][resampler][speaker] Use core static task manager esphome#14454 by @kahrendt
- [inkplate][ezo_pmp][ezo][packet_transport] Fix use-after-free bugs esphome#14467 by @swoboda1337
- [esp32_improv][rf_bridge][esp32_ble_server][display][lvgl][pipsolar] Fix unsigned integer underflows esphome#14466 by @swoboda1337
- [ci] Add missing issues: write permission to codeowner approval workflow esphome#14477 by @bdraco
- [ds2484] Fix read64() using uint8_t accumulator instead of uint64_t esphome#14479 by @swoboda1337
- [sgp30] Fix serial number truncation from 48-bit to 24-bit esphome#14478 by @swoboda1337 (breaking-change)
- [zwave_proxy] Fix uint8_t overflow for buffer index and frame end esphome#14480 by @swoboda1337
- [ai] Add docs note about keeping component index pages in sync esphome#14465 by @bharvey88
- [tests] Fix flaky uart_mock integration tests esphome#14476 by @bdraco
- [ci] Fix codeowner approval label workflow for fork PRs esphome#14490 by @bdraco
- [packet_transport] Minimise heap allocations esphome#14482 by @clydebarrow
- [openthread] Cache is_connected() for cheap inline access esphome#14484 by @rwrozelle
- [network] Inline network::is_connected() and ethernet is_connected() esphome#14464 by @bdraco
- [api] Devirtualize frame helper calls when protocol is fixed at compile time esphome#14468 by @bdraco
- [dfrobot_sen0395][sx1509] Fix structural bugs esphome#14494 by @swoboda1337
- [veml7700] Fix initial settling timeout using raw enum instead of milliseconds esphome#14487 by @swoboda1337
- [ssd1322][ssd1325][ssd1327] Fix nibble mask bug in grayscale draw_pixel esphome#14496 by @swoboda1337
- [sht4x][grove_tb6612fng] Fix logic bugs esphome#14497 by @swoboda1337
- [openthread] static log level code quality improvement esphome#14456 by @rwrozelle (new-feature) (breaking-change)
- [dfplayer][ufire_ise][ufire_ec][qmp6988][atm90e26] Fix wrong operators and masks esphome#14491 by @swoboda1337
- [pn532_spi] Fix preamble check logic and OOB access when full_len is zero esphome#14486 by @swoboda1337
- [ota] Devirtualize OTA backend calls esphome#14473 by @bdraco
- [GPS] fix component Python declaration to match C++ implementation esphome#14519 by @oarcher
- [sim800l][tormatic][tx20] Fix OOB access, div-by-zero, and off-by-one esphome#14512 by @swoboda1337
- [rc522][sml][kamstrup_kmp] Fix buffer bounds checks esphome#14515 by @swoboda1337
- [haier][bedjet][vbus][lightwaverf] Fix buffer overflow bugs esphome#14493 by @swoboda1337
- [alpha3][mpu6886][emc2101] Fix copy-paste bugs esphome#14492 by @swoboda1337
- [usb_cdc_acm][scd4x][pulse_counter][mopeka_std_check][ruuvi_ble] Fix assorted one-liner bugs esphome#14495 by @swoboda1337
- [audio_file] New component for embedding files into firmware esphome#14434 by @kahrendt (new-component) (new-feature)
- [wled][lcd_base][touchscreen][ee895] Fix off-by-one, buffer overrun, empty deref, and uninitialized pointers esphome#14513 by @swoboda1337
- [nfc] Fix off-by-one in NDEF message parsing esphome#14485 by @swoboda1337
- [wifi] Cache is_connected() for cheap inline access esphome#14463 by @bdraco
- [xiaomi_ble][pvvx_mithermometer][atc_mithermometer] Add BLE service data bounds checks esphome#14514 by @swoboda1337
- [modbus] Fix timing bugs and better adhere to spec esphome#8032 by @exciton
- [usb_uart][nextion][feedback][whirlpool][packet_transport][he60r][hc8][runtime_stats] Fix millis() wrapping bugs esphome#14474 by @swoboda1337
- [cse7761][ads1115][tmp1075][matrix_keypad][seeed_mr60bha2] Fix assorted bugs esphome#14518 by @swoboda1337
- [audio] Extract detect_audio_file_type helper esphome#14507 by @kahrendt
- [rp2040] Update arduino-pico to 5.5.1 and fix WiFi AP fallback esphome#14500 by @bdraco
- [st7735][st7789v][st7920] Fix display buffer overflows and dead code esphome#14511 by @swoboda1337
- [uart] init tx_pin, rx_pin, flow control, rx_buffer_size esphome#14524 by @tomaszduda23
- [openthread][ethernet][wifi] Add IPv6 address array bounds assert esphome#14488 by @swoboda1337
- [audio_file] Add media source platform esphome#14436 by @kahrendt (new-feature)
- [ethernet] add get_eth_handle() function esphome#14527 by @Gnuspice
- [host] Add null checks for getenv and fopen in preferences esphome#14531 by @swoboda1337
- [bluetooth_proxy] Add null checks for api_connection esphome#14536 by @swoboda1337
- [ble_nus] Add uart support esphome#14320 by @tomaszduda23 (new-feature)
- [sx127x][sx126x][max6956] Fix null deref, unterminated string, and pin bounds check esphome#14529 by @swoboda1337
- [mipi_dsi][e131] Fix semaphore cast, missing return, and light count overread esphome#14530 by @swoboda1337
- [esp32] Fix wrong variable usage in P4 pin validation error msg esphome#14539 by @ximex
- [esp32] Fix ESP32-S3 pin validation error message esphome#14540 by @ximex
- [nrf52] prepare for usb cdc esphome#14174 by @tomaszduda23
- [core] Move entity icon strings to PROGMEM on ESP8266 esphome#14437 by @bdraco (breaking-change)
- [core] Replace Application name/friendly_name std::string with StringRef esphome#14532 by @bdraco
- [rp2040] Fix Pico W LED pin and auto-generate board definitions for arduino-pico 5.5.x esphome#14528 by @bdraco (new-feature)
- [hlk_fm22x] Fix oversized response rejection breaking GET_ALL_FACE_IDS esphome#14506 by @bdraco
- [ci] Use pull_request_target for codeowner approved label workflow esphome#14561 by @bdraco
- [sgp4x] Fix undefined behavior from mutating entity config at runtime esphome#14562 by @bdraco
- [rtttl] Add AudioStreamInfo and set volume esphome#14439 by @ximex
- [core] Move device class strings to PROGMEM on ESP8266 esphome#14443 by @bdraco (breaking-change)
- [tm1638][rp2040_pio_led_strip][atm90e32] Fix bounds checks and off-by-one esphome#14559 by @swoboda1337
- [api] Devirtualize protobuf encode/calculate_size esphome#14449 by @bdraco
- [multiple] Add default initializers to uninitialized member variables esphome#14556 by @swoboda1337
- [esp32_ble_server][espnow][time] Fix logic bugs esphome#14553 by @swoboda1337
- [multiple] Fix cast/operator precedence bugs esphome#14560 by @swoboda1337
- [noblex] Fix IR receive losing decoded bytes between calls esphome#14533 by @swoboda1337
- [light] Fix unsigned underflow in addressable scan effect esphome#14546 by @swoboda1337
- [pid][nextion][pn532_i2c][pipsolar] Fix copy-paste and logic bugs esphome#14551 by @swoboda1337
- [esp32_ble_server][weikai][ade7880] Fix copy-paste bugs esphome#14552 by @swoboda1337
- [multiple] Fix assorted medium-severity bugs esphome#14555 by @swoboda1337
- [bmp581_base][bl0906] Fix 24-bit sign extension bugs esphome#14558 by @swoboda1337
- [shelly_dimmer][lvgl][seeed_mr60fda2][packet_transport] Fix buffer bounds checks esphome#14534 by @swoboda1337
- [ltr501][pvvx_mithermometer][smt100] Convert static locals to instance members esphome#14569 by @swoboda1337
- [iaqcore][scd30][sen21231][beken_spi_led_strip] Fix uninitialized variables and missing error checks esphome#14568 by @swoboda1337
- [lightwaverf] Fix ISR safety issues esphome#14563 by @swoboda1337
- [mipi_rgb] Fix byte order and dirty bounds in fill() esphome#14537 by @swoboda1337
- [http_request] Make TLS buffer configurable on ESP8266 esphome#14009 by @AndreKR (new-feature)
- [climate][haier][template][core] Relocate CONF_CURRENT_TEMPERATURE to general const file esphome#14503 by @rsre
- [api] Sync api.proto from aioesphomeapi esphome#14579 by @bdraco
- [openthread] move esp functions into correct file esphome#14588 by @rwrozelle
- [nrf52][zephyr] support for multi on rate callbacks esphome#14557 by @tomaszduda23
- [uart] Add error message when initializing UART with unsupported configuration esphome#13229 by @sredman
- [uart] Fully enable raw mode with host serial esphome#14573 by @puddly
- [captive_portal] Enable support for RP2040 esphome#14505 by @bdraco
- [bluetooth_proxy] Add BLE connection parameters API esphome#14577 by @bdraco
- [core] Merge set_name + set_entity_strings into configure_entity_ esphome#14444 by @bdraco
- [api] Single-pass protobuf encode for BLE proxy advertisements esphome#14575 by @bdraco
- [api] Inline APIServer::is_connected() for common no-arg path esphome#14574 by @bdraco
- [core] Inline status_clear_warning/error fast path esphome#14571 by @bdraco
- [component] Fix components for compatibility with stricter compilers esphome#14545 by @diorcety
- [uart][usb_uart] Add debug_prefix option to distinguish multiple defined uarts in log esphome#14525 by @p1ngb4ck (new-feature)
- [ci] Add RP2350 to PR template test environment esphome#14599 by @bdraco
- [ld2420] Add integration tests with mock UART esphome#14471 by @bdraco
- [i2s_audio] Include legacy driver IDF component when use_legacy is set esphome#14613 by @bdraco
- [api] Fix value-initialization of DeviceInfoResponse esphome#14615 by @bdraco
- [vbus][rf_bridge][sensirion_common] Add buffer size guards esphome#14597 by @swoboda1337
- [api] Add force proto field option to skip zero checks on hot path esphome#14610 by @bdraco
- [uart] Return
flushresult, expose timeout via config esphome#14608 by @kbx81 (new-feature) - [usb_uart] Return
flushresult, expose timeout via config esphome#14616 by @kbx81 (new-feature) - [nrf52, ota] ble and serial OTA based on mcumgr esphome#11932 by @tomaszduda23 (new-component) (new-feature) (new-platform)
- [api] Inline varint and encode_varint_raw fast paths for hot loop performance esphome#14607 by @bdraco
- [nrf52] allow to update OTA via cmd esphome#12344 by @tomaszduda23 (new-platform)
- [serial_proxy] New component esphome#13944 by @kbx81 (new-component) (new-feature)
- [usb_uart] ch34x chip-type & port-count enumeration esphome#14544 by @p1ngb4ck
- [ethernet] Fix commit 3f700bac1cebf7eb6ff3b20a87d8c8af5cb9fc41 esphome#14618 by @diorcety
- [ble_nus] make ble_nus timeout shorter than watchdog esphome#14619 by @tomaszduda23
- [ci] Add medium-pr label for PRs with ≤100 lines changed esphome#14628 by @bdraco
- [mixer_speaker] Add task debounce esphome#14581 by @kbx81
- [i2s_audio] Fix mono sample swap and block 8-bit mono on ESP32 esphome#14516 by @swoboda1337
- [esp32_ble] Optimize BLE event hot path performance esphome#14627 by @bdraco
- [scheduler] Use
std::atomic<uint8_t>instead ofstd::atomic<bool>for remove flag esphome#14626 by @bdraco - [api] Inline fast path of try_to_clear_buffer esphome#14630 by @bdraco
- [core] Skip zero-initialization of StaticVector data array esphome#14592 by @bdraco
- [esp32_ble] Inline ble_addr_to_uint64 to eliminate call overhead esphome#14591 by @bdraco
- [modbus] Fix timeout for non-hardware UARTs (e.g., USB UART) esphome#14614 by @bdraco
- [rp2040] Wrap printf/vprintf/fprintf to eliminate _vfprintf_r (~9.2 KB flash) esphome#14622 by @bdraco (breaking-change)
- [esp8266] Wrap printf/vprintf/fprintf to eliminate _vfiprintf_r (~1.6 KB flash) esphome#14621 by @bdraco (breaking-change)
- [ld2450] Add integration tests with mock UART esphome#14611 by @bdraco
- [api] Bump noise-c to 0.1.11 esphome#14632 by @bdraco
- [const] Move CONF_ENABLE_FULL_PRINTF to const.py esphome#14633 by @bdraco
- [core] Pack entity flags into configure_entity_() and protect setters esphome#14564 by @bdraco
- [socket] Add socket wake support for RP2040 esphome#14498 by @bdraco
- [api] Skip state_action_() call in noise data path esphome#14629 by @bdraco
- [nextion] Add configurable HTTP parameters for TFT upload esphome#14234 by @edwardtfn (new-feature) (breaking-change)
- [multiple] Add default initializers to uninitialized member variables esphome#14636 by @swoboda1337
- [multiple] Add array bounds checks esphome#14635 by @swoboda1337
- [ci] Match symbols with changed signatures in memory impact analysis esphome#14600 by @bdraco
- [ci-custom] Directions on constant hoisting esphome#14637 by @clydebarrow
- [multiple] Add division by zero guards esphome#14634 by @swoboda1337
- [multiple] Fix undefined behavior across components esphome#14639 by @swoboda1337
- [runtime_image][st7701s] Fix BMP decoder and LCD init bugs esphome#14663 by @swoboda1337
- [api][at581x][vl53l0x] Fix bounds check issues in 3 components esphome#14660 by @swoboda1337
- [hmc5883l][mmc5603][honeywellabp2][xgzp68xx][max9611] Fix uninitialized members esphome#14659 by @swoboda1337
- [wifi][captive_portal][heatpumpir][es8388] Fix wrong behavior in 4 components esphome#14657 by @swoboda1337
- [multiple] Remove unnecessary heap allocations in 4 components esphome#14656 by @swoboda1337
- [multiple] Fix crashes from malformed external input (batch 2) esphome#14651 by @swoboda1337
- [multiple] Fix wrong behavior in 5 components esphome#14647 by @swoboda1337
- [multiple] Fix minor bugs in 8 components esphome#14650 by @swoboda1337
- [demo] Fix alarm control panel auth bypass when code is omitted esphome#14645 by @swoboda1337
- [ble_scanner] Escape special characters in JSON output esphome#14664 by @swoboda1337
- [multiple] Fix wrong behavior in sensor calculations and drivers esphome#14644 by @swoboda1337
- [api][serial_proxy] Fix dangling pointer esphome#14640 by @kbx81
- [canbus] Fix multiple MCP component bugs esphome#14461 by @swoboda1337
- [multiple] Fix reliability issues in 5 components esphome#14655 by @swoboda1337
- [ci] Make codeowner label update non-fatal for fork PRs esphome#14668 by @bdraco
- [ci] Skip YAML anchor keys in integration fixture component extraction esphome#14670 by @bdraco
- [multiple] Fix crashes from malformed external input esphome#14643 by @swoboda1337
- [sen6x] fix memory leak issue esphome#14623 by @tuct
- [cpptests] support testing platform components esphome#13075 by @jpeletier
- [serial_proxy] Reduce loop() overhead by disabling when idle and splitting read path esphome#14673 by @bdraco
- [bl0940] Fix reset_calibration() declaration missing from header esphome#14676 by @anunayk
- [core] ESP-IDF compilation fixes esphome#14541 by @diorcety
- [rp2040] Use picotool for BOOTSEL upload and improve upload UX esphome#14483 by @bdraco (new-feature)
- [api] Inline ProtoVarInt::parse fast path and return consumed in struct esphome#14638 by @bdraco
- [api] Replace
std::vector<uint8_t>with APIBuffer to skip zero-fill esphome#14593 by @bdraco - [scheduler] Replace unique_ptr with raw pointers, add leak detection esphome#14620 by @bdraco
- [core] Require explicit synchronous= for register_action esphome#14606 by @bdraco
- [log] Detect early log calls before logger init and optimize hot path esphome#14538 by @bdraco
- [rp2040_ble] Add BLE component for RP2040/RP2350 esphome#14603 by @bdraco (new-component) (new-feature)
- [esp32_hosted] Bump esp_wifi_remote and esp_hosted versions esphome#14680 by @swoboda1337
- [runtime_image] Add support for 8bit BMPs and fix existing issues esphome#10733 by @mahumpula (new-feature)
- [speaker_source] Add new media player esphome#14649 by @kahrendt (new-component) (new-feature) (new-platform)
- [config] Allow !extend/!remove on components without id in schema esphome#14682 by @swoboda1337
- [core] Warn on crystal frequency mismatch during serial upload esphome#14582 by @bdraco
- [dew_point] Add dew_point sensor component esphome#14441 by @CFlix (new-component) (new-feature) (new-platform)
- [socket] Fix RP2040 TCP race condition between lwip callbacks and main loop esphome#14679 by @bdraco
- [esp32] gpio type improvements esphome#14517 by @ximex
- [bme280] Change communication error message to include “no response” hint. esphome#14686 by @CFlix
- [rp2040] Add HardFault crash handler with backtrace esphome#14685 by @bdraco
- [core] Fix waiting for port indefinitely esphome#14688 by @kbx81
- [logger] Fix UART selection not applied before
pre_setup()esphome#14690 by @kbx81 - Enable the address and behavior sanitizers for C++ component unit tests esphome#13490 by @ademuri
- [socket] Fix RP2040 heap corruption from malloc in lwip accept callback esphome#14687 by @bdraco
- [micronova] Add command queue esphome#12268 by @edenhaus (breaking-change)
- [multiple] Convert static function locals to member variables esphome#14689 by @swoboda1337
- [speaker_source] Add playlist management esphome#14652 by @kahrendt (new-feature)
- [sensirion_common] Use SmallBufferWithHeapFallback helper esphome#14270 by @mikelawrence
- [speaker_source] Add shuffle support esphome#14653 by @kahrendt (new-feature)
- Bump pyupgrade to v3.21.2 for Python 3.14 compatibility esphome#14699 by @swoboda1337
- [dashboard] Use sys.executable for dashboard subprocess commands esphome#14698 by @swoboda1337
- [speaker_source] Add announcement pipeline esphome#14654 by @kahrendt (new-feature)
- [socket] Fix LWIP PCB use-after-free on ESP8266 and RP2040 esphome#14706 by @bdraco
- [esp32] Add crash handler to capture and report backtrace across reboots esphome#14709 by @bdraco (new-feature)
Dependency Changes
Section titled “Dependency Changes”- Bump docker/build-push-action from 6.19.1 to 6.19.2 in /.github/actions/build-image esphome#13965 by @dependabot[bot]
- Bump github/codeql-action from 4.32.2 to 4.32.3 esphome#13981 by @dependabot[bot]
- Bump ruff from 0.15.0 to 0.15.1 esphome#13980 by @dependabot[bot]
- Bump actions/stale from 10.1.1 to 10.2.0 esphome#14036 by @dependabot[bot]
- Bump pillow from 11.3.0 to 12.1.1 esphome#14048 by @dependabot[bot]
- Bump cryptography from 45.0.1 to 46.0.5 esphome#14049 by @dependabot[bot]
- Bump esptool from 5.1.0 to 5.2.0 esphome#14058 by @dependabot[bot]
- Bump github/codeql-action from 4.32.3 to 4.32.4 esphome#14161 by @dependabot[bot]
- Bump pylint from 4.0.4 to 4.0.5 esphome#14160 by @dependabot[bot]
- Bump ruff from 0.15.1 to 0.15.2 esphome#14159 by @dependabot[bot]
- Bump aioesphomeapi from 44.0.0 to 44.1.0 esphome#14232 by @dependabot[bot]
- Bump aioesphomeapi from 44.1.0 to 44.2.0 esphome#14324 by @dependabot[bot]
- Bump ruff from 0.15.2 to 0.15.3 esphome#14323 by @dependabot[bot]
- Bump actions/upload-artifact from 6.0.0 to 7.0.0 esphome#14326 by @dependabot[bot]
- Bump ruff from 0.15.3 to 0.15.4 esphome#14357 by @dependabot[bot]
- Bump actions/download-artifact from 7.0.0 to 8.0.0 esphome#14327 by @dependabot[bot]
- Bump click from 8.1.7 to 8.3.1 esphome#11955 by @dependabot[bot]
- Bump github/codeql-action from 4.32.4 to 4.32.5 esphome#14416 by @dependabot[bot]
- Bump the docker-actions group across 1 directory with 2 updates esphome#14520 by @dependabot[bot]
- Bump github/codeql-action from 4.32.5 to 4.32.6 esphome#14566 by @dependabot[bot]
- Bump docker/build-push-action from 6.19.2 to 7.0.0 in /.github/actions/build-image esphome#14567 by @dependabot[bot]
- Bump ruff from 0.15.4 to 0.15.5 esphome#14565 by @dependabot[bot]
- Bump aioesphomeapi from 44.2.0 to 44.3.1 esphome#14580 by @dependabot[bot]
- Bump aioesphomeapi from 44.3.1 to 44.4.0 esphome#14609 by @dependabot[bot]
- Bump aioesphomeapi from 44.4.0 to 44.5.0 esphome#14617 by @dependabot[bot]
- Bump aioesphomeapi from 44.5.0 to 44.5.1 esphome#14624 by @dependabot[bot]
- Bump setuptools from 82.0.0 to 82.0.1 esphome#14665 by @dependabot[bot]
- Bump tornado from 6.5.4 to 6.5.5 esphome#14704 by @dependabot[bot]
- Bump aioesphomeapi from 44.5.1 to 44.5.2 esphome#14849 by @dependabot[bot]