ESPHome 2026.9.0 - September 2026
Read the ESPHome 2026.9.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”New Features
Section titled “New Features”- [mitsubishi_cn105] Add Fahrenheit support esphome#15488 by @crnjan (new-feature)
- [modbus_client] Add continuous option to the read and send actions esphome#18542 by @exciton (new-feature)
- [online_image] Support image format auto-detection esphome#16337 by @guillempages (new-feature)
- [network] Add tcp_send_buffer option esphome#18610 by @bdraco (new-feature)
- [audio_http] Add persistent ring buffer option esphome#18708 by @n-IA-hane (new-feature)
- [modbus_controller] Add continuous polling option esphome#18080 by @exciton (new-feature)
- [zigbee][time] Add zigbee time component on esp32 esphome#18656 by @luar123 (new-feature)
- [lvgl] Implement list widget esphome#18018 by @clydebarrow (new-feature)
- [rp2_ble_tracker] Automation triggers and scan actions esphome#18717 by @Bl00d-B0b (new-feature)
- [sfa40] Add SFA40 sensor support esphome#17815 by @NoQuarrel (new-component) (new-feature) (new-platform)
- [ethernet] Add spi_id option to attach to an existing SPI bus esphome#18530 by @jesserockz (new-feature)
- [emontx] Add apparent power (AP) and frequency (F) sensor support esphome#18586 by @FredM67 (new-feature)
- [lvgl] Add table widget esphome#18422 by @clydebarrow (new-feature)
- [remote_transmitter] ISR-driven transmission and non_blocking support on RTL8720C esphome#18648 by @kbx81 (new-feature)
- [climate_ir_lg] Fix #10867 - advanced vert. swing, setting temp. in heat/cool mode, jet mode decoding, other fixes + refactor esphome#10875 by @ireun (new-feature)
- [remote_transmitter] ISR-driven transmission and non_blocking support on BK7231N/BK7238 esphome#18660 by @kbx81 (new-feature)
- [hoermann_hcp] Add buttons to hoermann_hcp esphome#18544 by @zweckj (new-feature) (new-platform)
- [modbus_controller] Writer entities as their own hub device; heap-free esphome#18082 by @exciton (new-feature) (breaking-change)
- [improv_serial] Add uart bus support and host integration test esphome#18794 by @bdraco (new-feature)
- [provisioning] Shut down the Wi-Fi AP and captive portal when the window closes esphome#17466 by @kbx81 (new-feature)
- [runtime_image] Add support for QOI images esphome#16945 by @guillempages (new-feature)
- [tuya] Add water_heater platform esphome#17323 by @iago-veiga (new-feature) (new-platform)
- [modbus_controller] Replace register_count/force_new_range with reuse_previous_range esphome#18085 by @exciton (new-feature) (breaking-change)
- [mk2pvrouter] Add Mk2PVRouter component with sensor support esphome#8487 by @FredM67 (new-component) (new-feature) (new-platform)
- [mipi_rgb] Add Elecrow Crowpanel Advance 7 esphome#18810 by @clydebarrow (new-feature)
- [lvgl] Add radial and conical gradients esphome#18818 by @clydebarrow (new-feature)
- [api] Add description and example metadata to user-defined actions esphome#18881 by @bharvey88 (new-feature) (breaking-change)
- [improv_serial] Support non-Wi-Fi network interfaces esphome#17598 by @kbx81 (new-feature)
- [sen6x] Add VOC/NOx algorithm tuning esphome#18779 by @bharvey88 (new-feature)
- [epaper_spi] Add UC8179 mono driver and Seeed reTerminal E1001 model esphome#17568 by @jesserockz (new-feature)
- [esp32][mipi_rgb] Add ESP32-S31 support for execute_from_psram esphome#18929 by @clydebarrow (new-feature)
- [d01] add D01 pm2.5 sensor support esphome#17788 by @ch604 (new-component) (new-feature) (new-platform)
- [ota] Add Noise encryption to the OTA platform esphome#18489 by @bdraco (new-feature)
- [ds1603l] New sensor DS1603L V1.0 esphome#13133 by @JakeLC15 (new-component) (new-feature) (new-platform)
- [snapshot][SDL] Display headless mode and snapshots esphome#17917 by @clydebarrow (new-component) (new-feature) (new-platform)
New Components
Section titled “New Components”- [noise] Add shared noise component and move api noise primitives esphome#18490 by @bdraco (new-component)
- [sfa40] Add SFA40 sensor support esphome#17815 by @NoQuarrel (new-component) (new-feature) (new-platform)
- [mk2pvrouter] Add Mk2PVRouter component with sensor support esphome#8487 by @FredM67 (new-component) (new-feature) (new-platform)
- [d01] add D01 pm2.5 sensor support esphome#17788 by @ch604 (new-component) (new-feature) (new-platform)
- [ds1603l] New sensor DS1603L V1.0 esphome#13133 by @JakeLC15 (new-component) (new-feature) (new-platform)
- [snapshot][SDL] Display headless mode and snapshots esphome#17917 by @clydebarrow (new-component) (new-feature) (new-platform)
New Platforms
Section titled “New Platforms”- [sfa40] Add SFA40 sensor support esphome#17815 by @NoQuarrel (new-component) (new-feature) (new-platform)
- [hoermann_hcp] Add buttons to hoermann_hcp esphome#18544 by @zweckj (new-feature) (new-platform)
- [tuya] Add water_heater platform esphome#17323 by @iago-veiga (new-feature) (new-platform)
- [mk2pvrouter] Add Mk2PVRouter component with sensor support esphome#8487 by @FredM67 (new-component) (new-feature) (new-platform)
- [d01] add D01 pm2.5 sensor support esphome#17788 by @ch604 (new-component) (new-feature) (new-platform)
- [ds1603l] New sensor DS1603L V1.0 esphome#13133 by @JakeLC15 (new-component) (new-feature) (new-platform)
- [snapshot][SDL] Display headless mode and snapshots esphome#17917 by @clydebarrow (new-component) (new-feature) (new-platform)
Breaking Changes
Section titled “Breaking Changes”- [esp32_hosted] Require ESP-IDF 5.3 or newer esphome#18417 by @bdraco (breaking-change)
- [runtime_image] keep decoder allocated esphome#18488 by @guillempages (breaking-change)
- [modbus_controller] Rename custom_command to custom_pdu; reject address 0; retire skip_updates esphome#18652 by @exciton (breaking-change)
- [preferences] modify IntervalSyncer to be a PollingComponent esphome#14370 by @rwrozelle (breaking-change)
- [api] Treat homeassistant.event variables as lambdas esphome#18759 by @bdraco (breaking-change)
- [esp32] Apply custom eFuse MAC as base MAC for all interfaces esphome#18452 by @kbx81 (breaking-change)
- [modbus_controller] Writer entities as their own hub device; heap-free esphome#18082 by @exciton (new-feature) (breaking-change)
- [api] Deprecate media player supports_pause field esphome#18801 by @bdraco (breaking-change)
- [modbus_controller] Apply the write offset byte-accurately on switch and output esphome#18787 by @exciton (breaking-change)
- [modbus_controller] Switch write_lambda return value is the wire value only esphome#18788 by @exciton (breaking-change)
- [modbus_controller] Poll through PollingDevice; deprecate ModbusCommandItem esphome#18071 by @exciton (breaking-change)
- [modbus_controller] Replace register_count/force_new_range with reuse_previous_range esphome#18085 by @exciton (new-feature) (breaking-change)
- [api] Add description and example metadata to user-defined actions esphome#18881 by @bharvey88 (new-feature) (breaking-change)
All changes
Section titled “All changes”- [const] Move CONF_SLOT to components/const esphome#18350 by @p1ngb4ck
- [const] move CONF_LABEL to components/const esphome#18354 by @p1ngb4ck
- [core] Add preference key stability integration test esphome#18364 by @bdraco
- [ci] Disable CodSpeed benchmarks job outside esphome/esphome esphome#18372 by @clydebarrow
- [ci] Compare merge-branch base ref against the default branch esphome#18385 by @clydebarrow
- [core] Save the validated config cache on the first upload or logs run esphome#18367 by @bdraco
- [ethernet] Defer clk_mode removal to 2026.11.0 esphome#18380 by @bdraco
- [lvgl] Restore long_press_repeat_time functionality esphome#18393 by @JoppyFurr
- [esp32_hosted] Require ESP-IDF 5.3 or newer esphome#18417 by @bdraco (breaking-change)
- [api] Move NoiseProtocolId off the connection object esphome#18420 by @bdraco
- [api] Create the camera image reader lazily esphome#18421 by @bdraco
- [ota] Shorten platform backend TAG strings esphome#18438 by @bdraco
- [uart] Shorten platform backend TAG strings esphome#18439 by @bdraco
- [adc] Shorten platform TAG strings esphome#18441 by @bdraco
- [spi] Shorten platform backend TAG strings esphome#18442 by @bdraco
- [internal_temperature] Shorten platform TAG strings esphome#18443 by @bdraco
- [http_request] Shorten platform backend TAG strings esphome#18444 by @bdraco
- [mqtt] Shorten esp32 backend TAG string esphome#18446 by @bdraco
- [nextion] Shorten upload TAG strings esphome#18448 by @bdraco
- [bluetooth_connection] Shorten platform TAG strings esphome#18449 by @bdraco
- [remote_receiver] Shorten esp32 TAG string esphome#18447 by @bdraco
- [i2c] Shorten platform backend TAG strings esphome#18440 by @bdraco
- [deep_sleep] Shorten bk72xx TAG string esphome#18445 by @bdraco
- [socket] Shorten lwip TAG string esphome#18450 by @bdraco
- [core] Retry gh CLI calls on transient network errors in CI scripts esphome#18292 by @bdraco
- [core] Sync pre-commit ruff hook with requirements (0.16.3) esphome#18469 by @bdraco
- [core] Make FINAL_VALIDATE_SCHEMA functions return None esphome#18457 by @jesserockz
- [core] Replace base64 lookup tables with arithmetic mapping esphome#18454 by @bdraco
- [ci] Fall back to files API when PR diff exceeds GitHub line limit esphome#18486 by @swoboda1337
- Bump aioesphomeapi from 45.10.3 to 45.11.0 esphome#18493 by @esphome[bot]
- [socket] Remove constant duplicated by the beta merge esphome#18496 by @bdraco
- Bump aioesphomeapi from 45.11.0 to 45.12.0 esphome#18501 by @esphome[bot]
- [ai] Add instructions for concise comments esphome#18522 by @clydebarrow
- [modbus_controller] Brace single-statement log bodies to fix -Wempty-body esphome#18543 by @alaraun
- [core] Add type annotations to component Python (1/11) esphome#18338 by @jesserockz
- [ethernet] Skip the custom W5500 SPI driver for other ethernet types esphome#18533 by @bdraco
- [ota] Skip partition-access OTA sources when the feature is disabled esphome#18532 by @bdraco
- [esp32] Apply IDF component exclusions to native toolchain builds esphome#18531 by @bdraco
- [uptime] Skip the timestamp sensor source when no time component is configured esphome#18535 by @bdraco
- [core] Add type annotations to component Python (2/11) esphome#18339 by @jesserockz
- [core] Add type annotations to component Python (3/11) esphome#18340 by @jesserockz
- [core] Add type annotations to component Python (4/11) esphome#18341 by @jesserockz
- [core] Add type annotations to component Python (7/11) esphome#18344 by @jesserockz
- [core] Add type annotations to component Python (8/11) esphome#18345 by @jesserockz
- [esp32] Grow the default IDF component exclusion list esphome#18536 by @bdraco
- [core] Add add_cmake_arg esphome#18498 by @DavidvtWout
- [core] Add type annotations to component Python (5/11) esphome#18342 by @jesserockz
- [core] Add type annotations to component Python (9/11) esphome#18346 by @jesserockz
- [core] Add type annotations to component Python (11/11) esphome#18348 by @jesserockz
- [mipi_spi] Toggle D/C only while holding the SPI bus esphome#18529 by @jesserockz
- [runtime_image] keep decoder allocated esphome#18488 by @guillempages (breaking-change)
- [core] Add portable strcasestr implementation named str_contains_ignore_case esphome#18497 by @guillempages
- [core] Add type annotations to component Python (6/11) esphome#18343 by @jesserockz
- [sendspin] Convert tests to package-style includes esphome#18588 by @kahrendt
- Bump aioesphomeapi from 45.12.0 to 45.13.1 esphome#18600 by @esphome[bot]
- [remote_transmitter] Fix repeat gap timing on LibreTiny Beken esphome#18585 by @kbx81
- [wifi] Inline the trivial WiFiScanResult accessors esphome#18613 by @bharvey88
- [deep_sleep] Reject wakeup_pin_mode at both levels on BK72xx esphome#18615 by @bharvey88
- [mitsubishi_cn105] Add Fahrenheit support esphome#15488 by @crnjan (new-feature)
- [remote_transmitter] Use hardware PWM on rtl87xx to fix watchdog crash esphome#18579 by @kbx81
- [captive_portal] Show each network once in the scan list esphome#17847 by @bharvey88
- [core] Add type annotations to component Python (10/11) esphome#18347 by @jesserockz
- [usb_uart] Extract non-final USBUartChannelBase from USBUartChannel esphome#17472 by @p1ngb4ck
- [ota] Log prepare, upload, and total OTA timing in espota2 esphome#18582 by @bdraco
- [esphome] Inline the trivial OTA port accessors esphome#18625 by @bdraco
- [esp32] Exclude esp_gdbstub from the build by default esphome#18604 by @bdraco
- [ethernet] Inline the trivial EthernetComponent setters esphome#18618 by @bdraco
- [logger] Inline the trivial Logger accessors esphome#18619 by @bdraco
- [light] Inline the trivial LightState accessors esphome#18620 by @bdraco
- [select] Inline the trivial Select accessors esphome#18621 by @bdraco
- [sensor] Inline the trivial ExponentialMovingAverageFilter setters esphome#18622 by @bdraco
- [text_sensor] Inline the trivial TextSensor forwarding overloads esphome#18623 by @bdraco
- [climate] Inline the trivial visual override setters esphome#18624 by @bdraco
- [safe_mode] Inline the trivial set_safe_mode setters esphome#18626 by @bdraco
- [api] Inline the trivial APIServer accessors esphome#18627 by @bdraco
- [core] Inline the ESPTime::strftime std::string overload esphome#18628 by @bdraco
- [water_heater] Inline the trivial visual override setters esphome#18629 by @bdraco
- [cover] Inline the trivial Cover and CoverCall accessors esphome#18630 by @bdraco
- [fan] Inline the trivial Fan call helpers esphome#18631 by @bdraco
- [switch] Inline the trivial inverted accessors esphome#18632 by @bdraco
- [version] Inline the trivial VersionTextSensor setters esphome#18633 by @bdraco
- [deep_sleep] Inline the trivial DeepSleepComponent setters esphome#18634 by @bdraco
- [thermostat] Inline the trivial ThermostatClimate setters and getters esphome#18635 by @bdraco
- [sprinkler] Inline the trivial Sprinkler accessors esphome#18636 by @bdraco
- [mqtt] Inline the trivial MQTT client, component and sensor accessors esphome#18637 by @bdraco
- [wireguard] Inline the trivial Wireguard setters esphome#18638 by @bdraco
- [display] Inline the trivial DisplayPage setters and page navigation helpers esphome#18639 by @bdraco
- [valve] Inline the trivial Valve and ValveCall accessors esphome#18641 by @bdraco
- [text] Inline the trivial Text publish_state forwarding overloads esphome#18642 by @bdraco
- [datetime] Inline the trivial make_call helpers esphome#18643 by @bdraco
- [infrared] Inline the trivial make_call helper esphome#18644 by @bdraco
- [radio_frequency] Inline the trivial make_call helper esphome#18645 by @bdraco
- [wifi] Inline the remaining trivial WiFiAP and WiFiComponent accessors esphome#18617 by @bdraco
- [core] Remove deprecated esp_log_vprintf_ flash-string overload esphome#18377 by @bdraco
- [core] Remove deprecated entity_base getters esphome#18375 by @bdraco
- [wifi] Remove deprecated wifi_ssid() esphome#18378 by @bdraco
- [core] Remove deprecated gamma_correct and gamma_uncorrect esphome#18376 by @bdraco
- [web_server_idf] Remove deprecated AsyncWebServerRequest::url() esphome#18382 by @bdraco
- [modbus] Remove deprecated waiting_for_response() esphome#18381 by @bdraco
- [ethernet] Remove deprecated get_eth_mac_address_pretty() esphome#18379 by @bdraco
- [http_request] Abort OTA backend when update fails before first write esphome#18581 by @bdraco
- [core] Register the OTA component in dummy_main like its siblings esphome#18666 by @bdraco
- [core] Replace a damaged existing file in write_file_if_changed esphome#18665 by @bdraco
- [ota] Restore lazy flash erase for ESP32 OTA with 64 KiB block erase esphome#18580 by @bdraco
- [core] Skip copying entity automation and filter sources when unused esphome#18602 by @bdraco
- Bump aioesphomeapi from 45.13.1 to 46.0.0 esphome#18683 by @esphome[bot]
- [tests] Fix flaky pty log probe test on macOS esphome#18681 by @bdraco
- [modbus_client] Add continuous option to the read and send actions esphome#18542 by @exciton (new-feature)
- [mitsubishi_cn105] Mark configurable classes as final esphome#18272 by @crnjan
- [online_image] Support image format auto-detection esphome#16337 by @guillempages (new-feature)
- [noise] Add shared noise component and move api noise primitives esphome#18490 by @bdraco (new-component)
- [light] Skip light_json_schema.cpp when json is not used esphome#18675 by @bdraco
- [core] Parse the common on/off spellings in boolean env vars esphome#18667 by @bdraco
- [core] Treat a malformed build_info.json as stale instead of crashing esphome#18669 by @bdraco
- [mqtt] Skip entity sources for entity types not in the config esphome#18677 by @bdraco
- [uart] Skip uart_debugger.cpp when no debug block is configured esphome#18678 by @bdraco
- [esp32_ble] Skip ble_advertising.cpp when advertising is not used esphome#18679 by @bdraco
- [i2s_audio] Skip SPDIF speaker sources when spdif_mode is off esphome#18676 by @bdraco
- [core] Keep str_contains_ignore_case needle literals in flash on ESP8266 esphome#18574 by @bdraco
- [bluetooth_proxy] Warn once per transaction when the TCP buffer is congested esphome#18605 by @bdraco
- [gpio] Fix linker error when binary sensor only uses expander pins esphome#18698 by @bdraco
- [noise] Declare libsodium as a direct dependency esphome#18692 by @bdraco
- [web_server_idf] Skip multipart parser sources when OTA upload is disabled esphome#18534 by @bdraco
- [core] Use filter_source_files_from_defines in api, socket and ethernet esphome#18674 by @bdraco
- [network] Add tcp_send_buffer option esphome#18610 by @bdraco (new-feature)
- [modbus_controller] Rename custom_command to custom_pdu; reject address 0; retire skip_updates esphome#18652 by @exciton (breaking-change)
- [wifi] Share the scan list dedupe helper with improv_serial esphome#18612 by @bharvey88
- [time] Remove C++ POSIX TZ string parser esphome#18383 by @bdraco
- [core] Add type annotations to component Python esphome#18697 by @jesserockz
- [ci] Skip CodSpeed benchmarks on beta and release pull requests esphome#18703 by @jesserockz
- [core] Extract the shared idedata and size-summary helpers into build_helpers esphome#18661 by @bdraco
- [core] Harden the shared library converter esphome#18685 by @bdraco
- [preferences] modify IntervalSyncer to be a PollingComponent esphome#14370 by @rwrozelle (breaking-change)
- [modbus_controller] Brace poll-refused log to fix -Wempty-body warning esphome#18724 by @exciton
- [audio_http] Add persistent ring buffer option esphome#18708 by @n-IA-hane (new-feature)
- [mitsubishi_cn105] Defer status requests after responses esphome#18227 by @crnjan
- [uart] Delete ESP32 UART driver on shutdown to keep ROM output off the bus esphome#18684 by @Gafielt
- [ci] Run C++ unit tests when a component’s Python or test override changes esphome#18706 by @bdraco
- [modbus_controller] Add continuous polling option esphome#18080 by @exciton (new-feature)
- Bump aioesphomeapi from 46.0.0 to 46.1.0 esphome#18737 by @esphome[bot]
- [runtime_image] Add MIME types to image formats esphome#16361 by @guillempages
- [api] Acknowledge proxy subscribe and configuration requests esphome#18312 by @kbx81
- [key_collector][mipi_rgb] Suppress compilation warnings esphome#18721 by @clydebarrow
- [core] Parallelize registry and tool downloads esphome#18662 by @bdraco
- [runtime_image] Fix include esphome#18738 by @guillempages
- Bump aioesphomeapi from 46.1.0 to 46.2.0 esphome#18740 by @esphome[bot]
- [zigbee][time] Add zigbee time component on esp32 esphome#18656 by @luar123 (new-feature)
- [lvgl] Implement list widget esphome#18018 by @clydebarrow (new-feature)
- [core] Log which source change triggered a rebuild esphome#18552 by @bdraco
- [wifi] libretiny: reset the STA state on synchronous connect failure esphome#18719 by @Bl00d-B0b
- [rp2_ble_tracker] Automation triggers and scan actions esphome#18717 by @Bl00d-B0b (new-feature)
- [time] Skip posix_tz.cpp when no timezone is configured esphome#18680 by @bdraco
- [core] Remove empty automation.cpp files from sensor, switch and output esphome#18745 by @bdraco
- [uptime] Skip the timestamp sensor source unless a timestamp sensor is configured esphome#18746 by @bdraco
- [esp32] Only build the mbedTLS certificate bundle when a component needs it esphome#18747 by @bdraco
- [esp32] Exclude esp_http_server and nvs_sec_provider from IDF builds by default esphome#18748 by @bdraco
- [time] Skip automation.cpp when no on_time or on_time_sync automation is configured esphome#18750 by @bdraco
- [sfa40] Add SFA40 sensor support esphome#17815 by @NoQuarrel (new-component) (new-feature) (new-platform)
- [core] Fix false-positive readability-non-const-parameter in string_ref.h esphome#18758 by @FredM67
- [ethernet] Add spi_id option to attach to an existing SPI bus esphome#18530 by @jesserockz (new-feature)
- [emontx] Add apparent power (AP) and frequency (F) sensor support esphome#18586 by @FredM67 (new-feature)
- [espidf] Cache the discovered component list to skip the discovery configure esphome#18752 by @bdraco
- [core] Consolidate HTTP download paths esphome#18742 by @bdraco
- [esp32_ble_tracker] Warn when the scan window is above 600ms with wifi esphome#18725 by @bdraco
- [api] Widen message type storage to uint16_t esphome#18526 by @bdraco
- [ci] Remove the remaining max-parallel caps esphome#18762 by @swoboda1337
- [esp8266] Add linker-script surgery and board build metadata for the native toolchain esphome#18555 by @bdraco
- [lvgl] Add table widget esphome#18422 by @clydebarrow (new-feature)
- [core] Add the arduino toolchain seam and validate —toolchain on every platform esphome#18556 by @bdraco
- [core] Add shared registry, ninja, and cache infrastructure for native toolchains esphome#18570 by @bdraco
- [esp8266] Add the native framework and toolchain installer esphome#18557 by @bdraco
- [remote_transmitter] ISR-driven transmission and non_blocking support on RTL8720C esphome#18648 by @kbx81 (new-feature)
- [api] Treat homeassistant.event variables as lambdas esphome#18759 by @bdraco (breaking-change)
- [esp32] Apply custom eFuse MAC as base MAC for all interfaces esphome#18452 by @kbx81 (breaking-change)
- [climate_ir_lg] Fix #10867 - advanced vert. swing, setting temp. in heat/cool mode, jet mode decoding, other fixes + refactor esphome#10875 by @ireun (new-feature)
- [modbus_controller] Add integration tests for register offset, response size and write buffer esphome#18741 by @exciton
- [runtime_image] Add FILTER_SOURCE_FILES esphome#18768 by @guillempages
- [remote_transmitter] ISR-driven transmission and non_blocking support on BK7231N/BK7238 esphome#18660 by @kbx81 (new-feature)
- [time] Silence compiler warning by initializing transit variables (#18715) esphome#18723 by @MakerYuichi
- [emontx] Fix sensor storage initialization ordering esphome#18771 by @FredM67
- [climate] Don’t restore a saved mode the device no longer supports esphome#18296 by @leodrivera
- [hoermann_hcp] Add buttons to hoermann_hcp esphome#18544 by @zweckj (new-feature) (new-platform)
- Bump aioesphomeapi from 46.2.0 to 46.2.1 esphome#18804 by @esphome[bot]
- [runtime_image] Add check for dimensions in BMP esphome#18800 by @guillempages
- [modbus_controller] Writer entities as their own hub device; heap-free esphome#18082 by @exciton (new-feature) (breaking-change)
- [api] Drop connection instead of crashing when overflow buffer allocation fails esphome#18802 by @bdraco
- [api] Deprecate media player supports_pause field esphome#18801 by @bdraco (breaking-change)
- [spi] Use PSRAM DMA for external buffers esphome#18699 by @n-IA-hane
- [external_components] Log when a source overrides built-in components esphome#18805 by @swoboda1337
- [improv_base] Bump Improv library to 1.2.7 esphome#18809 by @bdraco
- [improv_serial] Add uart bus support and host integration test esphome#18794 by @bdraco (new-feature)
- [core] Prefetch PlatformIO packages in parallel esphome#18769 by @bdraco
- [docker] Parallelize the image’s PlatformIO library preinstall esphome#18777 by @bdraco
- [api] Drop connection instead of crashing when buffer allocation fails esphome#18803 by @bdraco
- [core] Install prefetched PlatformIO packages with parallel extraction esphome#18775 by @bdraco
- [provisioning] Shut down the Wi-Fi AP and captive portal when the window closes esphome#17466 by @kbx81 (new-feature)
- [runtime_image] Add support for QOI images esphome#16945 by @guillempages (new-feature)
- [improv_serial][esp32_improv] Use buffer based RPC response builder esphome#18793 by @bdraco
- [tuya] Add water_heater platform esphome#17323 by @iago-veiga (new-feature) (new-platform)
- [modbus_controller] Apply the write offset byte-accurately on switch and output esphome#18787 by @exciton (breaking-change)
- [modbus_controller] Switch write_lambda return value is the wire value only esphome#18788 by @exciton (breaking-change)
- [openthread] fix shutdown esphome#16332 by @rwrozelle
- [modbus_controller] Poll through PollingDevice; deprecate ModbusCommandItem esphome#18071 by @exciton (breaking-change)
- [core] Add step_to_accuracy_decimals benchmarks esphome#18826 by @bdraco
- [ci] Compress the compile-test image with zstd esphome#18812 by @bdraco
- [core] Remove make_name_with_suffix std::string overloads esphome#18828 by @bdraco
- Update webserver local assets to 20260824-021242 esphome#18704 by @esphome[bot]
- [core] Make script/setup idempotent and prepare new worktrees esphome#18843 by @jesserockz
- [modbus_controller] Replace register_count/force_new_range with reuse_previous_range esphome#18085 by @exciton (new-feature) (breaking-change)
- [mdns] Bump espressif/mdns to 1.12.0 esphome#18861 by @bdraco
- [modbus] Hub and helpers cleanup; tighten queue_pdu validation esphome#18847 by @exciton
- [modbus] Build single-value register writes on a right-sized stack buffer esphome#18844 by @exciton
- [core] Make rmtree tolerate missing paths and concurrent directory changes esphome#18846 by @bdraco
- [core] Use uv for the ESP-IDF Python environment when available esphome#18838 by @bdraco
- [esp32] Exclude the WiFi and Bluetooth stacks from builds that do not use them esphome#18599 by @bdraco
- [esp8266] Add the native library backend esphome#18558 by @bdraco
- [modbus] Add a compile-time register value decoder esphome#18863 by @exciton
- [growatt_solar] Use the typed modbus read callback and drop the send-pacing state machine esphome#18850 by @exciton
- [core] Avoid double promotion in update interval and step formatting esphome#18825 by @bdraco
- [havells_solar] Use the typed modbus read callback with address-based extraction esphome#18851 by @exciton
- [kuntze] Use the typed modbus read callback and queue all reads at once esphome#18852 by @exciton
- [pzemdc] Use the typed modbus read callback with address-based extraction esphome#18853 by @exciton
- [selec_meter] Use the typed modbus read callback with address-based extraction esphome#18854 by @exciton
- [sdm_meter] Use the typed modbus read callback with address-based extraction esphome#18849 by @exciton
- [pzemac] Use the typed modbus read callback with address-based extraction esphome#18855 by @exciton
- [mk2pvrouter] Add Mk2PVRouter component with sensor support esphome#8487 by @FredM67 (new-component) (new-feature) (new-platform)
- [light] Fix gamma table dead zone collapsing to 0 esphome#18845 by @clydebarrow
- [modbus] Add value_at() and decode registers without the byte round-trip esphome#18873 by @exciton
- [modbus] Decode by register address in the modbus sensor components esphome#18874 by @exciton
- [ci] Cache clang-tidy idedata and key ESP-IDF cache on Python version esphome#18868 by @bdraco
- [ci] Drop picolibc from the cached ESP-IDF toolchains esphome#18871 by @bdraco
- [mipi_rgb] Add Elecrow Crowpanel Advance 7 esphome#18810 by @clydebarrow (new-feature)
- [core] Hash downloaded file paths at the default data dir location esphome#18824 by @bdraco
- [esp32] Skip full rebuild on sdkconfig change with the esp-idf toolchain esphome#18876 by @bdraco
- [internal_temperature] Re-include esp_phy on the original ESP32 so the PHY blob links esphome#18884 by @bdraco
- [modbus] Speed up the bus with microsecond-accurate timing esphome#12421 by @exciton
- [lvgl] Add radial and conical gradients esphome#18818 by @clydebarrow (new-feature)
- Bump aioesphomeapi from 46.2.1 to 46.3.0 esphome#18892 by @esphome[bot]
- [api] Add description and example metadata to user-defined actions esphome#18881 by @bharvey88 (new-feature) (breaking-change)
- [modbus] Yield the whole-millisecond part of the interframe wait esphome#18898 by @exciton
- [core] Deduplicate the host program path lookup esphome#18897 by @bdraco
- [ci] Cache the integration test PlatformIO dir esphome#18896 by @bdraco
- [homeassistant] Add integration test for binary sensor initial state triggers esphome#18894 by @bdraco
- [improv_serial] Support non-Wi-Fi network interfaces esphome#17598 by @kbx81 (new-feature)
- [core] Keep conditional log string literals in flash on ESP8266 esphome#18907 by @bdraco
- [esp32] Fix ESP32-S31 GPIO validation esphome#18904 by @swoboda1337
- [mipi_rgb] Add ESP32S31 support esphome#18914 by @clydebarrow
- [esp32] Fix S31 reserved pins esphome#18915 by @clydebarrow
- [adc] Add ESP32-S31 support esphome#18887 by @swoboda1337
- [sen6x] Add VOC/NOx algorithm tuning esphome#18779 by @bharvey88 (new-feature)
- [whynter] Fix truncating Fahrenheit temps that should be rounded esphome#18813 by @mfishma
- [core] Configure the platform again after prefetching its packages esphome#18830 by @bdraco
- [api] Keep action dropped warning strings in flash on ESP8266 esphome#18905 by @bdraco
- [ci] Balance integration test buckets by recorded durations esphome#18895 by @bdraco
- [core] Keep scheduler dump cancelled marker string in flash on ESP8266 esphome#18906 by @bdraco
- [docker] Use GITHUB_REPOSITORY instead of hardcoded esphome/esphome esphome#18916 by @clydebarrow
- [lvgl] Fix user_ flags esphome#18902 by @clydebarrow
- [docker] Fix generate_tags.py formatting esphome#18928 by @swoboda1337
- [core] Lint: require braces around single ESP_LOG control-statement bodies esphome#18727 by @exciton
- [core] Prefetch tool-scons by PlatformIO’s core spec esphome#18831 by @bdraco
- [epaper_spi] Add UC8179 mono driver and Seeed reTerminal E1001 model esphome#17568 by @jesserockz (new-feature)
- [core] Clone git libraries in parallel in the library prefetch esphome#18836 by @bdraco
- [esp32][mipi_rgb] Add ESP32-S31 support for execute_from_psram esphome#18929 by @clydebarrow (new-feature)
- [safe_mode] Uncover silent error in safe-mode esphome#18749 by @p1ngb4ck
- [core] Move CONF_KEYS to the shared component constants esphome#18933 by @Zebble
- [d01] add D01 pm2.5 sensor support esphome#17788 by @ch604 (new-component) (new-feature) (new-platform)
- [ota] Add Noise encryption to the OTA platform esphome#18489 by @bdraco (new-feature)
- [ds1603l] New sensor DS1603L V1.0 esphome#13133 by @JakeLC15 (new-component) (new-feature) (new-platform)
- [core] Document C++ conventions in AGENTS.md that reviews keep catching esphome#18941 by @jesserockz
- [ci] Refresh integration test durations esphome#18944 by @esphome[bot]
- [uart] Migrate check_uart_settings to final validation esphome#18940 by @jesserockz
- [serial_proxy] Skip no-op reconfigure requests esphome#18953 by @kbx81
- [snapshot][SDL] Display headless mode and snapshots esphome#17917 by @clydebarrow (new-component) (new-feature) (new-platform)
Dependency Changes
Section titled “Dependency Changes”- Bump pylint from 4.0.6 to 4.0.7 esphome#18320 by @dependabot[bot]
- Bump prek from 0.4.12 to 0.4.13 esphome#18362 by @dependabot[bot]
- Bump platformdirs from 4.11.1 to 4.11.2 esphome#18363 by @dependabot[bot]
- Bump bleak from 2.1.1 to 3.0.2 esphome#16246 by @dependabot[bot]
- Bump esphome/workflows/.github/workflows/stale.yml from 61fd37a044cad4e9aa4303027b2a61b6a34da855 to a1c1485ab46ef41a84a6a9d8abd7fa4b7628fd70 esphome#18464 by @dependabot[bot]
- Bump astral-sh/setup-uv from 9.0.0 to 10.0.1 in /.github/actions/restore-python esphome#18462 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.6 to 4.37.7 esphome#18466 by @dependabot[bot]
- Bump filelock from 3.32.2 to 3.32.3 esphome#18461 by @dependabot[bot]
- Bump ruff from 0.16.2 to 0.16.3 esphome#18458 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.6 to 4.37.7 esphome#18467 by @dependabot[bot]
- Bump esphome/workflows/.github/workflows/lock.yml from 2026.7.0 to 2026.8.1 esphome#18465 by @dependabot[bot]
- Bump astral-sh/setup-uv from 9.0.0 to 10.0.1 esphome#18463 by @dependabot[bot]
- Bump platformdirs from 4.11.2 to 4.11.3 esphome#18468 by @dependabot[bot]
- Update wheel requirement from
<0.48,>=0.43to>=0.43,<0.49esphome#18459 by @dependabot[bot] - Bump resvg-py from 0.3.4 to 0.4.0 esphome#18460 by @dependabot[bot]
- Bump prek from 0.4.13 to 0.4.14 esphome#18563 by @dependabot[bot]
- Bump docker/setup-buildx-action from 4.2.0 to 4.3.0 in the docker-actions group esphome#18564 by @dependabot[bot]
- Bump ruff from 0.16.3 to 0.16.4 esphome#18734 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.7 to 4.37.8 esphome#18735 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.7 to 4.37.8 esphome#18736 by @dependabot[bot]
- Bump filelock from 3.32.3 to 3.32.4 esphome#18799 by @dependabot[bot]
- Bump platformdirs from 4.11.3 to 4.11.4 esphome#18835 by @dependabot[bot]
- Bump CodSpeedHQ/action from 5.0.3 to 5.2.1 esphome#18834 by @dependabot[bot]
- Bump resvg-py from 0.4.0 to 0.5.0 esphome#18864 by @dependabot[bot]
- Bump zeroconf from 0.150.0 to 0.150.4 esphome#18924 by @dependabot[bot]
- Bump ruff from 0.16.4 to 0.16.5 esphome#18920 by @dependabot[bot]
- Bump github/codeql-action/analyze from 4.37.8 to 4.37.9 esphome#18926 by @dependabot[bot]
- Bump github/codeql-action/init from 4.37.8 to 4.37.9 esphome#18927 by @dependabot[bot]
- Bump platformdirs from 4.11.4 to 4.11.5 esphome#18923 by @dependabot[bot]
- Bump cryptography from 48.0.1 to 50.0.1 esphome#18922 by @dependabot[bot]
- Bump prek from 0.4.14 to 0.5.0 esphome#18921 by @dependabot[bot]
- Bump zeroconf from 0.150.4 to 0.151.2 esphome#18934 by @dependabot[bot]
- Bump pylint from 4.0.7 to 4.0.8 esphome#18935 by @dependabot[bot]