ESPHome 2026.6.0: Meet the new Device Builder

Release Overview
Section titled “Release Overview”ESPHome 2026.6.0 retires the legacy in-tree dashboard, replacing it with the new ESPHome Device Builder,
which reached 1.0.0 this release. The release also raises the default WiFi
security mode on ESP8266 to WPA2 and finally makes WiFi and ethernet enable_on_boot: false reclaim the
15–30 KB and 3–8 KB of internal SRAM they were always supposed to, and delivers up to 4.5× faster LVGL config
validation. A wide audio-stack modernization brings zero-copy ring buffers, any-bit-depth mixing, and a new
router speaker, while a multi-PR effort prepares the codebase for ESP-IDF 6 and native RISC-V clang-tidy. It
also adds a new motion IMU framework with BMI270 and LSM6DS drivers, two USB-serial drivers, a PCM5122 audio
DAC, YAML frontmatter, and a top-level build_flags option that finally works on native IDF.
Upgrade Checklist
Section titled “Upgrade Checklist”- If you use an ESP8266 on a legacy WPA-only (TKIP) router, pin
min_auth_mode: WPAunderwifi:or the device will stop associating - If you use the
dsmrelectricity_switch_positionsensor, move it fromsensor:totext_sensor: - If you use the
nextiondisplay withdump_device_info: true, remove that option (device info is always logged now) - If you still load components from a
custom_components/folder, migrate them toexternal_components: - If your
time:component usesplatform: homeassistantwith an explicittimezone:, note that Home Assistant will no longer override your configured zone - If you use the
dlms_metercomponent with theprovider:option, expect a deprecation warning; the option is now ignored and will be removed in 2026.11.0 - If you maintain external components calling
mark_failed("...")orstatus_set_error("..."), switch tomark_failed(LOG_STR("..."))/status_set_error(LOG_STR("...")) - If you maintain external components using
cv.only_with_esp_idforCORE.using_esp_idf, replace them withcv.only_on_esp32/CORE.is_esp32 - If you have lambdas calling
text_sensor->raw_state, switch totext_sensor->get_raw_state() - If you have lambdas referencing the
mipi_dsi::MIPI_DSIC++ type, rename it tomipi_dsi::MipiDsi
ESPHome Device Builder Replaces the Legacy Dashboard
Section titled “ESPHome Device Builder Replaces the Legacy Dashboard”The new ESPHome Device Builder, shipped as an opt-in public beta in 2026.5.0, reached 1.0.0 this release and replaces the legacy in-tree dashboard, which is being retired. The Device Builder lives in two repos, device-builder (Python backend) and device-builder-frontend (web UI), and as of 2026.6.0 it is the dashboard bundled by default in the official Home Assistant ESPHome add-on.

What it brings over the legacy dashboard:
- Visual component and automation builder alongside a CodeMirror YAML editor, with a left-sidebar device
navigator. The legacy dashboard was a plain text editor over a
.yamlfile. - Component catalog with dependency resolution and a per-board pin info viewer that maps GPIO capabilities and shows which component is using each pin.
- Firmware job queue with progress, history, and cancel for compile / install / clean, replacing the legacy one-operation-at-a-time model.
- Remote builder: one Device Builder instance can offload OTA builds to another over a peer-paired link (mDNS discovery, out-of-band fingerprint confirmation, identity rotation, per-peer auto-route).
- Labels, areas, an editable friendly name, device cloning, and multi-select bulk actions (update, delete, archive, and label across an arbitrary set of devices).
- Out-of-sync detection: an encryption-state mismatch badge on every device, plus version and config-hash in-sync diagnostics in the device drawer.
- YAML diff view, cross-config YAML search with surrounding context, and a command palette (⌘K / Ctrl-K).
- Card and table views with configurable columns and faceted filters (platform / status / area / labels).
- Real settings UI with light / dark / system theme and localization underway across multiple languages.
- First-run WiFi onboarding and an expanded install-method dialog: Web Serial flashing, server-side USB
(relabeled for the Home Assistant host when running as the add-on),
web.esphome.iodownload, and manual.bindownload.
The 2026.5.0 Use new Device Builder Preview opt-in toggle is gone; the Device Builder is simply the dashboard now.
ESP8266 Default WiFi Security Raised to WPA2
Section titled “ESP8266 Default WiFi Security Raised to WPA2”ESP8266 now defaults to min_auth_mode: WPA2, matching the ESP32 default that has shipped for years. ESPHome
has been printing a deprecation warning on every ESP8266 config without an explicit min_auth_mode since 2026.1,
calling out exactly this flip. With ~40% of ESPHome installs running on ESP8266 hardware, this is the broadest
platform-wide change in the release (#16682 by
@swoboda1337).
Configurations connecting to modern WPA2/WPA3 access points need no change. Devices on legacy WPA-only (TKIP) routers must pin the old behavior explicitly:
wifi: min_auth_mode: WPAWiFi and Ethernet Now Truly Free Their Memory When Disabled at Boot
Section titled “WiFi and Ethernet Now Truly Free Their Memory When Disabled at Boot”enable_on_boot: false on wifi: and ethernet: previously skipped only the start() call, leaving the entire
driver resident in DMA-capable internal SRAM. Two PRs by @kbx81 split the heavy
allocation work into a lazy-init path that only runs when the interface is actually enabled, so a dormant
interface now costs zero internal RAM.
Reclaimed memory on ESP32:
- WiFi: roughly 15–30 KB of DMA-capable internal SRAM freed when
enable_on_boot: false(#16606). Field-tested on ESP32-S3 with W5500 SPI ethernet- I2S audio + bluetooth_proxy: free internal SRAM under peak load went from ~14 KB to ~32 KB, with min-free measurements reaching 78 KB in some configurations.
- Ethernet: roughly 3–8 KB freed when
enable_on_boot: false, matching parity with the WiFi lifecycle (#16607). Bringsethernet.enable/ethernet.disableactions andethernet.connected/ethernet.enabledconditions, mirroring the WiFi automation surface.
This is groundwork for running WiFi and ethernet side by side in a single configuration: each interface can now be brought up on demand without paying for the one that is not in use.
The W5500 SPI driver also got a CPU win in #16596 by @kahrendt: large frame transfers now go through an interrupt-driven DMA path instead of busy-waiting the CPU. Measured streaming 48 kHz 24-bit FLAC over W5500, ethernet task CPU usage dropped from ~5% to ~3.8%, roughly a quarter lower.
LVGL Configuration Validation Up to 4.5× Faster
Section titled “LVGL Configuration Validation Up to 4.5× Faster”The new device builder UI revalidates configurations on every save, which made esphome config latency a
direct UX cost. LVGL configs were the worst offender. A five-PR series by
@bdraco attacks the hot path in LVGL schema construction:
- Memoize and lazily build
container_schema(#16567) - repeated validation median dropped from 210 ms to 17 ms on a representative LVGL config. - Build widget update action schemas lazily (#16569) - saves roughly 200 ms at lvgl import time.
- Merge dict-extend chains (#16614) - 2.81× speed-up
on
read_config(0.246 s → 0.087 s on thelvtesthost.yaml). - Memoize
obj_schemaby widget type (#16615) - 2.14× speed-up stacked on top. - Build
automation_schemaevent validators lazily (#16633)- 4.5× reduction in per-call cost (281 ms → 63 ms across 29 widget types in a microbench).
The user-visible effect: every save in the device builder is noticeably snappier, especially on configurations with large LVGL screens.
Audio Stack Modernization
Section titled “Audio Stack Modernization”@kahrendt led a wide-ranging audio rework this cycle, replacing the
allocate-and-copy AudioSourceTransferBuffer pattern with a zero-copy RingBufferAudioSource across the
critical audio paths.
Zero-copy ring-buffer rollout eliminates one allocation and one extra copy per chunk of audio processing:
resampler(#16560)AudioDecoderfor the speaker media player (#16564)micro_wake_word(#16595)voice_assistant(#16597) - also drops two 1024-byte send buffers in favor of reading directly from the ring buffer
Mixer supports any bit depth (#16524). The mixer speaker
now accepts 8, 16, 24, or 32 bits per sample, lifting the last remaining 16-bit-only restriction from the
audio stack. Backed by esp-audio-libs v3.1.0 / v3.2.0, with the upstream library using template
specializations to keep the new code paths as fast as the old 16-bit-only version.
Resampler bit-depth pass-through (#16892). Now that the mixer handles any bit depth, the resampler defaults to passing the input audio’s bit depth through unchanged rather than auto-converting to match the output speaker. This avoids burning CPU cycles in the resampler when the downstream mixer would do a faster conversion anyway.
New router speaker component (#16592) for switching
between output speakers at runtime via the router.speaker.switch_output action. A typical use case is
switching between SPDIF and analog I2S outputs live from a select entity, with audio staying in sync after
the switch. See router for details.
micro_wake_word task stack can live in PSRAM (#16632),
saving roughly 3 KB of internal SRAM on the ESP32-S3 with no measurable performance impact. Set
task_stack_in_psram: true.
PSRAM task-stack handling consolidated (#16628) so
audio_file, audio_http, mixer, resampler, sendspin, and speaker.media_player all share the same
validation pattern, with a bug fix for task_stack_in_psram: false on the speaker media player.
ESP-IDF 6 and Native RISC-V clang-tidy
Section titled “ESP-IDF 6 and Native RISC-V clang-tidy”A multi-PR effort by @swoboda1337 makes static analysis substantially better at catching real-firmware bugs:
script/clang-tidynow supports RISC-V targets natively (#16809)- clang’s upstream RISC-V backend can now analyze ESP32-C3/C6/H2/P4 builds instead of falling back to the 32-bit x86 stand-in that was used for the Xtensa path.
- Native ESP-IDF clang-tidy is now the comprehensive pass (#16823).
The arduino toolchain has a blind spot where its headers pull
std::float math overloads into the global namespace, hidingperformance-type-promotion-in-math-fnfindings. The IDF toolchain catches them. - Float-to-double promotion fixed across the codebase
(#16812) -
display,daikin_arc,nau7802,sgp4x,thermopro_ble,tuyaall switched from C<math.h>to the float-typedstd::overloads, keeping math in float on 32-bit MCUs instead of needlessly promoting to double. - clang-tidy passes on ESP-IDF 6 (#16850) - sdkconfig pinned to newlib, GCC-only flags stripped, ledc HAL guard added under static analysis. This is the foundation for upcoming ESP-IDF 6 support.
arduino-esp32stub for managed IDF components (#16695)- on PlatformIO, components like FastLED that declare
REQUIRES arduino-esp32now resolve to a stub that re-exports the framework via CMakeINTERFACE, instead of the IDF Component Manager trying to download a duplicate.
- on PlatformIO, components like FastLED that declare
- 100% patch coverage gating (#16827 by @jesserockz) - new PRs must cover every changed line. The project-level coverage stays informational so contributors are not penalized for pre-existing untested code.
New Components and Hardware Support
Section titled “New Components and Hardware Support”@clydebarrow landed a coordinated IMU stack: a generic motion
hub component that provides acceleration, angular rate, and derived pitch/roll values, plus actions for
automatic pitch/roll calibration (#16226). Two concrete
drivers ride on top:
- Bosch BMI270 (#16202) - used in M5Stack Tab5 and Espressif’s EchoEar
- STMicro LSM6DS3TR-C (#16232) - used in the Seeed ReTerminal D1001
New sensors and DACs:
- PCM5122 audio DAC by @remcom (#15709) - the Texas Instruments stereo I2S DAC popular in Raspberry Pi HATs, with mute, digital volume, and four configurable GPIO pins exposed through the standard pin schema.
- XDB401 pressure sensor by @RT530 (#15108) - I2C pressure and temperature from the XIDIBEI XDB401.
USB-serial drivers by @p1ngb4ck:
- FTDI FT23XX family (#14587) - covers FT232R, FT2232C, FT2232H, FT4232H, FT232H, FT230X, and AM/BM variants; chip type auto-detected from the USB descriptor; multi-channel chips supported as separate channels.
- Prolific PL2303 family (#16885) - covers the legacy PL2303H/HX through the modern G-series; baud rate encoding selected per chip type.
New display: WAVESHARE-ESP32-S3-TOUCH-AMOLED-2.16 added to the mipi_spi driver
(#16887 by @clydebarrow).
DLMS Smart Meter Component Overhaul
Section titled “DLMS Smart Meter Component Overhaul”@Tomer27cz refactored the dlms_meter component to use the external
dlms_parser library
(#15458), substantially broadening smart-meter support:
- Dynamic OBIS code schema - define custom sensors, text sensors, or binary sensors by their OBIS code
(e.g.
"1-0:99.99.9") instead of being limited to the hardcoded property list. - Binary sensor support is new.
- Decryption key now optional - meters that broadcast plaintext are supported directly.
- Flexible UART baud rate - the 2400-baud requirement is gone; configure the UART to whatever your meter speaks.
- New configuration variables -
auth_key,custom_patterns,skip_crc, andreceive_timeoutfor meters with non-standard behavior.
The legacy schema continues to work and the provider key is now ignored with a deprecation warning, slated
for removal in 2026.11.0. Existing configurations should still validate without change.
The companion DSMR component also got a fix and feature pass
(#16561 by @PolarGoose),
including support for EON Hungary meters, custom auth keys, and automatic hex-string detection in equipment
ID fields. Note that electricity_switch_position moved from sensor to text_sensor, which may need a YAML
update.
Networking, Zephyr, and Platform Plumbing
Section titled “Networking, Zephyr, and Platform Plumbing”Zephyr IPv6 networking on nRF52 (#16336 by
@Ardumine) is the first step toward OpenThread support on the nRF52840 via
Zephyr. Adds a Zephyr-specific IPAddress class backed by struct in6_addr, networking Kconfig, and three
new nRF52 network test fixtures. IPv6 defaults to enabled on nRF52.
RP2350 / RP2040 variant config (#16602 by
@jesserockz) brings the ESP32-style variant option to the rp2040
platform block, so the same platform can target the RP2040 or RP2350 and emits matching
USE_RP2040_VARIANT_<VARIANT> build flags. The variant is auto-derived from the board’s MCU; specifying both
must match.
esp32_hosted PSRAM transport buffers
(#16627 by @swoboda1337) -
new use_psram: true option moves the esp_hosted transport mempool out of DMA-capable internal RAM and into
PSRAM, fixing boot-time sdio_mempool_create asserts on memory-tight ESP32-P4 + LVGL UI configurations.
Configuration and Tooling Improvements
Section titled “Configuration and Tooling Improvements”YAML frontmatter (#16552 by
@jesserockz) - a leading ----separated YAML document is now treated as
opaque metadata, stripped before validation, and captured per-file on CORE.frontmatter. Future tooling
(including the device builder) can consume arbitrary user metadata like author, version, labels:
author: Jesse Hillsversion: 1.0.0labels: [office, climate]---esphome: name: my-nodeesphome.build_flags for IDF + PlatformIO
(#16629 by @swoboda1337) -
a top-level esphome.build_flags list now applies compiler flags on both backends. The existing
platformio_options.build_flags was PlatformIO-only; users on native IDF (ESP32-P4, ESP32-H2) needed this.
esphome config --no-defaults (#16718 by
@jesserockz) emits only the user-supplied configuration after substitutions
and packages resolve, without the hundreds of injected schema defaults. Useful for diffing configs, sharing
minimal reproductions in issues, and sanity-checking what was actually typed.
Codeberg short-form Git URLs (#16501 by
@Eelviny) - codeberg://owner/repo/path/file.yaml is now a supported source
for dashboard_import and short-form packages, alongside github:// and gitlab://.
github:// framework source (#16639 by
@swoboda1337) - esp32.framework.source now accepts
github://owner/repo@ref and https://github.com/owner/repo.git@ref, doing a git clone --depth=1 --recurse-submodules instead of downloading an archive. This is needed because GitHub archive URLs strip
submodules, which ESP-IDF relies on heavily (mbedtls, openthread, tinyusb, …). Primary use case is testing
against pre-release ESP-IDF before any tagged release ships a new chip.
Sensitive value redaction (#16690 by
@bdraco) is now driven by cv.sensitive() markers in the schema rather than a
post-dump regex. WiFi SSIDs are now marked sensitive, joining passwords. External components using the new
marker get redaction automatically; the regex fallback stays as a deprecation bridge through 2026.12.0.
State reporting CLI control (#16746 by
@clydebarrow) - the logs command gained a --states / --no-states flag
and an environment variable for the default, restoring control over whether state changes appear in the log
stream.
Light Component Enhancements
Section titled “Light Component Enhancements”@jesserockz added two light improvements:
light.effect.nextandlight.effect.previousactions (#16491) cycle through a light’s configured effects without having to hardcode effect names. Aninclude_none: trueoption lets the cycle pass through the un-effected state. The target light must have at least one effect, checked at config validation time.- Lambda light effects receive the light as
it(#16815) - matches the existing behavior of addressable lambda effects, so simple lambdas can reference the light directly withoutid(my_light).
@clydebarrow also added a rounded property to LVGL meter arcs
(#16669).
Other Notable Features
Section titled “Other Notable Features”- Display metadata for LVGL validation (#16702) -
display drivers now register
byte_order,rotation,draw_rounding,has_writer, andhas_hardware_rotationmetadata, so LVGL can pickbyte_orderautomatically, reject mixed byte orders, and mergedraw_roundingrequirements from the attached display. - Mitsubishi CN105 swing modes (#15653 by @crnjan) - vertical / horizontal / both swing for the Mitsubishi CN105 climate component, with last non-swing vane positions tracked and restored when swing is disabled.
- SDL display screen selection (#16363 by @clydebarrow) - the host-platform SDL display can now be centered on a specific display when multiple are attached.
homeassistant.timehonors explicit timezones (#16583 by @clydebarrow) - atimezone:configured locally is no longer silently overridden by Home Assistant’s zone.- I2C host platform support (#14489 by @jesserockz) - basic I2C bus support when running ESPHome on a Linux host platform, useful for testing and host-side integrations.
Notable Bug Fixes
Section titled “Notable Bug Fixes”- Nextion device info storage rewrite (#16059 by
@edwardtfn) - the
connect_infoparser was replaced with fixed-size field extraction, eliminating all heap allocations from thecomokresponse. Device info is now always logged indump_config(); the olddump_device_infoYAML option is gone.
Thank You, Contributors
Section titled “Thank You, Contributors”This release includes 178 pull requests from over 20 contributors. A huge thank you to everyone who made 2026.6.0 possible:
- @swoboda1337 - 57 PRs including the ESP-IDF 6 / native RISC-V clang-tidy infrastructure, the ESP8266 WPA2 default flip, removal of long-deprecated core APIs, and extensive ESP32 platform plumbing
- @kahrendt - 19 PRs including the audio stack modernization
(
RingBufferAudioSourcerollout, any-bit-depth mixer, resampler pass-through, newrouterspeaker) and the W5500 ethernet SPI offload - @clydebarrow - 16 PRs including the new
motionIMU hub with BMI270 and LSM6DS drivers, LVGL display-metadata validation, and the Home Assistant timezone fix - @jesserockz - 9 PRs including YAML frontmatter support,
light.effect.next/light.effect.previousactions, the RP2040/RP2350 variant option,esphome config --no-defaults, and 100% patch-coverage enforcement - @kbx81 - 4 PRs including the WiFi and ethernet lazy-init RAM reclamation work
- @p1ngb4ck - 2 PRs adding the FTDI FT23XX and Prolific PL2303 USB-serial drivers
- @PolarGoose - 2 PRs on DSMR including EON Hungary meter support
and the
dsmr_parserlibrary update - @tomaszduda23 - 2 PRs on the nRF52 native build and network IPv6 enforcement
- @rtyle - 2 PRs fixing QMP6988 sensor I2C error handling
- @Tomer27cz - the DLMS meter component overhaul using the external
dlms_parserlibrary - @Ardumine - Zephyr IPv6 networking support for nRF52
- @remcom - the new PCM5122 audio DAC component
- @RT530 - the new XDB401 pressure sensor component
- @crnjan - swing support for the Mitsubishi CN105 climate component
- @edwardtfn - the Nextion
connect_infoheap-allocation rewrite
Also thank you to @bdraco, @Rapsssito, @burundiocibu, @leodrivera, @SoCuul, @david-collett, @chemelli74, @Eelviny, @gnumpi, @GuzTech, @rwrozelle, @exciton, @i-am-no-magic, and @kpfleming for their contributions, and to everyone who reported issues, tested pre-releases, and helped in the community.
Breaking Changes
Section titled “Breaking Changes”Platform Changes
Section titled “Platform Changes”- WiFi (ESP8266): Default
min_auth_modeflipped fromWPAtoWPA2, matching the ESP32 default. The 2026.1 deprecation warning has been calling this out at every config validation. Devices on legacy WPA-only (TKIP) routers must pinmin_auth_mode: WPAexplicitly underwifi:#16682
Component Changes
Section titled “Component Changes”- DSMR:
electricity_switch_positionmoved fromsensor:totext_sensor:because Hungarian meters emit it as a string (e.g.ON) rather than a number. Update existing configs to declare the entity undertext_sensor:#16561 - DLMS Meter: Refactored to use the external
dlms_parserlibrary, adding dynamic OBIS-code schema, binary sensor support, optional decryption keys, and a configurable UART baud rate (the 2400-baud requirement is gone). The legacy hardcoded property schema continues to work; theprovider:option is now ignored with a deprecation warning and will be removed in 2026.11.0 #15458 - Nextion: The
dump_device_infoYAML option has been removed. Device info is now always stored and logged indump_config(). Removedump_device_info: truefrom anydisplay:Nextion configs #16059 - Home Assistant Time: When a
timezone:is explicitly configured on atime:component withplatform: homeassistant, the zone reported by Home Assistant no longer overrides it. Configurations that relied on HA silently overriding a stale local timezone should remove the localtimezone:entry #16583
Core Changes
Section titled “Core Changes”custom_components/folder removed: The deprecatedcustom_components/directory auto-loader has been removed. Useexternal_componentsinstead. The deprecation warning has been printing since 2025.6 #16679- Sensitive value redaction:
cv.sensitive()now drives runtime redaction directly via a YAML representer instead of a post-dump regex. WiFi SSIDs are now marked sensitive and will be redacted alongside passwords inesphome configoutput. No YAML change needed; pass--show-secretsto bypass redaction as before #16690
Undocumented API Changes
Section titled “Undocumented API Changes”Lambda users and external component authors who reference internal C++ types should note the following change. The type still behaves the same at runtime, but its name was updated to match the project’s identifier-naming convention:
-
MIPI DSI display class renamed:
mipi_dsi::MIPI_DSIis nowmipi_dsi::MipiDsi. Any lambda or external component that referenced the old type name must use the new spelling. No behavior change #16837// Beforeauto *display = static_cast<mipi_dsi::MIPI_DSI *>(...);// Afterauto *display = static_cast<mipi_dsi::MipiDsi *>(...);
Breaking Changes for Developers
Section titled “Breaking Changes for Developers”Component::mark_failed/status_set_errorconst char *overloads removed: use theconst LogString *overloads viaLOG_STR("...")#16680cv.only_with_esp_idfandCORE.using_esp_idfremoved: migrate tocv.only_on_esp32andCORE.is_esp32; useCORE.using_toolchain_esp_idffor the rare actual toolchain check #16681text_sensor::TextSensor::raw_statepublic member removed: useget_raw_state()instead #16683nfc::format_uid(span)/nfc::format_bytes(span)heap helpers removed: switch to the stack-buffer variantsnfc::format_uid_to(buf, span)/nfc::format_bytes_to(buf, span)withFORMAT_UID_BUFFER_SIZE/FORMAT_BYTES_BUFFER_SIZE#16684seq<>andgens<>tuple-unpack templates removed fromcore/automation.h: usestd::index_sequence/std::index_sequence_for#16685audio::scale_audio_samplesdeprecated: switch toesp_audio_libs::gain::applyfrom the bundledesp-audio-libs(Q31 scale factor, byte buffers, explicitbytes_per_sample). Scheduled for removal in 2026.12.0 #16831cv.sensitive()schema marker: external component schemas should now wrap sensitive fields withcv.sensitive(...)for redaction inesphome configoutput. The old regex-based fallback stays as a deprecation bridge through 2026.12.0 #16690
For detailed migration guides and API documentation, see the ESPHome Developers Documentation.
Release 2026.6.1 - June 19
Section titled “Release 2026.6.1 - June 19”- [core] Honor transferred address cache in has_resolvable_address esphome#17025 by @bdraco
- [build] Skip target-platform deps when populating host unit-test config esphome#17039 by @swoboda1337
- [uptime] Revert timestamp sensor device_class to timestamp esphome#17037 by @swoboda1337
- [esp32] Support
esphome idedatawith the native ESP-IDF toolchain esphome#17040 by @swoboda1337 - [esp32] Don’t overwrite PlatformIO’s factory.bin esphome#17042 by @swoboda1337
- [logger] Hold recursion guard while draining the task log buffer esphome#17044 by @bdraco
- Bump bundled esphome-device-builder to 1.0.10 esphome#17051 by @esphome[bot]
Release 2026.6.2 - June 20
Section titled “Release 2026.6.2 - June 20”- [espidf] Resolve IDF tools path to avoid unnormalized path warning esphome#17055 by @swoboda1337
- [fastled_base] Fix RMT5 intr_priority conflict esphome#17072 by @swoboda1337
- [packet_transport] Mark encryption key as cv.sensitive esphome#17066 by @swoboda1337
- Bump bundled esphome-device-builder to 1.0.11 esphome#17081 by @esphome[bot]
- [ha-addon] Expose the device-builder public port only when port 6052 is mapped esphome#17076 by @bdraco
- Bump bundled esphome-device-builder to 1.0.12 esphome#17091 by @esphome[bot]
Release 2026.6.3 - June 26
Section titled “Release 2026.6.3 - June 26”- [core] Clarify resolve error when a device has no network log/OTA transport esphome#17107 by @bdraco
- [audio] Fix mono channel MP3 playback esphome#17106 by @kahrendt
- [mipi_rgb] Fix offsets for Wave 5 1024x600 esphome#17057 by @clydebarrow
- [json] Bump ArduinoJson to 7.4.3 esphome#17126 by @bdraco
- Bump bundled esphome-device-builder to 1.0.13 esphome#17132 by @esphome[bot]
- Bump zeroconf from 0.149.16 to 0.150.0 esphome#17137 by @dependabot[bot]
- [espidf] Don’t fail framework check on broken unrelated PATH tools esphome#17053 by @swoboda1337
- Bump bundled esphome-device-builder to 1.0.14 esphome#17139 by @esphome[bot]
- [esp32_ble_server] Fix set_value action with by-reference triggers esphome#17156 by @swoboda1337
- [esp32] Use POSIX path for secure-boot signing/verification keys Fixes #17164 esphome#17166 by @mnewton25
- [mipi_spi] Warn on MODE3 default for display without CS pin esphome#17153 by @clydebarrow
- Bump bundled esphome-device-builder to 1.0.15 esphome#17170 by @esphome[bot]
- [mipi_spi] Suppress sequence errors when page selection used esphome#17176 by @clydebarrow
- [opentherm] Support power scaling disabled esphome#17183 by @GeoffreyFrogeye
- Bump bundled esphome-device-builder to 1.0.16 esphome#17182 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.17 esphome#17199 by @esphome[bot]
- [esp32] Accept ’#’ as ESP-IDF source ref separator esphome#17193 by @swoboda1337
- [network] Set IPv4 type tag on all lwIP platforms, not just esp32 esphome#17200 by @swoboda1337
- [wifi] Report STA IP, not SoftAP IP, in wifi_info on ESP8266 esphome#17185 by @swoboda1337
- [mipi][mipi_spi] Swap native dimensions for swap_xy hardware transform esphome#17201 by @clydebarrow
- [hbridge] Fix light stuck on one polarity esphome#17162 by @swoboda1337
- Bump bundled esphome-device-builder to 1.0.18 esphome#17212 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.19 esphome#17217 by @esphome[bot]
Release 2026.6.4 - July 1
Section titled “Release 2026.6.4 - July 1”- [adc] Only call cyw43_thread_enter/exit for VSYS when WiFi is active on RP2040 esphome#17203 by @jlunz
- [config_validation] Fix multicast typo in error message esphome#17206 by @jesserockz
- [es8388] Fix DAC unable to unmute once muted esphome#17221 by @frenck
- [mipi_spi] Bug fixes esphome#17247 by @clydebarrow
- [bluetooth_proxy] Fix -Wtype-limits warning with active: false esphome#17273 by @swoboda1337
- [espnow] Drop oversized received frames to prevent buffer overflow esphome#17271 by @swoboda1337
- Bump bundled esphome-device-builder to 1.0.23 esphome#17316 by @esphome[bot]
Release 2026.6.5 - July 9
Section titled “Release 2026.6.5 - July 9”- Bump bundled esphome-device-builder to 1.0.24 esphome#17332 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.25 esphome#17333 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.26 esphome#17369 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.27 esphome#17370 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.28 esphome#17382 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.0.29 esphome#17384 by @esphome[bot]
- Bump bundled esphome-device-builder to 1.1.0 esphome#17412 by @esphome[bot]
Full List of Changes
Section titled “Full List of Changes”For the complete list of every merged pull request in this release, see the full 2026.6.0 changelog.

Comments