ESPHome 2025.6.0 - 18th June 2025
Read the ESPHome 2025.6.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 Components
Section titled “New Components”- Add CUBIC CM1106 Single Beam NDIR CO2 Sensor Module esphome#8293 by @andrewjswan (new-integration)
- [usb_uart] Implement USB Host mode UART esphome#8334 by @clydebarrow (new-integration)
- Add es8388 audio_dac esphome#8342 by @P4uLT (new-integration)
- [lc709203f] Add battery monitor esphome#8037 by @ilikecake (new-integration)
- [esp_ldo] Implement support for ESP32-P4 LDO esphome#9009 by @clydebarrow (new-integration)
- Add OpenThread support on ESP-IDF esphome#7506 by @mrene (new-integration)
Breaking Changes
Section titled “Breaking Changes”- update minimal python version to 3.10 esphome#8850 by @ximex (breaking-change)
- Add LWIP optimization options to reduce flash usage esphome#8946 by @bdraco (breaking-change)
- Replace API deferred queue with efficient message batching system esphome#9012 by @bdraco (breaking-change)
- Optimize Component and Application state storage from uint32_t to uint8_t esphome#9082 by @bdraco (breaking-change)
- Reduce entity memory usage by eliminating field shadowing and bit-packing esphome#9076 by @bdraco (breaking-change)
- Optimize Application
area_fromstd::stringtoconst char*esphome#9085 by @bdraco (breaking-change)
Beta Changes
Section titled “Beta Changes”- Fix dashboard logging being escaped before parser esphome#9054 by @bdraco
- Always perform select() when loop duration exceeds interval esphome#9058 by @bdraco
- [nextion] Remove upload flags reset from success path to prevent TFT corruption esphome#9064 by @edwardtfn
- Fix BYPASS_AUTO feature to work with or without an arming delay esphome#9051 by @heythisisnate
- Fix misleading comment in API esphome#9069 by @bdraco
- [prometheus] Remove
cv.only_with_arduinoesphome#9061 by @jesserockz - [esp32] Dynamically set default framework based on variant esphome#9060 by @jesserockz
- Fix
captive_portalloading entireweb_serveresphome#9066 by @bdraco - Make ParseOnOffState enum uint8_t esphome#9083 by @bdraco
- Optimize Component and Application state storage from uint32_t to uint8_t esphome#9082 by @bdraco (breaking-change)
- Small optimizations to api buffer helper esphome#9071 by @bdraco
- Reduce entity memory usage by eliminating field shadowing and bit-packing esphome#9076 by @bdraco (breaking-change)
- Optimize memory usage by lazy-allocating raw callbacks in sensors esphome#9077 by @bdraco
- Fix API message encoding to return actual size instead of calculated size esphome#9073 by @bdraco
- Optimize Application
area_fromstd::stringtoconst char*esphome#9085 by @bdraco (breaking-change) - Fix unbound BLE event queue growth and reduce memory usage esphome#9052 by @bdraco
- Bump aioesphomeapi from 32.2.1 to 32.2.3 esphome#9091 by @dependabot[bot]
- [fan] fix initial FanCall to properly set speed esphome#8277 by @dhewg
- Implement a lock free ring buffer for BLEScanResult to avoid drops esphome#9087 by @bdraco
- Make BLE queue lock free esphome#9088 by @bdraco
- Fix protobuf encoding size mismatch by passing force parameter in encode_string esphome#9074 by @bdraco
- [i2s_audio] Check for a nullptr before disabling and deleting channel esphome#9062 by @kahrendt
- Ensure we can send batches where the first message exceeds MAX_PACKET_SIZE esphome#9068 by @bdraco
- Add common base classes for entity protobuf messages to reduce duplicate code esphome#9090 by @bdraco
- Reduce Component blocking threshold memory usage by 2 bytes per component esphome#9081 by @bdraco
- Remove
std::prefix as not all platforms have access yet. esphome#9095 by @jesserockz - [i2s_audio] Add
dump_configmethods, shorten log messages esphome#9099 by @kbx81 - [i2s_audio] Bugfix: crashes when unlocking i2s bus multiple times esphome#9100 by @kahrendt
- [spi] Cater for non-word-aligned buffers on esp8266 esphome#9108 by @clydebarrow
- Optimize LightState memory layout esphome#9113 by @bdraco
- Reduce Switch component memory usage by 8 bytes per instance esphome#9112 by @bdraco
Notable Changes
Section titled “Notable Changes”- [bme68x_bsec2_i2c] Remove arduino dependency esphome#7815 by @luar123 (notable-change)
All changes
Section titled “All changes”- add actions to the MAX7219Component esphome#6462 by @nielsnl68
- [api] Update api proto to add legacy value esphome#8802 by @jesserockz
- [script] Use local import for zephyr esphome#8822 by @clydebarrow
- Bump cryptography to 45.0.1 esphome#8826 by @bdraco
- unify and add missing metric suffixes esphome#8816 by @ximex
- Improve stability for a test that crashes intermittently in CI esphome#8699 by @dala318
- update ruff version to
0.11.10in.pre-commit-config.yamlesphome#8851 by @ximex - add python 3.13 to ci pipeline esphome#8855 by @ximex
- [esp32] Use IDF 5.3.2 as default for IDF builds esphome#8464 by @swoboda1337
- update minimal python version to 3.10 esphome#8850 by @ximex (breaking-change)
- [esp32, logger] Add initial P4 support esphome#8439 by @swoboda1337
- Add CUBIC CM1106 Single Beam NDIR CO2 Sensor Module esphome#8293 by @andrewjswan (new-integration)
- Updates for development environment esphome#8801 by @jesserockz
- [sync] Update and fix sync workflow esphome#8873 by @jesserockz
- [lvgl] Try to allocate smaller buffer on failure esphome#8814 by @clydebarrow
- [lvgl] Add content styling to tabview esphome#8823 by @clydebarrow
- [usb_uart] Implement USB Host mode UART esphome#8334 by @clydebarrow (new-integration)
- OTA: Close and clean up client when setsockopt fails esphome#8865 by @luuoaoa
- Add const DEVICE_CLASS_WIND_DIRECTION esphome#8870 by @Pi57
- Synchronise Device Classes from Home Assistant esphome#8874 by @esphomebot
- Optimize API frame helper buffer management esphome#8805 by @bdraco
- Use UINT16_MAX instead of hard coded 65535 in api esphome#8884 by @bdraco
- feat:
wifi.configurenow emits error after reconnecting to old AP esphome#8653 by @Rapsssito - [modbus_controller] Add assumed_state to switch esphome#8880 by @gotnone
- [const] Move
CONF_RESETto const.py esphome#8889 by @jesserockz - [bme68x_bsec2_i2c] Remove arduino dependency esphome#7815 by @luar123 (notable-change)
- [i2s_audio] Add basic support for esp32-p4 esphome#8887 by @jesserockz
- [esp32, logger, core] Add initial c5 support esphome#8895 by @swoboda1337
- Resolve regex library warnings esphome#8890 by @emmanuel-ferdman
- Add integration tests for host esphome#8912 by @bdraco
- Fix flakey tests esphome#8914 by @bdraco
- [sx1509] add support for keys esphome#8413 by @ssieb
- Add es8388 audio_dac esphome#8342 by @P4uLT (new-integration)
- [online_image] Last-Modified-Date and ETag response caching esphome#8782 by @candrews
- [aht10] Various optimizations/clean-up esphome#8921 by @kbx81
- [rtttl] Various optimizations/clean-up esphome#8923 by @kbx81
- [ledc] Various optimizations/clean-up esphome#8922 by @kbx81
- Streamline setup() logging (a, b) esphome#8924 by @kbx81
- Streamline setup() logging (c, d) esphome#8925 by @kbx81
- Streamline setup() logging (e, f) esphome#8926 by @kbx81
- Streamline setup() logging (g, h, i) esphome#8927 by @kbx81
- Streamline setup() logging (k, l, m) esphome#8928 by @kbx81
- Streamline setup() logging (n, o, p, q, r) esphome#8929 by @kbx81
- Streamline setup() logging (s, t, u, v, w, x, y, z) esphome#8930 by @kbx81
- [speaker mediaplayer] Yaml config initial volume (on first boot) esphome#8898 by @mrtoy-me
- [i2s_audio] Bump esphome/ESP32-audioI2S to 2.2.0 esphome#8920 by @jesserockz
- Add more demo platforms esphome#8903 by @jesserockz
- Migrate wifi component to use App.get_loop_component_start_time esphome#8931 by @bdraco
- Optimize socket operations by checking readiness in the main loop esphome#8918 by @bdraco
- Improve logging in integration tests when port does not open esphome#8932 by @bdraco
- [pmwcs3] Optimize logging esphome#8936 by @kbx81
- [tmp102] Remove
setup(), optimize logging esphome#8937 by @kbx81 - Optimize plaintext API header reading to reduce system calls esphome#8941 by @bdraco
- [gcja5] Remove unused
setup()method esphome#8935 by @kbx81 - [alarm_control_panel] BYPASS_AUTO option for Template Alarm Control Panel sensors left open when armed esphome#8795 by @heythisisnate
- Fix select() logging flood in very verbose mode esphome#8942 by @bdraco
- particle matter improvements esphome#8846 by @ximex
- Fix colors in update all esphome#8854 by @swoboda1337
- Add flip X and Y on inkplate6 component esphome#7904 by @Leicas
- [modbus] [modbus_controller] Fix server role read coil 0x1 crc esphome#8859 by @gotnone
- [rp2040] Allow changing watchdog timeout esphome#8868 by @kuba2k2
- [esp32] Regenerate boards from recommended platform version esphome#8938 by @jesserockz
- Introduce “communication failed” log macro esphome#8939 by @kbx81
- [demo] FIx some of the entities esphome#8943 by @jesserockz
- Redundant Log Messages Cleanup esphome#8944 by @bdraco
- [dht] Clean-up, shorten some log messages esphome#8949 by @kbx81
- Have ESPHome’s YAML dumper comply with its own yamllint rules esphome#8957 by @jpeletier
- Allow Weikai to pass data_bit validation esphome#8917 by @timdaman
- [max9611] Remove redundant “max9611” from log messages esphome#8967 by @kbx81
- [nextion] Allocate NextionQueue in PSRAM (if available) esphome#8979 by @edwardtfn
- [esp32c6] Add test base file and platformio env esphome#8973 by @jesserockz
- Add missing icons and device classes to BME680 sensors esphome#8960 by @tronikos
- [preferences] Shorten log messages esphome#8982 by @kbx81
- [lc709203f] Add battery monitor esphome#8037 by @ilikecake (new-integration)
- [mdns] Set up only after API is set up esphome#9000 by @jesserockz
- [const] Move CONF_X and CONF_Y to const.py esphome#8999 by @Hannah-GBS
- [core] Update defines.h esp-idf version esphome#8974 by @jesserockz
- [spi] Remove redundant “SPI” from log messages esphome#8970 by @kbx81
- [sdp3x] Remove redundant “sdp3x” from log messages esphome#8969 by @kbx81
- [ethernet] Remove redundant “ethernet” from log messages esphome#8966 by @kbx81
- [bmp3xx] Remove redundant “bmp3xx” from log messages esphome#8965 by @kbx81
- Remove unnecessary ellipsis esphome#8964 by @kbx81
- [wireguard] Remove redundant “wireguard” from log messages esphome#8963 by @kbx81
- [dashboard] Fix logging colors esphome#8984 by @swoboda1337
- [sps30] Shorten log messages esphome#8971 by @kbx81
- [bmp581] Shorten some log messages esphome#8948 by @kbx81
- [api] Streamline some log strings esphome#8962 by @kbx81
- [mqtt] Remove redundant “mqtt” from log messages esphome#8968 by @kbx81
- [ci, nrf52] make zephyr clang mandatory esphome#8992 by @tomaszduda23
- [sdl] Add config for SDL window flags esphome#8998 by @Hannah-GBS
- [nextion] Add optional
max_queue_sizelimit to prevent queue overflows esphome#8976 by @edwardtfn - Move CONF_REQUEST_HEADERS to const.py esphome#9002 by @numo68
- [api] Fix build error in IDF 5.5 esphome#9007 by @swoboda1337
- [list-components.py] Only add platforms that are actually platforms. esphome#9005 by @clydebarrow
- [qwiic_pir] Clean-up, shorten some log messages esphome#8951 by @kbx81
- [esp32] Add config vars for compiler esphome#9023 by @kbx81
- Implement proper API connection teardown before deep sleep/reboot esphome#9008 by @bdraco
- [config] Clean build on ESP-IDF when component/platform combos change esphome#9028 by @clydebarrow
- Disable ruff rule UP038 esphome#9029 by @bdraco
- Update webserver local assets to 20250608-225410 esphome#9030 by @esphomebot
- Reduce ESP_LOGCONFIG calls esphome#9026 by @bdraco
- Force socket ready when high frequency looping esphome#9032 by @juanboro
- [psram] Add P4 support esphome#8545 by @clydebarrow
- [nextion] Use safe restart to properly handle globals and restart logging esphome#9010 by @edwardtfn
- [max7219digit, servo, tsl2591] ESP_LOGCONFIG call reduction (Extend #9026) esphome#9033 by @kbx81
- [tsl2561, tsl2591] Shorten log messages esphome#9034 by @kbx81
- Change RP2040 PIO SK6812 timings esphome#9020 by @pseud0sphere
- Add LWIP optimization options to reduce flash usage esphome#8946 by @bdraco (breaking-change)
- [globals] Prevent redundant oversized string checks in loop esphome#9001 by @edwardtfn
- [nextion] Optimize log messages to reduce memory usage esphome#9039 by @edwardtfn
- [nextion] Add configurable limit for commands processed per loop esphome#8972 by @edwardtfn
- [lvgl] Fix templated argument to
lvgl.is_idleesphome#9014 by @clydebarrow - Replace API deferred queue with efficient message batching system esphome#9012 by @bdraco (breaking-change)
- Reduce Bluetooth overhead by disabling unused logging categories esphome#8945 by @bdraco
- [inkplate] Remove arduino dependency esphome#9031 by @jesserockz
- [core] Include esp_mac.h on Arduino too esphome#9040 by @swoboda1337
- Use a
definefor log message constants esphome#8952 by @kbx81 - [esp_ldo] Implement support for ESP32-P4 LDO esphome#9009 by @clydebarrow (new-integration)
- Fix: Seeed Studio MR60FDA2 threshold height could not be set esphome#9011 by @limengdu
- [esp32] Use release zip from pioarduino/platform-espressif32 instead of git tag esphome#8975 by @jesserockz
- [esp32_rmt] Add variant validation for use_dma esphome#8897 by @swoboda1337
- Ensure components only powerdown after teardown esphome#9044 by @bdraco
- use
encode_uintXXesphome#8847 by @ximex - Add OpenThread support on ESP-IDF esphome#7506 by @mrene (new-integration)
- [shtcx] Shorten log messages esphome#9046 by @kbx81
- [application] Fix build error on some IDF versions esphome#9045 by @kbx81
- [spi] Restrict octal spi to S3/S2/P4 esphome#9041 by @clydebarrow
- Reserve memory for component and platform vectors esphome#9042 by @bdraco
- Improve shutdown reliability when tx buffer is full esphome#9043 by @bdraco
- Add support for custom request headers in online_image component esphome#8985 by @numo68
- Openthread code updates esphome#9047 by @jesserockz
- [sgp4x] Shorten log messages, various clean-up esphome#9048 by @kbx81
- Fix dashboard logging being escaped before parser esphome#9054 by @bdraco
- Always perform select() when loop duration exceeds interval esphome#9058 by @bdraco
- [nextion] Remove upload flags reset from success path to prevent TFT corruption esphome#9064 by @edwardtfn
- Fix BYPASS_AUTO feature to work with or without an arming delay esphome#9051 by @heythisisnate
- Fix misleading comment in API esphome#9069 by @bdraco
- [prometheus] Remove
cv.only_with_arduinoesphome#9061 by @jesserockz - [esp32] Dynamically set default framework based on variant esphome#9060 by @jesserockz
- Fix
captive_portalloading entireweb_serveresphome#9066 by @bdraco - Make ParseOnOffState enum uint8_t esphome#9083 by @bdraco
- Optimize Component and Application state storage from uint32_t to uint8_t esphome#9082 by @bdraco (breaking-change)
- Small optimizations to api buffer helper esphome#9071 by @bdraco
- Reduce entity memory usage by eliminating field shadowing and bit-packing esphome#9076 by @bdraco (breaking-change)
- Optimize memory usage by lazy-allocating raw callbacks in sensors esphome#9077 by @bdraco
- Fix API message encoding to return actual size instead of calculated size esphome#9073 by @bdraco
- Optimize Application
area_fromstd::stringtoconst char*esphome#9085 by @bdraco (breaking-change) - Fix unbound BLE event queue growth and reduce memory usage esphome#9052 by @bdraco
- [fan] fix initial FanCall to properly set speed esphome#8277 by @dhewg
- Implement a lock free ring buffer for BLEScanResult to avoid drops esphome#9087 by @bdraco
- Make BLE queue lock free esphome#9088 by @bdraco
- Fix protobuf encoding size mismatch by passing force parameter in encode_string esphome#9074 by @bdraco
- [i2s_audio] Check for a nullptr before disabling and deleting channel esphome#9062 by @kahrendt
- Ensure we can send batches where the first message exceeds MAX_PACKET_SIZE esphome#9068 by @bdraco
- Add common base classes for entity protobuf messages to reduce duplicate code esphome#9090 by @bdraco
- Reduce Component blocking threshold memory usage by 2 bytes per component esphome#9081 by @bdraco
- Remove
std::prefix as not all platforms have access yet. esphome#9095 by @jesserockz - [i2s_audio] Add
dump_configmethods, shorten log messages esphome#9099 by @kbx81 - [i2s_audio] Bugfix: crashes when unlocking i2s bus multiple times esphome#9100 by @kahrendt
- [spi] Cater for non-word-aligned buffers on esp8266 esphome#9108 by @clydebarrow
- Optimize LightState memory layout esphome#9113 by @bdraco
- Reduce Switch component memory usage by 8 bytes per instance esphome#9112 by @bdraco
Dependency Changes
Section titled “Dependency Changes”- Bump aioesphomeapi from 30.2.0 to 31.0.0 esphome#8779 by @dependabot[bot]
- Bump cairosvg from 2.7.1 to 2.8.0 esphome#8780 by @dependabot[bot]
- Bump cairosvg from 2.8.0 to 2.8.1 esphome#8799 by @dependabot[bot]
- Bump aioesphomeapi from 31.0.0 to 31.0.1 esphome#8809 by @dependabot[bot]
- Bump setuptools from 80.4.0 to 80.7.1 esphome#8808 by @dependabot[bot]
- Bump ruff from 0.11.9 to 0.11.10 esphome#8818 by @dependabot[bot]
- Bump cairosvg from 2.8.1 to 2.8.2 esphome#8817 by @dependabot[bot]
- Bump codecov/codecov-action from 5.4.2 to 5.4.3 esphome#8820 by @dependabot[bot]
- Bump aioesphomeapi from 31.0.1 to 31.1.0 esphome#8849 by @dependabot[bot]
- Bump setuptools from 80.7.1 to 80.8.0 esphome#8858 by @dependabot[bot]
- Bump tornado from 6.4.2 to 6.5.1 esphome#8882 by @dependabot[bot]
- Bump ruff from 0.11.10 to 0.11.11 esphome#8883 by @dependabot[bot]
- Bump pyupgrade from 3.19.1 to 3.20.0 esphome#8891 by @dependabot[bot]
- Bump actions/checkout from 4.1.7 to 4.2.2 esphome#8904 by @jesserockz
- Bump ruamel-yaml from 0.18.10 to 0.18.11 esphome#8910 by @dependabot[bot]
- Bump pytest-mock from 3.14.0 to 3.14.1 esphome#8909 by @dependabot[bot]
- Bump setuptools from 80.8.0 to 80.9.0 esphome#8915 by @dependabot[bot]
- Bump pytest-xdist from 3.6.1 to 3.7.0 esphome#8916 by @dependabot[bot]
- Bump docker/build-push-action from 6.17.0 to 6.18.0 in /.github/actions/build-image esphome#8919 by @dependabot[bot]
- Bump pytest from 8.3.5 to 8.4.0 esphome#8993 by @dependabot[bot]
- Bump ruamel-yaml from 0.18.11 to 0.18.12 esphome#8977 by @dependabot[bot]
- Bump aioesphomeapi from 31.1.0 to 32.0.0 esphome#9004 by @dependabot[bot]
- Bump ruff from 0.11.11 to 0.11.13 esphome#9017 by @dependabot[bot]
- Bump ruamel-yaml from 0.18.12 to 0.18.13 esphome#9018 by @dependabot[bot]
- Bump aioesphomeapi from 32.0.0 to 32.1.0 esphome#9024 by @dependabot[bot]
- Bump aioesphomeapi from 32.1.0 to 32.2.0 esphome#9025 by @dependabot[bot]
- Bump aioesphomeapi from 32.2.0 to 32.2.1 esphome#9038 by @dependabot[bot]
- Bump ruamel-yaml from 0.18.13 to 0.18.14 esphome#9037 by @dependabot[bot]
- Bump aioesphomeapi from 32.2.1 to 32.2.3 esphome#9091 by @dependabot[bot]