Download Latest Version 2025.9.3 source code.tar.gz (4.6 MB)
Email in envelope

Get an email when there's a new version of ESPHome

Home / 2025.9.0
Name Modified Size InfoDownloads / Week
Parent folder
2025.9.0 source code.tar.gz 2025-09-17 4.6 MB
2025.9.0 source code.zip 2025-09-17 7.8 MB
README.md 2025-09-17 33.7 kB
Totals: 3 Items   12.4 MB 0

Full list of changes

New Features

  • [light] Add support for querying effects by index [#10195] by @edwardtfn (new-feature)
  • [mipi_spi] Add model [#10392] by @clydebarrow (new-feature)
  • [mapping] Use custom allocator [#9972] by @clydebarrow (new-feature)
  • Add JPEG encoder support via new camera_encoder component [#9459] by @DT-art1 (new-component) (new-feature)
  • [nrf52] add dfu [#9319] by @tomaszduda23 (new-feature)
  • [bluetooth_proxy] Expose configured scanning mode in API responses [#10490] by @bdraco (new-feature)
  • [wizard] extend the wizard dashboard API to allow upload and empty config options [#10203] by @maximmaxim345 (new-feature)
  • [mipi_rgb] Unified driver for MIPI RGB displays [#9892] by @clydebarrow (new-component) (new-feature) (new-platform)
  • [api] Add timezone support to GetTimeResponse for automatic timezone synchronization [#10661] by @bdraco (new-feature)
  • [bl0940] extend configuration options of bl0940 device [#8158] by @dan-s-github (new-feature) (new-platform)

New Components

  • Add JPEG encoder support via new camera_encoder component [#9459] by @DT-art1 (new-component) (new-feature)
  • [mipi_rgb] Unified driver for MIPI RGB displays [#9892] by @clydebarrow (new-component) (new-feature) (new-platform)

New Platforms

  • [mipi_rgb] Unified driver for MIPI RGB displays [#9892] by @clydebarrow (new-component) (new-feature) (new-platform)
  • [bl0940] extend configuration options of bl0940 device [#8158] by @dan-s-github (new-feature) (new-platform)

Breaking Changes

  • [core] Fix preference storage to account for device_id [#10333] by @bdraco (breaking-change)
  • [lvgl] Replace spinbox step with selected_digit [#10349] by @clydebarrow (breaking-change)
  • [sensor] Change state_class_to_string() to return const char* to avoid allocations [#10533] by @bdraco (breaking-change)
  • [bluetooth_proxy] Change default for active connections to true [#10546] by @bdraco (breaking-change)
  • [core] Store component source strings in flash on ESP8266 (breaking change) [#10621] by @bdraco (breaking-change)
  • [inkplate] Rename component and fix grayscale [#10200] by @JosipKuci (breaking-change)

All changes

  • [CI] Fix CI job failures for PRs with >300 changed files [#10215] by @bdraco
  • [qm6988] Clean up code [#10216] by @jesserockz
  • [quality] Remove period from audio related Invalid raises [#10229] by @jesserockz
  • [api] Optimize message buffer allocation and eliminate redundant methods [#10231] by @bdraco
  • [esp32] Optimize preferences is_changed() by replacing temporary vector with unique_ptr [#10246] by @bdraco
  • [core] Remove unnecessary FD_SETSIZE check on ESP32 and improve logging [#10255] by @bdraco
  • [esp8266] Replace std::vector with std::unique_ptr in preferences to save flash [#10245] by @bdraco
  • [api] Optimize APIFrameHelper virtual methods and mark implementations as final [#10278] by @bdraco
  • [api] Mark protobuf message classes as final to enable compiler optimizations [#10276] by @bdraco
  • [api] Mark APIConnection as final for compiler optimizations [#10279] by @bdraco
  • [api] Optimize protobuf decode loop for better performance and maintainability [#10277] by @bdraco
  • [CI] Rename and expand needs-docs workflow [#10299] by @jesserockz
  • [safe_mode] Reduce flash usage by 184 bytes through code optimization [#10284] by @bdraco
  • [helper] Make crc8 function more flexible to avoid reimplementation in individual components [#10201] by @jesserockz
  • [api] Avoid object_id string allocations for all entity info messages [#10260] by @bdraco
  • [mdns] Reduce flash usage and prevent RAM over-allocation in service compilation [#10287] by @bdraco
  • [quality] Convert remaining to_code to async [#10271] by @jesserockz
  • [binary_sensor] Convert LOG_BINARY_SENSOR macro to function to reduce flash usage [#10294] by @bdraco
  • [sensor] Convert LOG_SENSOR macro to function to reduce flash usage [#10290] by @bdraco
  • [button] Convert LOG_BUTTON macro to function to reduce flash usage [#10295] by @bdraco
  • [number] Convert LOG_NUMBER macro to function to reduce flash usage [#10293] by @bdraco
  • [light] Add support for querying effects by index [#10195] by @edwardtfn (new-feature)
  • [CI] Base too-big label on new additions only [#10307] by @jesserockz
  • [web_server] Reduce flash usage by consolidating defer calls in switch and lock handlers [#10297] by @bdraco
  • [core] Eliminate heap allocation in teardown_components by using StaticVector [#10256] by @bdraco
  • [libretiny] Optimize preferences is_changed() by replacing temporary vector with unique_ptr [#10272] by @bdraco
  • [bluetooth_proxy] Mark BluetoothConnection and BluetoothProxy as final for compiler optimizations [#10280] by @bdraco
  • [CI] Also require tests for new-features [#10311] by @jesserockz
  • [homeassistant] Add compilation test for homeassistant.tag_scanned action [#10319] by @bdraco
  • [core] Add idf-tidy env for esp32-c6 [#10270] by @jesserockz
  • [opentherm] Rename c++ files for predictable doxygen generation [#10314] by @jesserockz
  • [ld2420] Rename c++ files for predictable doxygen generation [#10315] by @jesserockz
  • [nrf52] update toolchain to v0.17.4, support mac [#10391] by @tomaszduda23
  • [nrf52] fix build in dashboard [#10323] by @tomaszduda23
  • fix temperature config validation regex [#9575] by @ximex
  • Update Python to 3.11 in AI instructions [#10407] by @ximex
  • [mipi_spi] Add model [#10392] by @clydebarrow (new-feature)
  • improve AI instructions [#10416] by @ximex
  • [esp32_ble_client] Add missing ESP_GATTC_UNREG_FOR_NOTIFY_EVT logging [#10347] by @bdraco
  • [core] Fix preference storage to account for device_id [#10333] by @bdraco (breaking-change)
  • [core] Dont copy platform source files if there are no entities of that type [#10436] by @jesserockz
  • improve const imports of esphome.const [#10438] by @ximex
  • Revert "[core] Dont copy platform source files if there are no entities of that type" [#10441] by @clydebarrow
  • [api] Fix string lifetime issue in fill_and_encode_entity_info for dynamic object_id [#10482] by @bdraco
  • [absolute_humidity] Fix typo [#10474] by @DAVe3283
  • [esp32_ble_tracker] Remove duplicate client promotion logic [#10321] by @bdraco
  • [bluetooth_proxy] Remove unused ClientState::SEARCHING state [#10318] by @bdraco
  • [mapping] Use custom allocator [#9972] by @clydebarrow (new-feature)
  • [lvgl] Replace spinbox step with selected_digit [#10349] by @clydebarrow (breaking-change)
  • Adjust sen5x to match VOC/NOX datasheet [#9894] by @Fmstrat
  • [lvgl] Update hello world [#10469] by @clydebarrow
  • [mipi] Add type to models for better type hinting downstream [#10475] by @jesserockz
  • Add JPEG encoder support via new camera_encoder component [#9459] by @DT-art1 (new-component) (new-feature)
  • [sntp] Use callbacks to trigger on_time_sync for ESP32 and ESP8266 [#10390] by @kaechele
  • [display] Allow page actions to have auto generated display id [#10460] by @jesserockz
  • [nrf52] add dfu [#9319] by @tomaszduda23 (new-feature)
  • [bluetooth_proxy] Expose configured scanning mode in API responses [#10490] by @bdraco (new-feature)
  • [nrf52] fix missing bootloader [#10519] by @tomaszduda23
  • [wifi] Guard wifi error cases introduced in IDF5.2 by a version check [#10466] by @gnumpi
  • [core] Fix timezone offset calculation [#10426] by @eyal0
  • [core] Replace magic coroutine priority numbers with self-documenting CoroPriority enum [#10518] by @bdraco
  • [esp32] Remove hardcoding of ulp [#10535] by @swoboda1337
  • [core] Optimize fnv1_hash to avoid string allocations for static entities [#10529] by @bdraco
  • [core] Use get_icon_ref() in entity platform logging to avoid string allocations [#10530] by @bdraco
  • [sensor] Change state_class_to_string() to return const char* to avoid allocations [#10533] by @bdraco (breaking-change)
  • [host] Fix memory allocation in preferences load() method [#10506] by @bdraco
  • [core] Use get_device_class_ref() in entity platform logging to avoid string allocations [#10531] by @bdraco
  • [core] Use get_unit_of_measurement_ref() in entity logging to avoid string allocations [#10532] by @bdraco
  • [bluetooth_proxy] Change default for active connections to true [#10546] by @bdraco (breaking-change)
  • [wifi] Check for esp32_hosted on no wifi variants [#10528] by @swoboda1337
  • [wizard] extend the wizard dashboard API to allow upload and empty config options [#10203] by @maximmaxim345 (new-feature)
  • [esp8266] Store GPIO initialization arrays in PROGMEM to save RAM [#10560] by @bdraco
  • [esp8266] Reduce preference memory usage by 40% through field optimization [#10557] by @bdraco
  • [i2c] Optimize memory usage with stack allocation for small buffers [#10565] by @bdraco
  • [sps30] Tidy up, optimize [#10606] by @kbx81
  • [sgp30] Tidy up, optimize [#10607] by @kbx81
  • [sensirion_common] Tidy up, optimize [#10604] by @kbx81
  • [esphome] ESP8266: Move OTA error strings to PROGMEM (saves 116 bytes RAM) [#10620] by @bdraco
  • [logger] Use LogString for UART selection strings (saves 28 bytes RAM on ESP8266) [#10615] by @bdraco
  • [sensor] ESP8266: Use LogString for state_class_to_string() to save RAM [#10617] by @bdraco
  • [web_server] ESP8266: Store OTA response strings in PROGMEM (saves 52 bytes RAM) [#10616] by @bdraco
  • [script] ESP8266: Store log format strings in PROGMEM (saves 240 bytes RAM) [#10614] by @bdraco
  • [gpio] ESP8266: Store log strings in flash memory [#10610] by @bdraco
  • [light] ESP8266: Store log strings in flash memory [#10611] by @bdraco
  • [captive_portal] ESP8266: Move strings to PROGMEM (saves 192 bytes RAM) [#10600] by @bdraco
  • [mdns] Move constant strings to flash on ESP8266 [#10599] by @bdraco
  • [api] Store Noise protocol prologue in flash on ESP8266 [#10598] by @bdraco
  • [esp8266][api] Store error strings in PROGMEM to reduce RAM usage [#10568] by @bdraco
  • [sen5x] Various optimizing & tidying up [#10602] by @kbx81
  • [esp8266] Store component warning strings in flash to reduce RAM usage [#10623] by @bdraco
  • Atm90e32/26 device class fixes [#10629] by @davidmonro
  • [core] Convert LOG_UPDATE_INTERVAL macro to function to reduce flash usage [#10636] by @bdraco
  • [core] Skip redundant process_to_add() call when no scheduler items added [#10630] by @bdraco
  • Fix DNS resolution inconsistency between logs and OTA operations [#10595] by @bdraco
  • [core] Add memory pool to scheduler to reduce heap fragmentation [#10536] by @bdraco
  • [esp8266][logger] Store LOG_LEVELS strings in PROGMEM to reduce RAM usage [#10569] by @bdraco
  • [esphome] Store OTA component log strings in flash on ESP8266 [#10570] by @bdraco
  • [gpio_expander] Add intelligent pin type selection to CachedGpioExpander template [#10577] by @bdraco
  • [ota] Fix duplicate include and sort [#10643] by @jesserockz
  • [pca6416a] Migrate to CachedGpioExpander to reduce I2C bus usage [#10587] by @bdraco
  • [pca9554] Migrate to CachedGpioExpander to reduce I2C bus usage [#10571] by @bdraco
  • [pcf8574] Migrate to CachedGpioExpander to reduce I2C bus usage [#10573] by @bdraco
  • [sx1509] Migrate to CachedGpioExpander to reduce I2C bus usage [#10588] by @bdraco
  • [mcp23016] Migrate to CachedGpioExpander to reduce I2C bus usage [#10581] by @bdraco
  • [scheduler] Reduce SchedulerItem memory usage by 7.4% on 32-bit platforms [#10553] by @bdraco
  • [mipi_rgb] Unified driver for MIPI RGB displays [#9892] by @clydebarrow (new-component) (new-feature) (new-platform)
  • [api] Store plaintext error message in PROGMEM on ESP8266 [#10634] by @bdraco
  • [core] Store component source strings in flash on ESP8266 (breaking change) [#10621] by @bdraco (breaking-change)
  • [esp32] Reduce GPIO memory usage by 50% through bit-packing [#10556] by @bdraco
  • [core] Fix serial upload regression from DNS resolution PR [#10595] [#10648] by @bdraco
  • Add I2S Audio Port for ESP32-C5/C6/H2 [#10414] by @ximex
  • [core] Reduce unnecessary nesting in scheduler loop [#10644] by @bdraco
  • [adc] Fix autorange negative coefficient bug causing incorrect voltage readings [#10549] by @edwardtfn
  • [nextion] Increase delay before reboot to prevent TFT upload interruption [#10402] by @edwardtfn
  • Sort codeowners using case-insensitive [#10651] by @jesserockz
  • [core] Reduce flash usage by refactoring looping component partitioning [#10652] by @bdraco
  • [core] Refactor insertion sort functions to eliminate code duplication [#10653] by @bdraco
  • RingBuffer: Make partial writing optional [#10302] by @gnumpi
  • allow to implement show_logs as external component [#10523] by @tomaszduda23
  • [nrf52] add more tests [#10591] by @tomaszduda23
  • [ms5611] remove delay in setup [#10658] by @mrtoy-me
  • [api] Add timezone support to GetTimeResponse for automatic timezone synchronization [#10661] by @bdraco (new-feature)
  • Allow both files and directories to be passed to update-all [#10575] by @swoboda1337
  • [thermostat] General clean-up, optimization, properly support "auto" mode [#10561] by @kbx81
  • [bl0940] extend configuration options of bl0940 device [#8158] by @dan-s-github (new-feature) (new-platform)
  • [inkplate] Rename component and fix grayscale [#10200] by @JosipKuci (breaking-change)
  • [thermostat] Rename timer enums to mitigate naming conflict [#10666] by @kbx81
  • Improve coverage for various core modules [#10663] by @bdraco
  • Update webserver local assets to 20250910-110003 [#10668] by @esphomebot
  • [adc] Fix FILTER_SOURCE_FILES location [#10673] by @jesserockz
  • Openthread Fix Factory Reset [#9281] by @rwrozelle
  • [core] Add millisecond precision to logging timestamps [#10677] by @bdraco
  • Add comprehensive tests for choose_upload_log_host to prevent regressions [#10679] by @bdraco
  • Add some more coverage for dashboard web_server [#10682] by @bdraco
  • [tests] Add upload_program and show_logs test coverage to prevent regressions [#10684] by @bdraco
  • Add additional coverage for util and writer [#10683] by @bdraco
  • Add additional dashboard and main tests [#10688] by @bdraco
  • [core] fix upload to device via MQTT IP lookup (e.g. when mDNS is disable) [#10632] by @Links2004
  • Add additional test coverage ahead of Path conversion [#10700] by @bdraco
  • [ethernet] Fix permanent component failure from undocumented ESP_FAIL in IPv6 setup [#10708] by @bdraco
  • [core] Optimize MAC address formatting to eliminate sprintf dependency [#10713] by @bdraco
  • [api] Revert unneeded GetTime bidirectional support added in [#9790] [#10702] by @bdraco
  • [api] Optimize HelloResponse server_info to reduce memory usage [#10701] by @bdraco
  • [scheduler] Fix timing accumulation in scheduler causing incorrect execution measurements [#10719] by @bdraco
  • ina2xx should be total increasing for energy sensor [#10711] by @mikelawrence
  • [md5] Optimize MD5::get_hex() to eliminate sprintf dependency [#10710] by @bdraco
  • [wifi] Optimize WiFi MAC formatting to eliminate sprintf dependency [#10715] by @bdraco
  • [esp32_ble] Optimize BLE hex formatting to eliminate sprintf dependency [#10714] by @bdraco
  • [select] Use const references to avoid unnecessary vector copies [#10741] by @bdraco
  • [dashboard] Fix archive handler to properly delete build folders using correct path [#10724] by @bdraco
  • [ethernet] Conditionally compile PHY-specific code to reduce flash usage [#10747] by @bdraco
  • [mqtt] fix publish payload length when payload contains null characters [#10744] by @jokujossai
  • [ade7880] fix channel a voltage registry [#10750] by @jokujossai
  • [wizard] Fix KeyError when running wizard with empty OTA password [#10753] by @bdraco
  • [core] Fix clean build files to properly clear PlatformIO cache [#10754] by @bdraco
- Bump ruff from 0.12.8 to 0.12.9 [[#10239]](https://github.com/esphome/esphome/pull/10239) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump ruamel-yaml from 0.18.14 to 0.18.15 [[#10310]](https://github.com/esphome/esphome/pull/10310) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump codecov/codecov-action from 5.4.3 to 5.5.0 [[#10336]](https://github.com/esphome/esphome/pull/10336) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump ruff from 0.12.9 to 0.12.10 [[#10362]](https://github.com/esphome/esphome/pull/10362) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump ruff from 0.12.10 to 0.12.11 [[#10483]](https://github.com/esphome/esphome/pull/10483) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump esphome-dashboard from 20250814.0 to 20250828.0 [[#10484]](https://github.com/esphome/esphome/pull/10484) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 39.0.0 to 39.0.1 [[#10491]](https://github.com/esphome/esphome/pull/10491) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 in /.github/workflows [[#10572]](https://github.com/esphome/esphome/pull/10572) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump pytest from 8.4.1 to 8.4.2 [[#10579]](https://github.com/esphome/esphome/pull/10579) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump codecov/codecov-action from 5.5.0 to 5.5.1 [[#10585]](https://github.com/esphome/esphome/pull/10585) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump esphome-dashboard from 20250828.0 to 20250904.0 [[#10580]](https://github.com/esphome/esphome/pull/10580) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump actions/setup-python from 5.6.0 to 6.0.0 [[#10584]](https://github.com/esphome/esphome/pull/10584) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump actions/setup-python from 5.6.0 to 6.0.0 in /.github/actions/restore-python [[#10586]](https://github.com/esphome/esphome/pull/10586) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump actions/github-script from 7.0.1 to 8.0.0 [[#10583]](https://github.com/esphome/esphome/pull/10583) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump actions/stale from 9.1.0 to 10.0.0 [[#10582]](https://github.com/esphome/esphome/pull/10582) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump ruff from 0.12.11 to 0.12.12 [[#10578]](https://github.com/esphome/esphome/pull/10578) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump pytest-mock from 3.14.1 to 3.15.0 [[#10593]](https://github.com/esphome/esphome/pull/10593) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 39.0.1 to 40.0.0 [[#10594]](https://github.com/esphome/esphome/pull/10594) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 40.0.0 to 40.0.1 [[#10596]](https://github.com/esphome/esphome/pull/10596) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump zeroconf from 0.147.0 to 0.147.2 [[#10642]](https://github.com/esphome/esphome/pull/10642) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump pytest-cov from 6.2.1 to 6.3.0 [[#10640]](https://github.com/esphome/esphome/pull/10640) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 40.0.1 to 40.0.2 [[#10641]](https://github.com/esphome/esphome/pull/10641) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump pytest-cov from 6.3.0 to 7.0.0 [[#10660]](https://github.com/esphome/esphome/pull/10660) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 40.0.2 to 40.1.0 [[#10662]](https://github.com/esphome/esphome/pull/10662) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 40.1.0 to 40.2.0 [[#10703]](https://github.com/esphome/esphome/pull/10703) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump aioesphomeapi from 40.2.0 to 40.2.1 [[#10721]](https://github.com/esphome/esphome/pull/10721) by [@dependabot[bot]](https://github.com/apps/dependabot)
Source: README.md, updated 2025-09-17