Release Date: April 21, 2026
This RC12.9.1 hotfix follows the RC12.9 hierarchy cleanup with a Home Assistant integration hardening pass. Recent Home Assistant builds now flag blocking filesystem work inside the event loop more aggressively, and ESPHome Designer still had a few synchronous panel/frontend and hardware-template file paths that could trigger those warnings during startup or API requests. RC12.9.1 moves those paths onto executor-backed helpers, refreshes the shipped release metadata, and adds focused regression coverage for the repaired hardware-template endpoint.
- Async-Safe Panel Module Registration: Sidebar panel module URL resolution now loads the Vite manifest through Home Assistant's executor path during config-entry setup, avoiding blocking
read_text/opencalls on the event loop when the integration registers its custom panel. - Async-Safe Frontend Asset Serving: The panel HTML shell, static asset responses, and fallback font reads now perform their existence checks and file reads off the event loop, keeping Home Assistant's HTTP worker responsive while still serving the same cache-busted assets.
- Async-Safe Hardware Template Discovery: Built-in/custom hardware template scanning, hardware package reads, and uploaded-template directory creation now run through executor-backed helpers so template listing no longer triggers blocking
scandirwarnings in Home Assistant logs. - Regression Coverage Expansion: Added HTTP regression coverage for the authenticated hardware-template listing flow alongside the panel/static/package route checks, locking in the exact path that produced the Home Assistant warning.
- Release Metadata Refresh: Updated the package version, package lock metadata, Home Assistant manifest version, runtime version string, visible header label, and rebuilt frontend assets for the RC12.9.1 hotfix line.
Release Date: April 21, 2026
This RC12.9 follow-up closes the hierarchy regression reported in Issue #384. After the earlier persistence fix restored grouped-widget parentId data, users found that dragging groups in the hierarchy could still nest one group inside another by accident, and stale nested groups were then awkward to select or pull back out. RC12.9 keeps groups top-level during hierarchy drag/drop, lets older broken layouts recover cleanly, and makes the existing multi-select drag workflow easier to discover from the UI.
- Top-Level Group Reordering (Issue #384): Dragging groups in the hierarchy now reorders them without assigning a new
parentId, so groups no longer get nested accidentally when dropped on other groups or grouped children. - Stale Nested Group Recovery (Issue #384): Hierarchy traversal, hierarchy ordering sync, and canvas selection now treat groups as top-level containers even if older saved data still carries a stale
parentId, making those layouts recoverable instead of trapping the nested group under its parent. - Multi-Select Drag Discoverability: The hierarchy controls now include a selection tip for
Shift/Ctrlmulti-select and box selection, clarifying that multiple widgets can already be moved together by dragging any selected widget on the canvas. - Regression Coverage Expansion: Added focused frontend regressions for top-level-only group traversal, stale nested group recovery through the hierarchy, protected selection behavior for groups with stale
parentIddata, and the new grouping hint copy.
Release Date: April 20, 2026
This RC12.8 follow-up is a targeted hardening release for Issue #385. Real-world feedback on the first YAML round-trip implementation exposed a deeper exporter bug: custom widget state triggers for lights could be merged into LVGL brightness sensor blocks as a second on_value, producing invalid ESPHome YAML, and package-based outputs could still end up with repeated mergeable sections in certain regenerated layouts. RC12.8 fixes both paths and adds regression coverage around the exact slider-plus-icon failure pattern reported from the field.
- Mode-Aware Custom Trigger Routing (Issue #385): Widget-level custom triggers now keep their resolved
on_stateversuson_valuemode when queued for export, so binary-domain entities such aslight.*no longer get misrouted into numeric sensor sections just because the sameentity_idappears there. - Single-Block Trigger Merging (Issue #385): Sensor export now merges all matching trigger actions for one YAML item into a single trigger block, preventing duplicate
on_value:keys when a light-backed LVGL slider and a custom widget trigger both reference the same Home Assistant light. - Repeated Section Coalescing (Issue #385): YAML section merging now coalesces repeated
sensor:andtext_sensor:blocks that reappear later in package-based output, reducing the chance of regenerated package snippets carrying duplicate mergeable sections afterlvgl:. - Regression Coverage Expansion: Added focused frontend regressions for the light-slider/custom-trigger collision, mixed trigger-source single-item merging, and repeated mergeable-section coalescing in package-style YAML merges.
Release Date: April 19, 2026
This RC12.7 follow-up extends the earlier storage fix from Issue #382 with two more persistence-focused corrections: restoring grouped-widget parent references from Issue #384 and adding a supported LVGL custom state-trigger path for the YAML round-trip gap reported in Issue #385. The result is a safer save/load path for grouped layouts and a more honest, more durable workflow for custom LVGL automations.
- Sensor Text Secondary Entity Persistence (Issue #382): Sensor Text widgets continue to preserve
entity_id_2through backend save/load, so the secondary Home Assistant entity survives alongsideattribute2instead of dropping on reload. - Grouped Widget Parent Persistence (Issue #384): The backend widget model now stores and reloads
parentId, so children remain attached to their group containers after layouts are saved and loaded again. - Supported LVGL State Trigger Round-Trip (Issue #385): LVGL layouts now have a first-class widget-level state-trigger path that stores the trigger entity, trigger mode, and raw
then:action YAML in widgetprops, then injects those actions back into generatedsensor,text_sensor, orbinary_sensorsections during export. - Import Recovery & Honesty Warnings (Issue #385): YAML imports now recover the supported marked state-trigger blocks back into widget props when possible, and show a warning when unsupported custom automations remain raw YAML only instead of pretending they are fully editable on the canvas.
- Regression Coverage Expansion: Added backend model/storage regressions for grouped-widget parent persistence plus frontend tests that cover the new LVGL state-trigger editor controls, trigger registration/export injection, import recovery, and warning flow.
Release Date: April 17, 2026
This RC12.6 follow-up carries the next real-device correction for Issue #371. After the RC12.5 release restored raw brightness tracking and fixed the mixed-type lambda build failure, additional user testing showed that newer ESPHome/Home Assistant combinations behave more reliably when generated LVGL light sliders follow the current cookbook pattern for action dispatch. RC12.6 moves that behavior onto its own release line, refreshes the visible release metadata, and rebuilds the shipped frontend assets for a clean follow-up cut.
- Cookbook-Aligned Light Slider Actions (Issue #371): Light-backed LVGL sliders now export
homeassistant.actionwith rawbrightnessvalues and trigger the HA call onon_release, matching the current ESPHome LVGL light-brightness cookbook pattern and avoiding the silent no-op behavior reported with the olderhomeassistant.servicepath on newer Home Assistant installs. - Regression Coverage Expansion: Updated the LVGL slider regression tests to lock the
homeassistant.actionpayload shape, the raw integerbrightnesslambda output, and theon_releaseevent path for light-backed sliders without changing the existing non-light slider service flow. - Release Metadata Refresh: Updated the package version, package lock metadata, Home Assistant manifest version, visible header label, release notes heading/date, and rebuilt frontend assets for the RC12.6 release line.
Release Date: April 16, 2026
This RC12.5 follow-up is a narrow post-release correction for Issue #371. Real-device feedback after the RC12.4 release showed that some Home Assistant lights publish live state through the raw brightness attribute instead of brightness_pct, and that the generated light-slider lambdas could still fail ESPHome compilation because different branches returned mixed numeric types. RC12.5 fixes both issues, refreshes the visible release metadata, and rebuilds the shipped frontend assets for a clean follow-up cut.
- Home Assistant Light Attribute Compatibility (Issue #371): Light-backed LVGL sliders now subscribe to the HA
brightnessattribute for initial state and live updates, which matches the state model shown in Home Assistant Developer Tools for integrations that only expose raw0..255brightness values. - Compile-Safe Light Slider Lambdas (Issue #371): Generated light-slider
value,lvgl.slider.update, andlight.turn_onbrightness lambdas now keep a consistent float return type across every branch, eliminating the ESPHome C++inconsistent types 'float' and 'int' deduced for lambda return typebuild error seen on generated YAML. - Regression Coverage Expansion: Updated the LVGL slider regression tests to lock the raw
brightnessattribute path, the0..255scaling behavior, and the new compile-safe lambda output for both default and scaled slider ranges. - Release Metadata Refresh: Updated the npm package version, package lock metadata, Home Assistant manifest version, visible header label, release notes heading/date, and rebuilt frontend assets for the RC12.5 release line.
Release Date: April 15, 2026
This RC12.4 follow-up rolls in four concrete post-RC12.3 fixes: restoring OpenAI GPT-5 prompt generation after the token-parameter change reported in Issue #379, promoting the Guition 3.5" JC4832W535 board discussed in Issue #340 to a cleaner built-in package/profile path, finishing the Home Assistant light state-tracking follow-up from Issue #371, and taking one more small cleanup pass on the generated deep-sleep control flow from Issue #356. It also synchronizes the visible release metadata and rebuilds the shipped frontend assets for today's RC12.4 cut.
- OpenAI GPT-5 Request Compatibility (Issue #379): The OpenAI chat-completions path now sends
max_completion_tokensforgpt-5*models while preservingmax_tokensfor older models, so GPT-5 layout generation works again without regressing the existing GPT-4/OpenAI flow. - Guition JC4832W535 v3 Package Alignment (Issue #340): The bundled 3.5" Guition hardware package now targets the documented
JC4832W535QSPI display model, includes the linked AXS15231 touchscreen configuration, and captures the working calibration/transform/rotation values needed for the board's v3 pinout. - Stable Device ID with Legacy Alias: Added a supported built-in
guition_esp32_jc4832w535device profile for new layouts while keeping the older misnamed internal id as a hidden compatibility alias so previously saved layouts continue to resolve the same hardware package. - LVGL Light State Tracking Completion (Issue #371): Light-backed LVGL sliders now push explicit
lvgl.slider.updateactions from the Home Assistantbrightness_pctattribute, synced LVGL buttons/switches/checkboxes now update their checked state from HA withtrigger_on_initial_state: true, and scaled slider ranges such as0..255now map cleanly tobrightness_pctin both directions so the widgets track HA, each other, and boot-time state correctly. - Deep-Sleep Guard Consolidation (Issue #356): The generated
deep_sleep_cyclescript now performs the firmware-flash delay and stay-awake retry handling once at the top of the script before branching into the overnightuntil:or normal deep-sleep entry path, which keeps the RC12.3 behavior fix while removing duplicated guard blocks from the generated YAML. - Regression Coverage Expansion: Added focused tests for the GPT-5/OpenAI request payload branch and for surfacing the corrected Guition board id without exposing the legacy alias as a new supported device choice.
Release Date: April 12, 2026
This RC12.3 follow-up takes another pass at the remaining deep-sleep behavior from Issue #356. RC12.2 was too optimistic here: the overnight until: branch still dropped out when users chose Ultra Eco (Deep Sleep) and relied on the shared sleep-hours controls. This release fixes that mismatch, trims the misleading deep-sleep refresh bookkeeping in the generated script, and rebuilds the shipped assets for a clean RC12.3 cut.
- Deep-Sleep Overnight Window Fix (Issue #356): Generated
deep_sleep_cyclenow uses the configured shared sleep window in Deep Sleep mode as well as Light Sleep mode, so users who set overnight hours and exportUltra Eco (Deep Sleep)once again get thedeep_sleep.enteruntil:/time_id: ha_timebranch at night. - Deep-Sleep Script Cleanup (Issue #356):
manage_run_and_sleepno longer emits the unusedintervalandis_sleep_timebookkeeping in the epaper deep-sleep path, which makes the generated YAML match the real execution flow more closely. - Regression Coverage Expansion: Added focused generator tests for the Deep Sleep plus sleep-hours path and for omitting the unused refresh bookkeeping from the deep-sleep loop.
Release Date: April 11, 2026
This RC12.2 follow-up rolls the remaining Issue #356 polish into a fresh release cut, with a focus on making astronomy and weather widgets fail safely when Home Assistant data is missing or timezone-shifted, while keeping the RC12.x stability fixes and release metadata aligned for deployment.
- Local-Time Sunrise/Sunset Rendering (Issue #356):
sun_timeswidgets now convert Home Assistant ISO timestamps into local runtime time before formatting them, sosensor.sun_next_risingandsensor.sun_next_settingno longer show UTC hours as if they were already local. - Explicit Unknown Weather Fallbacks (Issue #356): Weather icon and forecast widgets now fall back to a visible unknown icon and
--text when no valid condition or value is available, instead of implying a realsunnyorcloudystate. - Unknown-State Moon Phase Fallback (Issue #356): Moon-phase widgets now show an unknown-state icon when the selected entity is missing, invalid, or not a moon-phase source, rather than rendering a misleading real lunar phase.
- Deep-Sleep Flow Revalidation (Issue #356): Rechecked the reported
is_sleep_time,interval, and long-sleep-until-end-hour concerns against the generator output and locked that behavior in with regression coverage; no additional generator change was required because the long-sleep branch was already present. - Regression Coverage Expansion: Added focused tests for astronomy widget local-time handling, weather unknown-state exports/rendering, moon-phase invalid-entity behavior, and the existing deep-sleep overnight branch so the RC12.2 fixes stay pinned.
- Release Metadata Refresh: Updated the package version, Home Assistant manifest version, visible header label, release notes heading, and rebuilt frontend assets for the RC12.2 release line.
Release Date: April 10, 2026
This RC12.1 follow-up tightens the LVGL light-control fix from Issue #371, adds generated diagnostics that make OTA rollback mismatches much easier to spot in reports like Issue #372, and folds in two additional YAML-generation fixes from Issue #376 and Issue #377.
- LVGL Light Slider/Button Separation (Issue #371): Light-backed LVGL sliders now refresh only from their generated
brightness_pctHome Assistant sensor instead of also listening to the light's binary on/off updates. This prevents a synced button toggle from forcing the slider back through stale0/1brightness values and resolves the button/slider feedback loop seen in the attachedkitchen-display-ui.yaml. - Generated Layout Signatures for OTA Debugging (Issue #372): Generated YAML now includes a stable layout signature and summary in the header, and the startup script logs the same signature once per boot. If a user's device log shows a different signature than the YAML they attached, it is now immediately obvious that the device is running an older image or has rolled back after OTA.
- Rollback Triage Hint in Boot Logs: The one-time startup diagnostics now include an explicit rollback hint so issue reports can distinguish "widget did not update" from "the new firmware never stayed booted."
- LVGL Sensor Text Refresh Hooks (Issue #377): LVGL-backed
sensor_textwidgets now register their generatedtext_sensorIDs foron_valuerefresh wiring, including weather/text attribute variants, so live labels update when Home Assistant pushes new text values. - Generated YAML Header Deduplication (Issue #376): Repeated snippet save/update cycles no longer prepend multiple copies of the generated ESPHome header when reconciling manual YAML overrides, so the raw YAML editor stays stable across round trips.
- Issue #356 Audit Confirmation: Rechecked the three items listed in Issue #356 against current generator code and regression tests; the scheduled page auto-switch guard, deep-sleep interval handling, and long-sleep-until-end-hour behavior are all already covered in RC12.1.
- Issue #356 Follow-Up Widget Fixes: Sunrise and sunset widgets now convert ISO datetime values into local device/browser time instead of showing the raw UTC hour, weather widgets now fall back to an explicit unknown icon or
--temperatures when no condition/value is available, and moon-phase widgets now show an unknown-state icon instead of implying a real lunar phase when the entity is missing or invalid. - Home Assistant Panel Console Noise Mitigation: The embedded panel shell now suppresses additional benign Home Assistant transition abort variants and wrapped host-error shapes, which reduces
Transition was skipped/invalid stateunhandled rejection noise in the browser console without masking real editor failures. - Regression Coverage: Added focused generator coverage for the new header/log diagnostics, updated the LVGL slider regression coverage so light refresh hooks stay bound to the brightness attribute sensor, and hardened the panel/runtime rejection-filter tests for Home Assistant transition-abort noise.
- Release Metadata Refresh: Updated the package metadata, Home Assistant manifest version, runtime GUI version label, release notes heading, and rebuilt frontend assets for the RC12.1 release line.
Release Date: April 7, 2026
This release is a focused RC12 follow-up that closes the remaining RC11 regressions reported after the RC11 rollout, especially around LVGL live updates and light-slider behavior, and synchronizes the shipped release metadata for the new build.
- LVGL Light Slider Fix (Issue #371):
light.*entities now use a dedicated Home Assistant brightness sensor for the slider value instead of mirroring binary on/off state, so toggling a light no longer forces the slider back through1%, and moving the slider now behaves like a native dimmer by turning the light off at0and callinglight.turn_onwithbrightness_pctotherwise. - LVGL Date & Time Refresh Fix (Issue #372): Date & Time widgets in LVGL mode now emit an explicit timed refresh loop so their
ha_time-backed labels update on real devices instead of staying frozen after the initial render. Styled datetime widgets now refresh the actual child label that owns the live lambda instead of the wrapper container. - LVGL On-Board Sensor Bar Refresh Fix (Issue #372): The LVGL sensor bar now refreshes its live child labels and battery icon/text directly, covers local on-device values as well as Home Assistant-backed sensors, and uses the configured Wi-Fi source consistently in LVGL output instead of always hard-wiring
wifi_signal_dbm. - Interval Section Merge Safety: Widget-owned
interval:exports now merge cleanly when multiple features contribute timed updates, preventing duplicate top-level interval sections in generated YAML. - Regression Coverage for Issues #371 and #372: Added focused Vitest coverage for the LVGL light slider path, datetime refresh wiring, sensor-bar child refresh targets, and interval-section coexistence so the RC12 fixes stay locked in.
- Release Metadata Refresh: Updated the package metadata, Home Assistant manifest version, runtime GUI version string, visible header label, and release notes heading for the RC12 release.
Release Date: April 6, 2026
This release continues the shape-model cleanup so fills, borders, and lines behave more consistently across the editor and generated output, adds the new astronomy and energy widgets discussed in GitHub Issue #367, Issue #368, and #219 (reply in thread) and rolls in the supporting stability and verification work for the RC11 line.
- Canonical Shape Color Model: Rectangle, circle, and rounded rectangle widgets now use explicit
bg_colorandborder_coloras their primary shape colors, while legacycolorvalues are still accepted as compatibility fallbacks for existing layouts and imports. - Unified Shape Controls: Rectangle, circle, and rounded rectangle widgets now share the same visible shape-editing model:
Fill,Fill Color,Border Thickness, andBorder Color, plus shape-specific geometry such asCorner Radius. - Smarter Shape Border Defaults: When a fillable shape is filled and the border color has not been explicitly chosen, the border now defaults to the same color as the fill until the user overrides it.
- Unified Default Border & Line Widths: Rectangle, circle, rounded rectangle, and line widgets now default to a consistent visible border or stroke weight in new layouts, while legacy imports continue to normalize toward the shared shape model.
- Astronomy Widget Category: Added a dedicated
Astronomysection in the widget palette for the newmoon_phaseandsun_timeswidgets, while keeping the existing weather icon in its current core location. - Moon Phase Widget (Issue #367): Added a dedicated
moon_phasewidget with Home Assistant moon-state icon mapping across editor preview, direct ESPHome export, LVGL export, OEPL export, and OpenDisplay export. - Sun Times Widget (Issue #368): Added a dedicated
sun_timeswidget with independentShow SunriseandShow Sunsettoggles, native Home Assistant defaults forsensor.sun_next_rising/sensor.sun_next_setting, and support forsun.sunattributes likenext_risingandnext_setting. - Energy Flow Widget: Added a new
energy_widget/Energy Flowwidget fordirectandlvglprojects with a fixed solar, home, grid, battery, and optional gas topology, sign-aware import/export and charge/discharge arrows, and visible bordered node boxes for the core energy slots. - Advanced Solar Breakdown: The new energy widget supports optional helper entities for
Solar -> Home,Solar -> Grid,Solar -> Battery, andAutoconsumption %, while still deriving safe fallbacks for grid export and self-consumption when only the base net sensors are available.
- Home Assistant Local Image Preview Fix (Issue #366): Fixed an HA-specific regression where local image previews could trigger authentication failures after the backend hardening pass. Image previews now load through the authenticated request path again, while common public image locations such as
/local/...and/config/www/...continue to work without reopening arbitrary/configfile reads. - ESPHome Image Transparency & LVGL Background YAML Fix (Issue #369): Color image components now emit ESPHome's current
transparencyoption instead of the deprecateduse_transparencyflag, honoring the widget's configured transparency mode, and transparent LVGL template bars no longer generate invalidbg_color: transpoutput. - M5Paper GT911 ESPHome Compatibility Fix (Issue #370): The M5Paper preset no longer exports
GPIO36as a GT911interrupt_pinon classic ESP32 builds where that pin is input-only and rejected by current ESPHome releases. Affected exports now fall back to polling withupdate_interval: 50ms, restoring successful YAML compilation on ESPHome 2026.3.2 and newer. - Scheduled Page Switching & Calendar Width Fixes (Issue #356): Scheduled page visibility changes no longer self-trigger the page-switch debounce before
change_page_toruns, restoring automatic switching between time-windowed pages, and calendar event summaries now expand their on-device text width with wider calendar widgets instead of staying hard-capped at 25 characters. - Drop Shadow Fill & Group Border Editing Cleanup: Adding a drop shadow now preserves existing opaque fills, forces transparent widget infills to white so the shadow remains visible, and grouped shadow selections can edit shared border width, border color, and corner settings without pushing those properties onto the invisible group wrapper.
- Backward-Compatible Imports: YAML, C++ drawing, and OEPL parser paths continue to accept older shape definitions while normalizing imported shapes toward the new
bg_color/border_colormodel. - Regression Coverage for Shape Cleanup: Updated focused tests and snapshots for the shared fillable-shape helpers, shape widgets, line defaults, parser round-trips, and widget-manager shadow behavior.
- Regression Coverage for Issue #356: Added focused generator and calendar export tests so scheduled visibility auto-switching and width-scaled calendar summaries stay locked in.
- Regression Coverage for Issue #369: Added focused test coverage for modern image component export plus transparent LVGL template-bar export so the invalid YAML patterns stay fixed.
- Regression Coverage for Issue #370: Added targeted touchscreen generator coverage so classic ESP32 GT911 profiles with input-only pins keep using the polling fallback instead of emitting invalid output-mode interrupt pins.
- Astronomy Widget Coverage: Added targeted tests for the new moon phase and sun times widgets so preview behavior and export wiring stay locked in.
- Energy Widget Coverage & Round-Trip Support: Added direct-export, LVGL-export, preview, parser, and round-trip coverage for the new energy widget so its helper entities and derived flow labels stay stable across YAML import/export and frontend builds.
- Release Metadata Refresh: Updated the package metadata, Home Assistant manifest version, runtime GUI version string, and visible header label for the RC11 release.
Release Date: April 2, 2026
This release is a focused RC10.1 follow-up for the work completed in this session. It fixes a direct-render conditional visibility regression where binary Home Assistant entities such as input_boolean could generate invalid std::string(...) comparisons and fail ESPHome compilation, and it synchronizes the shipped version metadata and frontend bundle for the RC10.1 package.
- Conditional Visibility Compilation Fix (Issue #363): Direct-render widget visibility checks now treat binary Home Assistant domains such as
input_booleanas boolean IDs instead of forcing them through string conversion, while text-style entities likeinput_selectstill use the generated_txtsensors for string comparison. - Regression Coverage: Added targeted Vitest coverage for the visibility-condition binary/text branching so the broken
std::string(id(input_boolean...).state)pattern does not return. - Release Metadata Sync: Updated the package version, Home Assistant manifest version, GUI header label, runtime GUI version string, release notes heading, and committed frontend
distbundle so the shipped RC10.1 package stays internally consistent.
Release Date: March 31, 2026
This release rolls the project forward to the RC10 line, includes the remaining persistence and deep-sleep fixes that were still open from GitHub Issue #356, keeps the raw YAML editor override persistent across save/load, and refreshes the shipped release metadata so package/release automation stays aligned.
- Persistent Manual YAML Override: YAML edits made directly in the snippet editor now persist with the saved layout as a separate raw override instead of being silently lost on save/load.
- Page Metadata Persistence: Per-page schedule and visibility metadata such as
refresh_type,refresh_time,visible_from,visible_to, andlayoutnow survive backend storage round-trips correctly. - Deep Sleep Script Cleanup: The generated deep-sleep flow now uses a single stay-awake guard around
deep_sleep.enter, avoiding redundant logic while keeping retry behavior intact. - Persistent 12-Hour Datetime Mode (Discussion #359): The datetime widget now exposes a dedicated
Clock Modesetting with24 Hourand12 Hour (AM/PM)options. Preview rendering plus OpenDisplay, OEPL, and LVGL exports all honor that saved setting, so users no longer need to manually reapply%I:%M %pafter each edit or export. - Graph Duration Presets: Graph widgets now include a
Duration Presetselector with common ranges like minutes, hours, days, and weeks, while still keeping the free-form duration field available for custom lookback windows. - Week-Aware Graph History Parsing: Shared graph duration parsing now supports week-based and decimal durations across canvas preview, direct export, LVGL export hooks, history helper generation, Home Assistant history fetching, grid inference, and smart axis labels. This means values like
1wand2wwork consistently without requiring users to translate everything into raw hours. - Optional HA State Sync for LVGL Buttons (Discussion #347):
lvgl_buttonnow has an explicitSync Checked State from HAoption for mirrorable binary entities such asswitch,light,fan, andinput_boolean. When enabled, the button becomes checkable, binds its checked state to the Home Assistant entity, and refreshes automatically when HA state changes, while the existing click action behavior remains intact. - Compilation Regression Coverage: The RC8.3
is_sleep_timescoping problem reported in Issue #339 remains covered by a dedicated generator regression so the brokenreturn !is_sleep_time;pattern does not reappear in generated output. - Localized Weather Forecast Day Labels: The weather forecast widget now exposes an explicit day-language selector so editor previews and generated firmware/LVGL output stay aligned instead of mixing localized preview labels with English device labels, covering the reports in Issue #231 and Issue #348.
- Graph History Helper Package: Advanced graph history mode now includes built-in
Copy HA YAMLandDownload YAMLactions that generate a starter Home Assistant helper package backed bysql.query. This makes the previously undocumented template/helper setup far easier to adopt for recorder-backed history graphs. - Graph & Sensor Bar Typography Completion (Issue #361): The
graphandtemplate_sensor_barwidgets now exposefont_family,font_weight, andfont_sizeconsistently, and those settings are honored across browser preview, direct ESPHome export, and LVGL export. - Single-Page Navigation YAML Fix (Issue #362): Single-page projects no longer emit
change_page_toscripts or dangling debounce references tolast_page_switch_time, and LVGL nav bars now suppress prev/next actions when paging is unavailable. - Issue #356 Follow-Up Fixes: Direct-render
shape_rectwidgets now scope their rounded-corner helper lambdas per widget so repeated rounded rectangles no longer collide at compile time, the datetime canvas preview now matches device behavior by leaving narrow text visible instead of clipping it, generated startup scripts now include a one-time 5-second post-sync grace period before the first render so Home Assistant-backed sensors have time to populate, and touch-debounce globals are only emitted for layouts that actually use touch widgets.
- Export Shape Stability: The new LVGL button sync path only adds
checkableandstateoutput when the feature is enabled, so existing button exports stay unchanged by default. - CI Lint Hardening: Nested workspace
tmpdirectories are now ignored consistently by ESLint, preventing generated preview/build artifacts from showing up as false-positive source lint failures during release and pre-push validation.
Release Date: March 29, 2026
This follow-up release finishes the RC9 packaging and deployment work so Home Assistant, GitHub Releases, and the GitHub Pages editor all point at the same current build.
- Removed stale debug-overlay test residue from the sidebar suite and kept coverage aligned with the quality gate.
- Rebuilt the committed frontend bundle so the packaged Home Assistant panel assets and GitHub Pages deployment stay on the same RC9.1 output.
Release Date: March 28, 2026
The main goals of this version are simple: make the editor behave more reliably inside Home Assistant, make saved layouts and custom hardware profiles load correctly, harden the backend surface, and continue the broader cleanup of the codebase.
- Universal MQTT Integration (Issue #352): You can now use
mqtt:your/topic/pathdirectly in the main Entity field instead of managing a separate MQTT-only input. This makes MQTT widgets easier to set up, easier to understand, and more consistent across the editor. - Edit Custom Hardware Profiles (Issue #353): Imported custom hardware profiles can now be loaded back into the Custom Hardware form, edited, and saved again without starting from scratch.
- Home Assistant Embedded Editor Reliability: The editor now behaves much more reliably when opened inside Home Assistant. Layouts, entities, saved designs, and hardware templates load more consistently, and the panel boot flow was cleaned up after several HA-specific auth and routing failures.
- Custom Hardware Profile Loading: Layouts that reference saved custom hardware profiles now load correctly in Home Assistant. Custom hardware YAML packages are fetched through an authenticated backend route instead of relying on fragile direct static file access.
- Graph History Preview Reliability: Graph previews in the editor now use Home Assistant's native history API in embedded mode. This makes layouts with history widgets much less likely to fail because of a custom proxy path.
- LCD Navigation Debounce Follow-Up (Issue #349): Navigation timing was aligned more carefully for touch LCD devices, reducing bounce-back and accidental double-navigation on slower panels such as the Waveshare 7" ESP32-S3.
- Deep Sleep Stay-Awake YAML Fix (Issue #354): Fixed a YAML generation issue that could produce invalid ESPHome output when Deep Sleep and Stay Awake were enabled together on e-paper devices.
- Missing
change_page_toScript (Issue #351): Fixed a compilation problem where some single-page designs could still reference the page-change script even though that script was only being generated for multi-page layouts. - Image Plugin Crash: Fixed an LVGL image handling problem that could break designs using custom images.
- Hardware Touch Debounce: Improved touch debounce handling across interactive widgets to reduce accidental double taps.
- Log Spam on Display Restart: Reduced repeated "Waiting for sync..." logging when a display was restarting but already had an active connection.
- Battery Sensor Reliability: Improved battery widget handling for imported hardware and Home Assistant battery entities.
- Image Rendering Optimization: Color image exports now use a faster rendering path that is more stable on high-resolution RGB displays.
- Canvas Opacity Preview: Opacity changes now update correctly on the live design canvas again.
- Icon Theme-Aware Background Export (Issue #357): Direct-render icon widgets now keep
bg_color: theme_autoand related dynamic color combinations readable on inverted e-paper displays instead of exporting the glyph and filled background with the same effective color. - Roboto 600 Weight Support (Issue #358): Roboto now accepts and preserves weight
600across the weight picker, direct export font registry, and browser preview imports. - Calendar Helper Script Improvements (Issue #355): The shipped Home Assistant helper now respects the widget's
Max Eventsvalue, avoids mutating original calendar events, treats carry-over multi-day events as all-day on the current date, strips unused location parsing, and prefixes summaries when multiple calendars are merged so the event list stays understandable on-device.
Many thanks to Richhoef for the practical helper-script improvements and clear issue write-up in Issue #355!
- Narrowed Follow-Up from Issue #356: The original bundle has been split down to the remaining real gap: direct-render
datetimeand similar narrow text layouts can still diverge from the canvas preview because on-device output uses fixedstrftime(...)lines rather than width-aware wrapping. The visibility/device-setting round-trip and hourly weather population portions are already covered by the RC8.x fixes.
- Authenticated Designer API: The
/api/esphome_designer/*backend surface is treated as authenticated again, while the minimum panel shell assets stay accessible so Home Assistant can still boot the panel cleanly. - Image Proxy Restrictions: The image proxy was tightened so it only serves approved image locations instead of broad file paths under the Home Assistant config area.
- RSS Proxy Safeguards: The RSS proxy now blocks private and internal targets to reduce SSRF risk.
- Authenticated Hardware Package Serving: Custom hardware package loading now goes through a dedicated authenticated backend endpoint.
- Zero
@ts-nocheckSuppressions: All remaining@ts-nochecksuppressions were removed from the source tree, so the JavaScript codebase is now type-checked instead of bypassing errors. - Strict TypeScript Mode: Strict TypeScript coverage was expanded for key core modules to catch integration and data-flow problems earlier.
- Plugin Monolith Splits: Several oversized plugin files were split into smaller focused modules so rendering, exports, and property handling are easier to maintain.
- Targeted Regression Coverage: Added focused regression tests for theme-aware icon background export, Roboto
600font preservation, and the updated calendar helper/export wiring so the RC9 fixes stay locked in. - Expanded Test Coverage: This branch currently verifies cleanly with
216frontend test files /1379tests,46Python tests, and a passing production build. - Better Request-Level Coverage: Backend and panel request paths now have stronger regression coverage, especially around auth boundaries, panel loading, and Home Assistant-specific flows.
- CI Guardrails & Repository Hygiene: Quality checks were tightened further and transient generated clutter was removed so the repository stays cleaner over time.
Release Date: March 21, 2026
- Dynamic Colors for Sensor Text (Issue #203): Sensor Text widgets now support dynamic color interpolation. By defining a value range (Min/Max) and a color range (Low/High), the widget will smoothly interpolate the text color based on the sensor's current value (e.g., transitioning from blue to red as temperature rises).
- This feature is exclusively available on color displays (LCD/OLED and multi-color e-paper).
- The designer canvas provides a live, real-time preview of the calculated color.
- Generates highly optimized C++
Color()and LVGLlv_color_make()lambda functions for fluid on-device rendering.
- Filename-Based Color Modes (Issue #338): Custom imported hardware templates (YAML) can now explicitly declare their color capabilities via the filename. Naming a hardware recipe with a
*bwr.yaml,*fullcolor.yaml, or*primarycolor.yamlsuffix will automatically unlock the corresponding color palette in the designer (e.g.,myboard_fullcolor.yaml). Huge thanks to newhinton for contributing this elegant solution!
- LCD Performance & Crashes (Issue #349): Fixed a critical race condition that caused
IllegalInstructioncrashes and severe UI lag on the Waveshare 7" ESP32-S3 and other high-resolution LCDs. The script now intelligently detects LCD hardware and suppresses redundant display updates, relying purely on the hardware's nativeupdate_interval. - Navigation Debounce: Increased touchscreen debounce timing from 500ms to 2000ms for LCD displays. This prevents double-taps and accidental page reverting caused by the longer ~2-second render cycle typical of 800x480 RGB panels.
- Battery Sensor Reporting: The
battery_iconwidget now detects when a selected hardware profile lacks the necessary battery ADC pins (e.g., Waveshare 7"). Instead of silently reporting 0%, it outputs a helpful C++ warning comment in the YAML and displays abattery-alertfallback icon. - LilyGo T-Display-S3 Compilation Fix (Issue #350): Fixed a compilation error ("couldn't find remote ref i8080") caused by an obsolete external component reference in the hardware template. The
i80,ili9xxx, and related components are now native in ESPHome core. - TRMNL Battery Pin Fix (Issue #291): Corrected the battery ADC pin for the official TRMNL (ESP32-C3) from
GPIO0toGPIO3.
Release Date: March 20, 2026
- WiFi QR Code Helper (Issue #183): The QR Code widget now features a dedicated "WiFi Credentials" mode. Enter your SSID, Password, and Security Type, and the designer will automatically generate a standard WiFi QR code format (
WIFI:S:...) that can be scanned by any smartphone to easily share your network. - LVGL Button Service Selection (Issue #345): Added a "Service Override" field to LVGL Buttons. Users can now explicitly choose services like
cover.open_cover,cover.close_cover, orbutton.pressinstead of being limited to automatic toggling. - MQTT Data Source Support (Issue #332): Implemented per-widget MQTT topic overrides. Widgets can now subscribe directly to MQTT topics (using
mqtt_subscribe) instead of relying solely on Home Assistant entities. - LVGL Export Optimization (Issue #341): Significantly reduced YAML verbosity by automatically stripping default property values (colors, opacities, hidden states) from the export.
- LVGL Grid Mode Fix (Issue #343): Fixed a bug where grid-positioned widgets incorrectly exported absolute coordinates instead of row/column indices.
- Multi-Item RSS Widget (Issue #133): The Quote/RSS widget now supports displaying up to 10 items from a feed with customizable separators and individual word-wrap settings.
- Auto-Detect for Covers: Blinds and covers are now automatically recognized, defaulting to
cover.togglewhen no override is specified. - Sunton CYD 2.8" Display Fix (Issue #344): Corrected an error in the hardware templates where the 2.8" Sunton CYD was using the incorrect
TFT 2.4Rmodel. It now correctly usesILI9341with framework-awareinvert_colorssettings (True for Arduino, False for ESP-IDF), resolving "white block" artifacts and incorrect display offsets.
- Test Reliability: Fixed a flaky unit test in
device_settings.test.jsrelated tolocalStoragetiming. - Improved Testing: Added dedicated integration tests for LVGL button service logic.
- LVGL Action Stripping (Issue #342): Resolved compilation errors in non-LVGL projects by implementing a robust stripping mechanism for
lvgl.*actions in hardware templates. Extended conditional guards to the Antiburn switch and touchscreen wake-up logic to ensure clean YAML generation when LVGL is disabled.
Release Date: March 14, 2026
- Visibility Persistence (Issue #337): Fixed several critical issues where visibility windows and device settings were not correctly saved or restored during YAML round-trips.
- Deep Sleep Orchestration: Major refactor of the deep sleep logic to ensure reliable operation on boot and stable state preservation.
- Boot Logic: Fixed a regression where
manage_run_and_sleepwas skipped on boot for non-deep-sleep devices (Bug #7). - State Preservation: Prevented
is_new_flashfrom being reset during page transitions (Bug #8). - Night-time Sleep: The
is_sleep_timecalculation is now actively used to gate display updates and enter deep sleep correctly (Bug #9).
- Boot Logic: Fixed a regression where
- Generator Integrity: Resolved structure corruption in
yaml_generator.jscaused by duplicate method blocks from earlier incremental edits.
Special thanks to newhinton for flagging the visibility problems and providing detailed feedback in Issue #337!
Release Date: March 13, 2026
- Granular Font Weights (Issue #337): Implemented exhaustive font weight controls for all text elements within the Calendar and Datetime widgets.
- Calendar: Added independent weight selectors for Header Date, Header Day, Month, Grid Headers, Grid Dates, and Events.
- Datetime: Replaced simple "Bold" toggles with precise numeric weight dropdowns for Time and Date elements separately.
- Consistency: Aligned all textual widgets with the standard numeric weight system (100-900) used in the Text widget.
- Improved Preview Parity: The designer canvas now accurately renders all individual font weights, ensuring your dashboard looks exactly as intended during the design phase.
- Reference Error Fix: Resolved a critical YAML generation error where the "Grid Font ID" was incorrectly referenced during export.
Many thanks to Richhoef for the suggestions and detailed feedback in Issue #337!
Release Date: March 11, 2026
- Updated the release version to
1.0.0-rc.8.1so HACS and release metadata can point to a distinct prerelease instead of reusing the originalrc8artifact. - Fixed GitHub workflow drift by aligning the root release and Pages workflows with the current root-level Node project layout.
- Restored
lvgl_chartto a chart-shaped LVGL export contract and updated the focused chart export test to match that behavior. - Removed transient frontend artifact files and cleaned up stale nested
.githubworkflow duplicates undercustom_components/esphome_designer. - Synced the touch-area export behavior, smoke snapshot contract, and schema baseline so the quality gate and CI no longer drift from the validated local state.
Release Date: February 21, 2026
- Core Frontend Refactor: Migrated key state, import/export, and registry paths from legacy
.jsmodules to typed.tsmodules, reducing ambiguity in the RC8 code path and making future maintenance safer. - Import/Export Pipeline Split: Broke ESPHome generation and YAML parsing into dedicated generators and parser modules, improving round-trip reliability and making hardware/package overrides easier to reason about.
js-yamlModernization: Replaced the legacy bundled global script with the maintained NPMjs-yamldependency and ES module imports.- Plugin Contract Hardening: Audited and corrected
schema/defaultsalignment across the full plugin set so fallback values remain predictable during editing, export, and re-import. - Current Verification Status: The RC8 branch currently passes the automated frontend suite (
62test files /716tests) and produces a successful production build.
- Hourly Forecast Mode: The
weather_forecastwidget can now switch between daily and hourly rendering. - Custom Hour Slots: Configure exact forecast hours such as
06,09,12,15to match your Home Assistant forecast source. - Start Offset Control: Skip the first N hourly or daily entries with the new
start_offsetproperty. - Hourly
templowGuard: Hourly mode now suppressestemplowhandling automatically, avoiding invalid low-temperature lookups in Home Assistant hourly forecast data. - Direct + LVGL Parity: Hour labels, icon selection, and refresh wiring now scale correctly across both direct rendering and LVGL export paths.
- Graph History Guidance: Added explicit property hints to the
graphwidget clarifying that native graphs collect data starting from device boot. Documentation for the "HA History" mode was also improved to clearly state it requires a custom HA template sensor for pre-existing data. - LVGL Refresh Warning (Issue #255): Fixed an ESPHome 2024.12+ compiler warning ("Widget does not have any dynamic properties to refresh"). The
wifi_signal,weather_forecast,weather_icon,ondevice_temperature, andondevice_humidityplugins were incorrectly registering their static parent wrapper object for UI refreshes instead of the dynamic child labels. The generator now correctly targets the inner child text widgets. - YAML Indentation Corruption (Issue #319): Fixed a bug where the hardware generator would output "mapping values are not allowed here" when merging touch panel configurations. The regex responsible for swapping
transform:properties based on rotation was too greedy and incorrectly swallowed trailingon_release:event blocks. - Vitest Teardown Fix: Resolved a silent crash during asynchronous Vitest worker teardown by implementing an intelligent fallback target for the global State Proxy.
- Mock Registry Repair: Restored broken unit tests in
esphome_adapter.snapshot.test.jsby transitioning to correctly decoupled utility functions. - LVGL Line Fix: Added missing
pointsproperty to thelvgl_lineplugin's default configuration, resolving a validation failure in the plugin contract tests.
Release Date: February 19, 2026
- Extended Domain Support: Added automatic fetching and autocomplete support for
calendar.*,person.*,device_tracker.*,sun.*,update.*, andscene.*entities. - Native Calendar Support: The
calendarwidget now supports standard HAcalendar.*entities, displaying current event summaries directly from entity attributes.
- Deep Attribute Paths: Added support for dot and bracket notation (e.g.,
entries.days.0.day) in bothsensor_textandweather_iconwidgets to navigate nested JSON structures. - Improved Object Preview: Attributes containing complex objects or arrays (like forecasts or calendar entries) are now beautifully stringified as JSON in the canvas preview instead of showing
[object Object]. - Smart ID Generation: Standardized
makeSafeIdacross all export paths to ensure valid ESPHome IDs even when using long nested attribute paths. - Automatic Text Sensor Registration: Entities from text-heavy domains (
person,calendar,sun, etc.) are now automatically registered astext_sensorin ESPHome, ensuring correct%sformatting.
- Pixel-Perfect Text Preview: Added
overflow: hiddento bothsensor_textand standardtextwidgets, ensuring the canvas preview accurately reflects how text is clipped on physical hardware. - Smart Widget Auto-Resize: The
sensor_textwidget now automatically expands its width to fit long labels and values when real Home Assistant data is connected, preventing accidental clipping during design. - Secondary Attribute Field: Added a "Secondary Attribute" field to the
sensor_textwidget properties. - Exposed Weather Attributes: Fixed the
weather_iconproperty panel to expose the "Attribute" field. - Improved Guidance: Added explicit hints in the properties panel explaining how to use nested attribute paths.
- Improved Power Management UI: The PSRAM checkbox is now automatically disabled and unchecked when a chip that doesn't support it (like ESP32-C3) is selected.
- Time-based Page Visibility: Added "Visibility Window" (Start/End) inputs to Page Settings. The generated YAML now includes intelligent C++ orchestration to find the "best" page for the current time, with support for fallback pages and automatic switching between schedules.
- Graph History Clarification: Added helpful hints in the properties panel explaining that native graphs collect data from boot.
- Advanced HA History Warning: Renamed and documented the "HA History Attribute" feature with an explicit warning that it requires a custom HA template sensor to function.
- Vertical Orientation: Added support for vertical progress bars. The widget now intelligently adapts its layout and labels when switched to vertical mode.
- Custom Value Ranges: Added "Min Value" and "Max Value" properties. This allows the progress bar to accurately represent data from sensors with any range (e.g., 0-3000 Lux, -20 to 50°C), rather than being hardcoded to 0-100%.
- Text Customization: Added controls for Font Size and Text Alignment (Left, Center, Right) for title and percentage labels.
- Smart Layout: Automatically positions labels at the top/bottom in vertical mode to maximize bar visibility.
- Multi-Platform Support: Enhancements fully implemented for Direct Display, LVGL, OEPL, and OpenDisplay export paths.
- Seeed Xiao ESP32C3 - 7.5" E-Paper: Added a new (untested) profile for the SeeedStudio Xiao with a 7.5-inch e-ink screen, including correct pin mappings for SPI and the display.
- Shared Utility: Moved
getNestedValueto a shared location to deduplicate code across plugins. - Export Consistency: Fixed a bug where secondary attributes were not correctly included in the generated ESPHome IDs for text sensors.
- Adapter Cleanup: Removed legacy debugging comments from the ESPHome adapter.
- Sensor Bar Registration: Fixed a bug where custom Home Assistant entities for Temperature, Humidity, and Battery in the Sensor Bar widget were not being registered in the ESPHome YAML, causing them to display as "--".
- Robust Guarding: Added sensor-type specific checks (e.g.,
temp_is_local) to prevent spurious Home Assistant sensor registration when hardware sensors are selected. - PSRAM Generation Fix: Added a chip-level guard to prevent generating the
psram:YAML section for chips that do not support it (ESP32-C3, ESP32-C6, ESP8266), resolving boot loop issues on these devices. - Daily Refresh Fix: Fixed a bug in the interval calculation for daily scheduled wake-ups. The system now correctly handles next-day rollovers and calculates the precise number of seconds until the target time.
- Round-Trip Meta Consistency: Added
page:visible_fromandpage:visible_tomarkers to ensure visibility settings are preserved during YAML export and re-import.
Release Date: February 18, 2026
Added standardized Border Style controls (Width, Color, Radius, Drop Shadow) to:
- Weather Forecast, Calendar, Date & Time (
datetime), Weather Icon, Quote / RSS Feed
- Auto-Sync Radius: Shadows now inherit the parent widget's corner radius.
- Multi-Select: Create shadows for multiple widgets at once.
- Auto-Grouping: Shadows are now automatically grouped with their parent widget.
- Added full support for Borders, Rounded Backgrounds, and Drop Shadows.
- Waveshare 4.3" (#304): Added missing
display_backlightswitch (CH422G).
- Sensor Attributes:
text_sensorandweather_iconnow support HA attributes. - LVGL Auto Color: Automatic color handling for all LVGL widgets.
- LVGL Dark Mode: Fixed invalid YAML generation for LVGL widgets.
- Selection Mode: Removed the selection-based YAML filtering in the snippet box. Full layout is now always visible.
Release Date: February 16, 2026
- Fixed Invisible Traces: Resolved an issue where graph lines were invisible (white-on-white) on e-paper displays, particularly when using
theme_autoor specific color combinations. - Improved Color Support: The "Line Color" setting now correctly supports all named colors (e.g.,
gray,yellow,orange,purple) and hexadecimal values. Previously, many colors silently defaulted to black. - Enhanced Dark Mode Contrast:
theme_autonow intelligently adapts to the per-page Dark Mode setting, ensuring traces are always visible against the background.
- Token Security: The "Long-Lived Access Token" input field is now hidden when the editor is deployed as a Home Assistant Add-on. This prevents accidental configuration errors where users would manually enter a token, breaking the internal authentication flow.
- Orientation Fix (Issue #297): Fixed a bug where selecting portrait mode on LCD panels incorrectly swapped the
dimensions:width/height in the generated YAML, conflicting with therotation:setting. Thedimensions:block now always reflects the physical panel hardware specs — only therotation:value changes to handle orientation.
- Visibility Options: Fixed various visibility toggles (e.g., for Calendar header/grid/events) that were not correctly updating the generated YAML configuration.
Release Date: February 11, 2026
- Custom Hardware Orientation: Custom hardware profiles now correctly respect the defined orientation settings.
- Dark Mode Restoration:
- Global Dark Mode functionality has been restored.
- Sensor Bar & Progress Bar: Fixed rendering issues to ensure these widgets look correct in Dark Mode.
- Drag & Drop Stability: Prevented the widget panel from scrolling unintentionally during drag and drop operations.
- Shape Infill Fixed: Resolved an issue where the infill color of shapes was not being applied correctly.
- System Logic:
- Deep Sleep: Fixed regressions in Deep Sleep behavior.
- Auto Cycling: Resolved issues with the page auto-cycling logic.
Release Date: February 8, 2026
- Local Sensor Support: Added "Local" toggles for all Sensor Bar components (WiFi, Temp, Humidity, Battery). This allows using on-device ESPHome sensors instead of Home Assistant entities for a more robust "offline" status display.
- Live Preview Parity: The designer's live preview of the Sensor Bar now correctly reflects the actual state of your Home Assistant entities.
- Shape-Accurate Shadows: The "Create Drop Shadow" feature now dynamically detects the widget geometry. It perfectly matches Circles, Rounded Rectangles (respecting your radius), and Rectangles for pixel-perfect depth.
- Intelligent Infill & Masking (Device Parity): Creating a shadow now automatically applies a solid, opaque background fill to the original widget. This ensures the shadow is correctly masked behind the widget on your physical device without "bleeding through" transparent text or icons.
- Preserved Content Colors: For text and sensor widgets, our new logic preserves your chosen text color while providing the necessary opaque fill for the shadow effect.
- Unified Preview: All content-bearing widgets (Text, Sensors, DateTime, Icons) have been updated to ensure the designer preview exactly matches the on-device rendering for background fills.
- Multi-Select & Batch Creation: You can now create shadows for multiple selected widgets simultaneously via the new "Operations" section in the properties panel.
- Full Model Support: Added native hardware recipes for SenseCAP Indicator D1, D1S, D1L, and D1Pro models.
- RGB Display Optimization: Implemented smart screen clearing using
page_changeddetection. This provides a full clean refresh on page transitions (no black artifacts) while maintaining high-speed updates for sensor data to keep touch input responsive. - Home Assistant Control: Added built-in Home Assistant buttons for remote page navigation and display refresh, achieving full feature parity with the reTerminal.
- Reliable 480x480 Rendering: Fixed graph widget trace colors and auto-scaling logic specifically for high-resolution RGB displays.
- Clearer Terminology: Renamed "Local Profiles" to "User-Imported / Custom" to avoid confusion with files shipped with the editor.
- Bundled vs User: Files in the
hardware/folder are now correctly grouped as "Built-in" (Bundled) profiles, even if they aren't in the explicitly "verified" list. - Import/User Suffixes: User-added profiles now display an "(Imported)" suffix for better visibility.
- Project → Layout: Standardized all user-facing references from "Project" to "Layout" to resolve confusion (#272).
- Consistently Labeled Buttons: Renamed "Save Project" and "Import Project" to "Save Layout" and "Import Layout".
- Sidebar Synchronicity: The sidebar now correctly identifies the active configuration as a "LAYOUT".
- Multi-Select Property Editing: You can now edit common properties (X, Y, Width, Height, Colors, Borders, Fonts) for multiple widgets simultaneously.
- Mixed Value Detection: The sidebar now intelligently detects if selected widgets have different values for a property, displaying a "Mixed" state placeholder.
- Filtered YAML Snippets: Selecting multiple widgets on the canvas now isolates their YAML in the code panel, hiding all unselected distractions and automatically selecting the text for instant copying.
- Safety Guards: Layout updates are automatically disabled when viewing partial snippets to prevent accidental project overwrites.
- Resize Snapping & Alignment Guides: Widgets now snap to the grid and other widgets during resize, with real-time alignment guides for pixel-perfect layouts.
- Natural Page Numbering: New pages now automatically receive the next unique number (e.g., Page 4) even if intermediate pages (e.g., Page 2) were deleted, preventing duplicate names (#270).
- Graph Y-Axis Overrides: Added "Min (Override)" and "Max (Override)" inputs that remain visible when Auto-scale is enabled. This allows forcing fixed bounds for Y-axis labels while maintaining auto-scale logic.
- Intelligent Battery Defaults: Standalone battery widgets now automatically default to
sensor.battery_levelwhen "Local" is unchecked, ensuring a smoother external sensor setup. - Enhanced Sensor Bar Resolution: The battery icon in the Sensor Bar now uses 10% increments (matching standalone widgets) for much more granular level updates.
- In-YAML Documentation: Auto-scaled graphs now include a helpful comment in the generated YAML explaining how to enable Y-axis labels via overrides.
- Image Resize Handles: Fixed an issue where resize handles were invisible on both
ImageandLVGL Imagewidgets due tooverflow: hiddenclipping.
Release Date: February 6, 2026
- Zoom to Fit All Pages: new "Grid View" icon in the view toolbar.
- Selectable PAGES Header: Clicking the "PAGES" sidebar header now instantly zooms and pans to see all artboards on the canvas at once.
- Double-Click to Focus: Double-clicking an empty area of any artboard now zooms and recenters precisely on that page. Single-clicking selects the page context without jarring camera jumps.
- Improved Reset View (Ctrl+0): The reset view command is now smarter—it will center and fit the currently selected page instead of just resetting to absolute zero.
- Dynamic Artboard Headers: Page headers now automatically adapt their width to match the device profile's width, ensuring a cleaner visual alignment.
- Better Reframing for Smaller Devices: Improved
focusPagealgorithm that ensures optimal zooming for mobile and small tablets, preventing artboards from being cropped. - Page Renaming: Pages can now be renamed directly, making multi-page project organization much easier.
- Duplicate Page: Added ability to copy/duplicate entire pages including all widgets and their properties.
- Clear Hardware Profiles: Refreshing hardware profiles now clearly distinguishes between locally stored custom profiles and default built-in recipes.
- Better Multi-Widget Drag & Drop: Multiple widgets can now be dragged between pages smoothly using high-performance drag ghosts. The canvas no longer aggressively zooms during these operations, allowing you to see exactly where you are dropping your widgets.
- Automatic Recentering: The canvas now automatically recenters and zooms to fit whenever you change the device profile, orientation, or hardware settings in the Device Settings modal.
- Cross-Page Drag Clamping: Fixed an issue where widgets dropped between artboards could end up in "neverland". Snapping and clamping are now strictly enforced on drop.
- Header Selection Consistency: The PAGES header in the sidebar now has visual hover feedback and better title tooltips.
Release Date: January 28, 2026
Caution
🚨 CRITICAL UPDATE INSTRUCTION (For HACS Users)
HACS caches the old repository domain (reterminal_dashboard). To install this update correctly, you MUST perform a clean reinstall:
- In HACS, go to Integrations → Find ESPHome Designer (or reTerminal Dashboard) → Click Wait (three dots) → Remove.
- Go to Integrations → Three dots (top right) → Custom repositories.
- Find
https://github.com/koosoli/ESPHomeDesignerand delete it (Trash icon). - Restart Home Assistant (This is critical to clear the cache).
- Go back to HACS → Custom repositories → Re-add
https://github.com/koosoli/ESPHomeDesigner. - Install ESPHome Designer fresh.
Failing to do this will cause HACS to re-download the old version!
- Plugin-Based Widget Ecosystem: A complete shift from a 3,800+ line monolithic exporter to a modular registry with 55+ independent widget plugins. Every widget is now its own self-contained module, making the system faster, more stable, and easier to extend.
- Backend Modularization: Massive backend refactor splitting the monolithic
http_api.pyandyaml_parser.pyinto dedicatedapi/andyaml_parser/directories. This improves stability and enables complex parsing logic for new platforms. - Multi-Platform Rendering (Experimental):
- OpenEpaperLink (OEPL) Integration: Full support for generating MQTT-based payloads for AP-flashed e-paper tags. Includes automated parsing of OEPL YAML arrays.
- Open Display (ODP) v1 Protocol: Initial support for the Open Display JSON standard for MQTT/HTTP based controllers.
- Parsing Parity: Both OEPL and ODP platforms support "Round-Trip" editing—import your existing payloads back into the designer canvas seamlessly.
- World View Canvas: All project pages are now rendered as distinct artboards on a unified infinite stage. View your entire multi-page project at once for pixel-perfect cross-page consistency.
- Codebase Sanitization: Removed 1450+ legacy files and consolidated 80+ redundant versions into a single, clean production-ready branch.
- Atomic Grouping Engine: Groups now behave as unified containers. Draggable, resizable, and layer-persistent. Transporting a group between pages now preserves the entire internal hierarchy perfectly.
- Hierarchy Panel & Layer Management:
- Full Synchronization: Perfect real-time sync between the Canvas, the Hierarchy Tree View, and the YAML property editor.
- Visual Layer Sorting: Easily reorder widgets and groups via drag-and-drop in the hierarchy panel.
- Relocated Layer Controls: Quick-access "Front/Back" and "Up/Down" layer adjustment buttons integrated directly into the Hierarchy section.
- Interactive Precision Tools:
- Canvas Rulers: Pixel-accurate rulers that scale with zoom and highlight widget focal points.
- Smart Spacing Guides: Hold
Ctrlto see real-time distance markers between widgets. - Batch Alignment: New contextual toolbar for rapid Left/Center/Right/Top/Middle/Bottom alignment and distribution of multiple widgets.
- Focus Mode: Custom panning algorithm (
focusPage) that instantly centers any artboard in the viewport with a single click. - Advanced Properties Accordion: Semantic organization of widget settings (Transform, Appearance, Data, Events) with a redesigned UI for better readability.
- Refined Artboard Aesthetics: High-fidelity triple-elevation drop shadows and active-page "lift" effects for a premium design feel.
- ODP Arc & Ellipse: Native vector-based rendering for experimental platforms.
- ODP Polygon: Define custom multi-point shapes with fill and stroke control.
- ODP Icon Sequence: Easily create status bar sets or navigation rows.
- ODP Rectangle Pattern: Advanced tiling for complex backgrounds.
- ODP Plot: High-performance sensor history visualization for JSON-based displays.
- Viewport Scrollbar Cleanup: Disabled conflicting native scrollbars in favor of 100% transform-based panning for smoother navigation.
- Display Lambda Indentation: Resolved long-standing YAML validation errors caused by inconsistent indentation in hardware recipes.
Warning
BREAKING CHANGES
- Project Compatibility: Saved projects from versions prior to 0.9.0 will not be automatically imported. We strongly recommend backing up your old project JSON files or YAML snippets before updating.
- Branding Rename: The legacy
reterminal_dashboarddomain has been retired. The integration is now officiallyesphome_designer.
Release Date: January 1, 2026
- Custom Hardware Recipe Updates: Fixed a critical issue where updating a custom hardware recipe (YAML file) and re-importing it would not reflect changes in the generated output. The system now bypasses browser caching when fetching hardware packages and templates, ensuring edits are immediately applied.
- Custom Hardware Profile Generation: Fixed missing
id: my_display,offset_height: 0, andoffset_width: 0properties in the generated YAML for ST7789V displays. - YAML Color Export: Fixed an issue where custom colors selected via the RGB picker always exported as
COLOR_BLACK. The exporter now correctly parses hex color codes and generates the appropriateColor(r, g, b)constructors in the C++ lambda.
Release Date: January 1, 2026
- [Experimental] Custom Hardware Profiles: A major new capability allowing you to define your own hardware characteristics (Chip, Display, Touch, Pins) directly within the designer.
- Visual Configuration: No more manual YAML hacking to get a new display working. Configure your Chip (ESP32-S3/C3/C6), Tech (LCD or E-Ink), Resolution, and Pin assignments via a new UI.
- Browser Persistence: In offline mode, your custom profiles are now automatically saved to your browser's
localStorage, ensuring they survive page refreshes. - Snippet-First Philosophy: The generated hardware YAML is intelligently commented out for infrastructure sections (
esphome,esp32, etc.), allowing you to safely paste the hardware definitions into your existing configuration. - Auto-Selection: Newly created profiles are automatically selected and applied to the current session.
- Pin Input Crash: Fixed a critical
TypeErrorwhen saving custom profiles caused by a missing Touch Reset pin element in the HTML. - Improved Dropdown Stability: Fixed industrial-strength race conditions where the "Custom Profile..." option would disappear or fail to select after a save. Added a robust retry mechanism for profile loading.
- Safe Input Retrieval: Implemented a global helper for safe UI value retrieval to prevent crashes if certain hardware elements are missing from the DOM.
Release Date: January 1, 2026
- RGB Color Selectors for LCD/OLED: The designer now intelligently switches between a limited color palette (for E-Ink) and a full RGB color mixer for LCD and OLED devices. This is automatically determined based on the hardware profile features.
- Calendar Widget Compiler Errors: Fixed C++ compilation errors (
return-statement with a value) and deprecated warnings (containsKey) in the Calendar widget. The generation logic was corrected in both the modular feature file and the mainyaml_export.js. - ESP-IDF Environment Tip: Added a helpful tip to the generated YAML header recommending
framework: version: 5.4.2for ESP32-S3 devices. This prevents build failures caused by auto-updates to bleeding-edge ESP-IDF versions (like 5.5.1) which may have broken Python environments.
Release Date: December 29, 2025
- Round Display Support: Introduced support for round/circular display canvases, including correct coordinate mapping and visual boundaries in the designer.
- Improved Hardware Expansion: Added dedicated support and tested hardware recipes for the WaveShare Universal ESP32 e-Paper Driver Board paired with the 7.5" v2 display.
- Dynamic Orientation: Updated import logic to respect
# Orientation: portrait/landscapetags, automatically rotating the canvas to match the device's physical mounting. - Resolution & Shape Metadata: Imported YAML files with
# Resolution: WxHor# Shape: round/rectcomments will now automatically resize and reshape the designer canvas to match the hardware. - Premium Default Theme for Bars: The
template_nav_barandtemplate_sensor_barwidgets now default to a high-contrast white-on-black theme for better readability and a more premium aesthetic. - New Hardware Support: Added support for the WaveShare Universal ESP32 epaper driver board and 7.5" v2 display via hardware recipes. Many thanks to EmilyNerdGirl for contributing this recipe!
- Hardware Recipe Documentation: Expanded the Hardware Recipes Guide with comprehensive documentation for all supported metadata tags, including
# Orientation,# Dark Mode, and# Refresh Interval. - Full Conditional Visibility Support: All widget types now support conditional rendering based on Home Assistant entity states (binary, numeric, text, and range). The designer automatically generates the required Home Assistant sensors and optimized C++
ifblocks in the display lambda. - Improved Smart Condition Logic: Enhanced sensor state detection for both binary and numeric sensors. The generator now recognizes expanded Home Assistant states like
open,locked,home, andactiveas positive (true) values, and provides intelligent fallbacks for numeric sensors using common string labels.
- Custom Resolution Import Fix: Resolved a critical issue where custom resolutions from hardware recipes were ignored during import, resetting the canvas to 800x480.
- Inverted Color Metadata: Added support for the
# Inverted: true/falsemetadata tag in imported YAML files, ensuring correct color mapping from the first load. - E-Paper Page Cycling Logic: Refactored the
auto_cycle_timerto use a robust delay-based loop and ensured the countdown resets on manual page interaction, resolving issues where cycling would stall or trigger unpredictably. - Global Variable YAML Compliance: Fixed ESPHome validation errors by wrapping numeric and boolean
initial_valuefields in quotes, ensuring compatibility with ESPHome 2024.11+. - Playfair Display Glyph Fix: Resolved an issue where the "Playfair Display" font caused ESPHome compilation errors (#105) due to a missing "µ" (micro) glyph. The designer now automatically filters out this character specifically for this font while preserving it for other font families.
- Line Object YAML Export Fix: Fixed a critical issue where line objects generated invalid ESPHome YAML (#106). Points are now correctly formatted with
xandykeys, and style properties (line_opa,line_width, etc.) are properly nested within astyleblock to comply with ESPHome LVGL requirements. - LVGL Button & Opacity Fix: Resolved ESPHome compilation errors (#104) by converting LVGL opacity values to percentages (e.g.,
100%) and correcting thehomeassistant.servicecall structure for buttons (adding the missingdata:block). - Temperature & Humidity Sensor Fix: Resolved issues (#102) where selecting a custom Home Assistant entity for on-device widgets caused "ID not found" errors. Standardized ID generation across all sensors to ensure hardware definitions and display lambdas always match.
- Local Sensor Hardware Support: Fixed a bug where selecting "Local / On-Device Sensor" on DIY devices (like TRMNL DIY) failed to generate the required
sht4xhardware platform, resulting in compilation failures. The designer now automatically includes the necessary hardware configuration if local widgets are used. - Trmnl Device Fixes: Fixed compilation errors for "Trmnl DIY" devices where local temperature/humidity sensors were incorrectly referenced. The system now safely handles cases where local sensors are requested but not supported by the hardware, and correctly sanitizes custom sensor IDs to prevent "Couldn't find ID" errors.
- Display Lambda Header Injection: Fixed a critical bug where the
lambda: |-header was incorrectly omitted if the string was found anywhere else in the file (e.g. in comments or other components). The generator now strictly checks for the header specifically preceding the lambda placeholder, ensuring valid YAML syntax for all display configurations. - Widget Visibility Logic Fix: Resolved a long-standing issue where conditional visibility rules were ignored during YAML export. The implementation now correctly generates re-import metadata (shorthand keys) and ensures sanitized sensor IDs are used throughout the C++ rendering logic.
- Waveshare 7" LCD Orientation Fix: Implemented a dynamic package override mechanism to allow rotating the Waveshare 7" LCD (Landscape, Portrait, Inverted). Also added automatic touchscreen
transformmapping to ensure touch inputs align with the rotated display. - Quote Widget Regression Fix: Resolved a regression where quotes failed to fetch and display on-device. Restored the missing
intervalandhttp_requestfetch logic, updated to use robustDynamicJsonDocumentparsing for reliability, and ensuring immediate visual feedback via a forced display update. - Calendar Widget Fix: Resolved a critical issue where calendar events were not displayed on-device. Replaced
json::parse_jsonwith robust manualdeserializeJsonparsing using a heap-allocatedDynamicJsonDocument(2KB), and introduced a "Compact Mode" layout that aggressively reduces header and grid spacing to maximize event visibility on smaller widgets.
Release Date: December 29, 2025
- On-Board Sensor Bar Widget: A unified status bar for local hardware, combining WiFi signal, Temperature, Humidity, and Battery levels into a single, highly customizable widget.
- Navigation Bar Widget: A premium, all-in-one navigation control featuring "Previous", "Home/Reload", and "Next" buttons. Automatically generates the complex touch area logic and C++ rendering required for multi-page dashboards.
- Batch Widget Locking: Lasso-selected widgets can now be locked or unlocked simultaneously using the "Lock" toggle in the properties panel.
- Lock/Unlock Shortcut (Ctrl+L): Quickly toggle the lock status of all selected widgets with a new keyboard shortcut.
- Locked Widget Preservation: Locked widgets are now protected from accidental deletion via keyboard shortcuts or the "Clear Page" operation.
- UI Layout Optimization: Refined the editor interface with a 3-column keyboard shortcut list and a subtle, relocated AI Assistant button next to the YAML editor.
- AI Assist Onboarding: Added a configuration hint and direct settings link within the AI Assistant modal for unconfigured users.
- Weather Icon Sensor Fix: Addressed an issue where
weather_iconwidgets required manualtext_sensorentries in ESPHome YAML. The designer now automatically generates these sensors for bothweather.*andsensor.*entities. - Unified ID Generation: Standardized the ESPHome ID generation for weather-related sensors, ensuring that
sensor.*prefixes are correctly stripped to match the internal C++ lambda references, preventing compilation errors. - Calendar Display Optimization: Optimized the calendar widget layout and C++ rendering logic to resolve an issue where only a single event was displayed. Reduced header and grid spacing and increased the default widget height (to 550px) to accommodate more events.
- Robust Calendar JSON Parsing: Refactored the ESPHome lambda to use direct JSON object access instead of redundant parsing, significantly reducing memory overhead and improving parsing reliability for multi-event datasets.
- Calendar Backend Refinement: Updated the Python helper script to return data in a standard dictionary format, ensuring full compatibility with ESPHome's JSON component.
- YAML Lambda Indentation: Fixed a critical bug in package-based hardware recipes where the display lambda was incorrectly indented by 8 spaces instead of 4, causing "Invalid YAML syntax" and compilation errors in ESPHome.
- YAML Configuration Duplication: Fixed a bug where custom hardware recipes were prepended twice in the exported YAML under certain conditions.
- Custom Hardware Resolution: Fixed an issue where the resolution specified in custom hardware recipe headers (e.g.,
# Resolution: 480x320) was ignored by the backend, causing the designer to default to 800x480. - M5 Touch Area Precision: Fixed a bug in the coordinate transformation logic for M5 devices (specifically M5Paper) that caused touch inputs to be rotated 90° relative to the display. This ensures navigation buttons align correctly with visual elements. Note: This fix remains untested on physical hardware.
- Navigation Widget Height Persistence: Fixed a critical bug where
template_nav_barand navigation touch buttons would reset their height to 10px on page refresh in the deployed Home Assistant version. The Python backend'sclamp_to_canvas()function was using hardcoded 800x480 landscape dimensions, incorrectly clamping widget heights for portrait layouts or devices with non-standard resolutions (e.g., M5Paper 540x960). - Gray Background Rendering: Fixed an issue where
template_nav_barandtemplate_sensor_barwidgets rendered their backgrounds as solid black instead of gray. The export logic was incorrectly using the foreground (icon) color for backgrounds and checking the wrong property for dithering. - E-Paper Page Cycling Fix: Fixed a regression in the
auto_cycle_timerscript generation where the missingmode: restartattribute prevented recursive execution, causing auto-cycling to stop after the first page change. - Global Variable YAML Compliance: Refactored the generation of numeric and boolean global variables (e.g.,
display_page,page_refresh_default_s) to remove redundant single quotes, improving compliance with strict YAML parsers and ensuring correct type inference in ESPHome. - Hardware Profile & PSRAM Safety: Improved analysis and documentation for hardware profiles. Identified that selecting mismatched profiles (e.g., reTerminal E1001 for generic ESP32-S3 boards) can cause boot loops due to incorrect PSRAM mode settings (
octalvsquad). Added recommendations for theupdate_interval: neversetting to prevent display update conflicts.
Release Date: December 28, 2025
- Widget Position Locking: Added a "Lock Position" checkbox to widget properties, preventing accidental movement or resizing on the canvas.
- Full Touch Support: Added comprehensive support for dragging, resizing, and moving widgets on touch devices (mobile phones/tablets). Pinch-to-zoom and panning are also optimized for mobile browsers.
- Standardized SHT Sensor Support: Enhanced support for SHT3x, SHT4x, and SHTC3 sensors with standardized internal IDs, ensuring compatibility across M5 Paper and other hardware.
- Default Home Assistant Icon: Set the default MDI icon for the "icon" widget to the Home Assistant icon (
F07D0). - Lasso Selection: Added ability to select multiple widgets simultaneously by drawing a selection rectangle on the canvas. Supports group movement, bulk deletion, and multi-widget copy/paste.
- Auto Page Cycling: Added support for automatic page switching based on a configurable time interval, perfect for kiosk-style displays. Includes logic to reset the timer on manual user interaction.
- Navigation Touch Widgets: Introduced "Next Page", "Previous Page", and "Reload Page" widgets in the Inputs category. These are pre-configured touch areas that automatically generate the required ESPHome scripts for seamless multi-page navigation and display refreshing.
- Global Variable Refresh Interval: Users can now configure a global default refresh interval for the entire device. This setting intelligently syncs with Deep Sleep intervals and ensures consistent refresh timing across all pages while preserving battery life. Provisions were made to ensure this setting is persistent across page refreshes and exports.
- Enhanced Quick Widget Search (Shift+Space): The Quick Search command is now global! Pressing
Shift+Spacewill now open the widget picker even if you are editing text in the YAML box or properties panel, automatically blurring the input and letting you add widgets instantly. - Enhanced YAML Copy Feedback: The "Copy" button in the YAML editor now provides immediate visual feedback ("Copied!") on click, confirming the action without needing to look at toast notifications.
- YAML Syntax Error: Fixed "mapping values are not allowed here" error by switching widget marker comments from
//to standard YAML#notation. Maintained full backwards compatibility for importing existing local projects. - M5 Paper Temp/Humidity Widgets: Fixed Temperature and Humidity widgets on M5 Paper by implementing
sht3xdplatform support. - YAML Cleanup: Eliminated redundant/duplicate sensor blocks in generated YAML for devices with on-board sensors.
- Icon Character Escaping: Fixed a bug where certain unicode icons (like
thermometer-low) were improperly escaped in the generated C++ code. - UI Refinement: Updated the properties panel to be more sensor-agnostic and refined various labels for better clarity.
- YAML Duplication: Fixed a critical bug where hardware recipes (like Xiao ePaper) were duplicated in the output and had incorrect lambda nesting, causing compilation errors.
Release Date: December 26, 2025
- AI-Powered Dashboard Assistant: A new AI-driven design assistant that can generate entire dashboards or individual widgets from simple text prompts (e.g., "Make a beautiful weather dashboard with large bold text").
- Multi-Provider AI Support: Seamlessly switch between Google Gemini, OpenAI, and OpenRouter.
- Dynamic Model Discovery: Real-time fetching and filtering of available models from AI providers with custom model filters.
- Secure Local-Only API Storage: AI API keys are stored exclusively in your browser's
localStorage. They are never included in exported JSON files or sent to the Home Assistant backend, ensuring your credentials stay private. - Hyper-Strict AI Compliance: Engineered system prompts with negative constraints and literal-text handling to ensure the AI follows your instructions perfectly.
- Bespoke Architect Design Rules: The AI now follows professional design principles, using
rounded_rectcontainers and visual hierarchy for premium-looking dashboards. - WiFi Signal Strength Widget: New drag-and-drop widget displaying WiFi signal strength using MDI icons. Shows dynamic icon based on signal level (Excellent ≥-50dB, Good ≥-60dB, Fair ≥-75dB, Weak ≥-100dB) with optional dBm value. Uses ESPHome's built-in
wifi_signalsensor platform. - On Device Sensors Category: New widget category consolidating device-related widgets:
- Battery Widget (moved from Core Widgets)
- WiFi Signal Widget (moved from Core Widgets)
- Temperature Widget (NEW): Displays on-device SHT4x temperature sensor or Home Assistant entity with dynamic thermometer icons (Cold/Normal/Hot).
- Humidity Widget (NEW): Displays on-device SHT4x humidity sensor or Home Assistant entity with dynamic water-drop icons (Low/Normal/High).
- Live Sensor Preview: Battery, WiFi, Temperature, and Humidity widgets now show actual sensor values in the canvas preview when configured with a Home Assistant entity.
- Quick Widget Search (Shift+Space): New command palette for rapidly adding widgets. Press Shift+Space to open a searchable list of all widgets with keyboard navigation (↑↓ to select, Enter to add, Escape to close). Dynamically discovers all widgets from the palette.
- Optional Diacritic Font Support: Added support for extended Latin characters (ľ, š, č, ť, ž, etc.) via the
GF_Latin_Coreglyphset. This can be enabled per-device in the Device Settings to support international characters while keeping firmware size small for users who don't need them. - Inverted Colors Support for Recipes: Hardware recipes now support an
# Inverted: truemetadata comment to automatically swap black and white colors for e-paper displays with reversed color mapping. - Manual Color Inversion Toggle: Added a new "Inverted Colors" checkbox in the Device Settings modal, allowing users to manually override color mapping for e-paper displays that appear inverted on-device.
- Improved Hardware Recipe Parser: The recipe parser now extracts more metadata, including the inverted flag, ensuring better "out-of-the-box" compatibility for new displays.
- LCD YAML Generation: Fixed critical issues where E-ink specific rendering code (dithering, inverted colors) was incorrectly applied to LCD devices, causing visual artifacts and black screens.
- Package Standardization: Standardized YAML output for "untested" package-based devices. Now, imported hardware packages automatically have conflicting system keys (
esphome,wifi,api, etc.) commented out, ensuring a clean "partial YAML" that pastes perfectly without duplicate header errors. - Battery Widget Sensor Bug: Fixed issue where the Battery Entity ID field was not generating the required Home Assistant sensor declaration, causing "Couldn't find ID" errors when compiling in ESPHome.
- Theme Persistence: Fixed Light Mode not persisting after page refresh; the theme preference now correctly loads from localStorage on startup.
- Touchpad Gesture Behavior: Improved canvas interaction for macOS trackpads. Two-finger scroll now pans the canvas, while pinch-to-zoom and Ctrl+scroll zoom in/out, matching standard design tools like draw.io.
- LVGL Slider & Light Support: Fixed issue #87 where light entities could not be selected for sliders, buttons, and switches. Expanded the entity picker to include
light,fan,cover, and other domains. Updated the slider to generate brightness control and buttons/switches to usehomeassistant.togglefor seamless light interaction. - M5Paper Color Inversion: Fixed an issue where "Dark Mode" and "Light Mode" were inverted on M5Paper devices by correctly enabling the
inverted_colorsflag in the hardware profile. - Icon Browser & Previews: Fixed critical mismatch in the icon browser where the previewed icon did not match the file name (e.g., "account" showed a completely different icon). Also fixed rendering for extended Material Design Icons by correctly handling 5-digit hex codes.
- Orientation-Aware Rotation & Touch Calibration: Fixed issue where devices with native portrait orientation (like M5Paper) ignored the "Orientation" setting in the generated YAML. The Designer now automatically calculates the correct
rotationvalue and swaps touchscreencalibrationcoordinates based on whether the device is natively portrait or landscape.
Release Date: December 22, 2025
- Standalone & Offline Mode: The Designer can now be used completely offline or deployed to static hosting platforms like GitHub Pages.
- Externally Hosted HA Connection: Users can now manually configure a Home Assistant URL and Long-Lived Access Token (LLAT) in Editor Preferences. This enables the GitHub-hosted or externally deployed versions of the editor to connect to local HA instances for fetching entities and managing layouts without needing the integration installed.
- Import/Export Projects: Added a visible "Import Project" button to the sidebar to complement the "Save Project" button. This enables a complete offline workflow where you can save and load your dashboard designs as local JSON files.
- GitHub Pages Deployment: A standalone version of the designer is now available at koosoli.github.io/ESPHomeDesigner/.
- LVGL Grid Support (Phase 1): Initial support for LVGL grid layouts on a per-page basis using the
layout: NxMshorthand. - Bidirectional Grid Sync: A seamless workflow where dragging or resizing widgets on the canvas auto-detects their grid cell, row, and column span.
- Snap-to-Grid: Widgets now intelligently snap to grid boundaries during drag and drop for pixel-perfect alignment.
- Auto-Positioning for All Widgets: Both LVGL and non-LVGL widgets (Text, Icons, Shapes) now support grid-based positioning. For non-LVGL widgets, the Designer automatically calculates the required absolute X/Y coordinates based on their grid cell.
- Grid Visualization Overlay: Added a visual dashed grid overlay with cell coordinate labels (
0,0,0,1, etc.) that automatically adapts to dark/light mode for easier layout design. - Smart YAML Export:
- Generates clean
layout: NxMdefinitions for pages. - Includes
grid_cell_*properties for LVGL widgets. - Automatically omits redundant
x:andy:coordinates when native grid positioning is in use.
- Generates clean
- Round-Trip Import: Full support for importing grid layouts and cell properties from existing YAML files.
- Display Refresh Loop: Fixed an issue where the display auto-refresh loop would terminate permanently if time synchronization failed momentarily during the update cycle.
- YAML Generation: Fixed a bug where the
text_sensor:key was duplicated in the generated YAML when using both Home Assistant text sensors and complex widgets (Quotes, Weather Forecast, or Calendar). - reTerminal Battery Calibration: Fixed an issue where the
battery_voltagesensor incorrectly included a calibration filter, causing it to always display 100%. Raw voltage is now correctly reported in Volts with proper Home Assistant metadata. - Missing Glyphs: Fixed missing unit characters (μ, ³, °, etc.) in generated fonts by explicitly including extended glyphs.
Release Date: December 20, 2025
- Modern Canvas Interaction: Complete overhaul of canvas navigation. Now you can use the mouse wheel to zoom into the canvas or drag-move the canvas with the middle mouse button.
- Drag & Drop Workflow: Widgets in the sidebar can now be dragged directly onto the canvas for intuitive placement, in addition to being clickable.
- RGB Color Picker: Added a full RGB color picker for LVGL widgets, allowing for more precise UI design.
- Interactive Touch Icons: The
touch_areawidget now supports dual-state icons (Normal/Pressed). This allows for professional-looking buttons on non-LVGL displays that provide visual feedback when touched. - Touch Area Migration: The
touch_areawidget has been migrated to the modern Feature Registry system, fixing console warnings and improving performance. - Advanced Icon Pickers: A completely refactored icon selection UI featuring a quick-search visual dropdown and a full modal browser for the entire Material Design Icons library.
- High-Fidelity Canvas Feedback: Added color accuracy to the canvas preview and an interactive hover effect. Hovering over a touch area now simulates the "pressed" state, allowing you to preview interactions instantly.
- Border Styling: Added the possibility to apply border colors for squares and circles.
- Hardware Recipes & Templates:
- Dynamic Discovery: Drop a YAML file into
frontend/hardware/and it will automatically appear in the device selector. - Dynamic Import (GUI): Click "Import Recipe" in the Device Settings to upload a new template directly through the browser.
- Offline Manual Import: Added support for parsing YAML recipes directly in the browser when running offline.
- Dynamic Discovery: Drop a YAML file into
- Modular Hardware Profiles: Implemented support for loading hardware profiles from plain YAML files (package-based). This enables seamless profile sharing with the esphome-modular-lvgl-buttons project. Big thank you to agillis for these awesome profiles!
- Date/Time Widget Improvements:
- Fixed an issue where the widget would occasionally insert duplicate code into the YAML.
- Fixed font size property persistence so settings are correctly restored when updating layout from YAML.
- Fullscreen YAML Editor: Fixed a bug where one could only click once on the full screen YAML and never again after opening it.
- Icon Rendering: Fixed a bug where gray icons would result in solid squares when flashed on device due to dithering logic issues.
- Alignment Fixes: Removed the legacy 15px vertical offset for shapes to ensure they render exactly where they appear on the canvas.
- Calendar Widget: Various improvements to rendering, performance, and stability.
- Major Energy Management Overhaul: Complete logic rewrite for better reliability and clarity.
- Silent Hours (No Refresh Window): Added ability to disable display updates during specific hours to prevent ghosting or noise at night. Integrated with both Standard and Ultra Eco modes.
- Global Interval Fix: Fixed a bug where the refresh interval was incorrectly exported to YAML.
- M5Stack CoreInk Refinements:
- Fixed Dark Mode rendering issues where the background remained white instead of black.
- Improved battery calibration and button logic responsiveness.
- Rounded Rectangles: Improved the rendering of rounded rectangles to look much nicer when flashed to a physical device.
- TRMNL DIY Battery: Fixed incorrect battery level and voltage readings for the TRMNL DIY (ESP32-S3) hardware by implementing a proper 12-point calibration curve.
- Live YAML Generation: Removed the "Generate YAML" button as it has become redundant; YAML is now generated on the fly as you design.
- Optimized Device List: Cleaned up the device list, regrouped by manufacturer with clearer device names.
- Efficient YAML Output: Improved the gray dither logic to produce significantly less YAML code by using C++
forloops. - Mobile Support: Added support for smaller screens like mobile phones, with a more responsive UI (Note: drag and drop behavior on touch devices is not yet fully tested).
- Hybrid Profile Solution: Implemented a hybrid loading system. While new LCD profiles are fetched as YAML packages, legacy E-Ink profiles (M5Paper, CoreInk, TRMNL) are still served via built-in JS definitions.
- Online/Standalone Warning: Note that due to browser security restrictions, package-based profiles require the application to be served via a web server (like Home Assistant) and will show a warning in the standalone offline version (
file://).
Release Date: December 17, 2025
- Seeed Studio Trmnl DIY Kit (ESP32-S3): Added full support for the Trmnl DIY Kit, including:
- Correct pin mappings for display, buttons, battery, and SPI.
- Support for
7.50inv2pdisplay model with partial update capabilities. - Automatic
invertedcolor handling to fix "Dark Mode" logic (Hardware White is treated as logical White).
- QR Code Widget: Fixed a regression where the
qr_codecomponent definition was missing from the generated YAML, causing "Couldn't find ID" errors.
Release Date: December 17, 2025
- Duplicate Weather Entity: Fixed a bug where using a weather entity in both a generic widget (like
sensor_text) and a dedicated weather widget caused duplicate entity definitions in the generated YAML, leading to compilation errors. - Input Text Filtering: Fixed entity picker filtering to allow selecting
input_textentities in widgets like Sensor Text. Also improved the entity picker to search across all supported domains includinginput_select,switch,input_boolean, etc.
Release Date: December 15, 2025
- ESP32-S3 PSRAM Mode: Fixed compilation Error "ESP32S3 requires PSRAM mode selection" by explicitly setting
psram_mode: octalfor reTerminal E1001/E1002. - Graph Sensor ID Mismatch: Fixed "Couldn't find ID" error for graph widgets by ensuring the graph's internal sensor reference matches the correctly sanitized sensor ID (e.g.
sensor_my_entity). - OOM Compilation Support: Added a helpful tip in the generated YAML setup instructions suggesting
compile_process_limit: 1if users encounter Out-of-Memory (OOM) errors during compilation on ESP32-S3.
Release Date: December 15, 2025
- Inverted Options: Fixed an issue where the
COLOR_WHITEandCOLOR_BLACKdefinitions were inverted for thereTerminal E1001device. - Ghost Code: Cleaned up the generated YAML to remove unused helper functions (like
get_calendar_matrixandapply_grey_dither_mask) when they are not needed. - Glyph Tracker Regression: Fixed a critical regression in the glyph tracker.
- Hide Unit Persistence: Fixed a bug where "Hide Default Units" was not persistent when using "Update Layout from YAML".
- M5Paper & M5Stack CoreInk: This build includes experimental support for M5Paper and M5Stack CoreInk. These features are from the development branch and require testing.
- reTerminal E1001 Model Update: Default model updated from
7.50inv2to7.50inv2p. This change is untested. If it does not work, please manually revert the model in your YAML back to7.50inv2.
Release Date: December 14, 2025
- Decoupled Hardware Profile: Hardware definition logic has been moved out of
yaml_export.jsinto dedicatedhardware_generators.jsanddevices.jsfiles, significantly improving code maintainability and safety.
- Project Renamed to ESPHome Designer: Refleting our broader mission to support all display types.
- Support for More Displays: We are moving beyond just e-ink to support OLED, LCD, and Touch displays.
- New Repository:
https://github.com/koosoli/ESPHomeDesigner
-
Dark Mode Option: Added a toggle in Device Settings to enable global "Dark Mode" (black background with white widgets). Individual pages can override this setting via Page Settings with options: "Use Global Setting", "Light Mode", or "Dark Mode".
-
Gray Color Support: Full support for "Gray" color has been implemented for icons, text, and all other widgets.
-
Sensor Text Intelligence:
- Smart Type Handling: Decoupled text vs. numeric sensor registration. "Is Text Sensor" now forces a unique text-based internal ID, fixing "NaN" issues when an entity is previously registered as a number (e.g. in a graph).
- Default Precision: Sensor text widgets now default to 2 decimal places (e.g.
23.50) instead of raw float output, improving default legibility. Precision can still be set to-1for raw output.
-
Experimental LVGL Widgets: Added experimental support for LVGL
button,arc,chart(Line/Bar),slider,bar,image, andqrcodewidgets. -
Text Sensor Enhancements:
- Dual Sensor Support: Now supports displaying two sensors in one widget.
- Prefix & Suffix: Added settings for custom prefix and suffix text.
- Hide Default Unit: Added checkbox to suppress the default unit, allowing for cleaner custom formatting with Postfix.
-
Time & Date Widget: Added more formatting options for date display.
- Rendering Improvements: Significant improvements to calendar widget rendering and reliability.
- Full-Featured Calendar: Monthly view with upcoming events list
- Customizable: Configurable font sizes for all elements (Date, Day, Grid, Events), plus colors and border settings
- Smart Setup: Built-in Python helper script downloader simplifies Home Assistant integration
- Accurate Preview: What you see is what you get - preview reflects real dates and layout
- Waveshare PhotoPainter (ESP32-S3): Full support for the Waveshare ESP32-S3 PhotoPainter (7-Color E-Ink).
- Experimental Support: Added support for more devices. Note that devices not yet fully verified are explicitly marked as "untested" in the device selector.
- Feature Forecast: Resolved bug fixes for the weather forecast feature; it should now work correctly.
- Graph Widget: Fixed issue where graphs would intersect/overlap incorrectly.
- Date/Time Alignment Persistence: Fixed an issue where alignment settings were lost when updating layout from YAML.
- Duplicate Config Fields: Resolved an issue where duplicate "Postfix" fields appeared in the Sensor Text widget properties.
- Disappearing Sensor: Addressed a root cause where manual YAML editing (required due to UI issues) caused sensor configuration loss.
Release Date: December 7, 2025
- Graceful Empty Entity Handling: Fixed compilation error when user creates a sensor_text widget without selecting an entity. Now displays "--" placeholder instead of generating invalid
id().statecode - Auto Sensor Import: Sensor text and progress bar widgets using Home Assistant entities (
sensor.*,text_sensor.*) now automatically generate the requiredplatform: homeassistantsensor imports in YAML
- Shared Sensor Deduplication: Fixed potential duplicate sensor definitions when the same entity is used across multiple widget types (e.g., using the same sensor in both a graph and sensor_text widget). All numeric sensors now share a single tracking set to prevent duplicates
Release Date: December 6, 2025
- Y Offset Alignment: Added
RECT_Y_OFFSETconstant (-15px) to align rectangle widget rendering on e-ink display with canvas preview
- Min/Max Value Regression: Fixed regression where
min_valueandmax_valuewere not being output to the graph component YAML declaration, causing graphs to display empty
- Quote & Author Swapped: Fixed RSS parsing where quote text and author name were incorrectly swapped for BrainyQuote feeds
- Auto Text Scaling: Added automatic font scaling for quotes - text now shrinks (100% → 75% → 50%) to fit within widget bounds
- Duplicate Layouts: Fixed "Update Layout from YAML" creating duplicate layouts and resetting device model to E1001
- Cleaned Up HTTP Comments: Removed confusing duplicate
http_requestcomment block from generated YAML
- Text Vertical Alignment: Added 11px vertical offset for text widgets to better match canvas preview with actual e-ink display positioning
- Note: This adjustment compensates for font baseline differences between browser and ESPHome rendering
- Grid Lines: Fixed X and Y grid lines not generating correctly in YAML output
- Binary Mode for Monochrome: Remote images now default to BINARY type for monochrome displays (E1001, TRMNL) for sharper rendering
- Auto Type Detection: Image type automatically selected based on device (BINARY for monochrome, RGB565 for color E1002)
- New Widget: Full support for rounded rectangles with configurable corner radius
- Border Support: Optional border with customizable thickness
Note
This is a major release with significant architectural improvements, new widgets, and hardware support.
- Multi-Device Support: Manage multiple e-ink devices from a single interface
- Export/Import Layouts: Save and share your dashboard designs as files
- Switch between devices seamlessly with persistent configurations
- Fresh Modern Interface: Complete visual overhaul - easier on the eyes
- Light Mode: New light theme for users who prefer a brighter workspace
- Canvas Controls: Zoom in/out and recenter the canvas for precise editing
- No More Templates Required: The generator now produces a complete, standalone configuration
- Simply paste the generated YAML below ESPHome's auto-generated sections
- Makes setup child's play - no manual template merging needed
-
Quote / RSS Feed Widget: Display inspirational quotes or RSS feed content
- RSS feed URL configuration with popular default (BrainyQuote)
- Optional author display, random quote selection
- Configurable refresh interval (15min to 24h)
- Word wrap, italic styling, full font customization
- Zero configuration: No
configuration.yamlentries or Home Assistant sensors needed - Note: Functional but formatting not fully respected - unfinished feature
-
QR Code Widget: Generate QR codes directly on your e-ink display
- Configurable content string (URLs, text, etc.)
- Four error correction levels (LOW, MEDIUM, QUARTILE, HIGH)
- Auto-scaling to fit widget dimensions
-
Weather Forecast Widget: Multi-day weather forecast display
- Shows upcoming weather conditions with dynamic icons
- Integrates with Home Assistant weather entities
- Note: Requires a weather entity configured in Home Assistant
-
Vertical Lines: Draw vertical lines (untested)
- Full color e-paper support for the Seeed Studio reTerminal E1002
- Color rendering for all widgets and shapes
- Same easy workflow as E1001 - just select your device type
- New device support: TRMNL e-paper hardware now fully supported
- Dedicated hardware template (
trmnl_lambda.yaml) - Correct SPI and battery sensor configurations
- Proper busy_pin logic
Warning
Experimental Feature: Online Image (remote URLs) widget is an initial implementation and may be buggy or broken. Use at your own discretion.
-
Modular Frontend Architecture: Complete refactor of the monolithic
editor.js(276KB) into a modular system:yaml_export.js- Clean YAML generation with per-widget handlingyaml_import.js- Robust YAML parsing and importcanvas.js- Canvas rendering and interactionstate.js- Centralized application state managementproperties.js- Widget property panel generationwidget_factory.js- Standardized widget creationkeyboard.js- Keyboard shortcuts handling- Improved maintainability and extensibility
-
Feature-Based Widget System: Backend now uses a
features/directory with:- Per-widget
schema.jsonfor property definitions - Per-widget
render.jsfor canvas preview rendering - Standardized widget registration and discovery
- Per-widget
- Line Widget: Fixed length synchronization between canvas preview and e-ink display
- Line Widget: Fixed drag resize functionality
- Rectangle Border: Corrected
border-boxpositioning discrepancy between canvas and e-ink - Weather Forecast: Fixed positioning at correct X/Y coordinates
- Graph Grid Lines: Fixed
x_gridvalues not generating correctly in YAML
- Sensor ID Generation: Fixed sensor ID stripping for
battery_icon,sensor_text,progress_bar, andweather_iconwidgets- Correctly strips
sensor.andweather.prefixes when generating ESPHomeid()references
- Correctly strips
- Quote/RSS Widget: Added WiFi connection check and startup delay for reliable fetching
- Italic Font Support: Fixed italic fonts not being correctly referenced in lambda code
- Text widgets now use
_italicsuffix (e.g.,font_roboto_900_100_italic) when italic is enabled - Quote RSS widget correctly references italic font IDs
- Text widgets now use
- Font Validation: Fixed
font_roboto_400_24validation warning in battery_icon widget - Italic Persistence: Fixed
italicproperty not persisting forsensor_textanddatetimewidgets after YAML update
- Device Name Sync: Fixed device name changes not persisting in Device Settings modal and Manage Layouts list
- Device Settings Modal: Fixed settings reverting upon re-opening
- Duplicate SPI Removal: Fixed duplicate SPI configuration in generated YAML
- YAML Duplicate Fixes: Various fixes for duplicate section generation
- Frontend Feature Registry: Dynamic widget type discovery and registration
- Schema-Driven Properties: Widget properties now defined in JSON schemas
- Improved Error Handling: Better error messages and AppState.notify integration
- Code Organization: Clear separation between core, UI, IO, and utility modules
Warning
BREAKING CHANGE: This version requires the latest hardware template.
Global settings have been moved to the template.
You MUST update your reterminal_e1001_lambda.yaml (or equivalent) to the latest version for these features to work.
Old templates will cause compilation errors or ignore your power settings.
- Page Management:
- Drag & Drop Reordering: You can now reorder pages in the sidebar by dragging them.
- Persistent Page Names: Custom page names are now saved in the YAML and restored upon import.
- New Power Management UI: Complete redesign with radio buttons for clear, mutually exclusive power modes:
- Standard (Always On) - Auto-refresh based on page intervals
- Night Mode - Screen off during specified hours for energy savings
- Manual Refresh Only - Updates only via button or Home Assistant trigger
- Deep Sleep (Battery Saver) - Device offline between updates for maximum power savings
- Deep Sleep Support: Full ESPHome deep sleep implementation with configurable intervals (default: 600s)
- Smart Text Optimization: Automatically strips unused characters from large static fonts to save massive amounts of RAM, preventing compilation crashes. Dynamic text (sensors) remains untouched.
- Device Settings Persistence: Fixed all device settings (power mode, sleep times, deep sleep interval) not saving and jumping back to defaults on restart.
- Page Refresh Rates: Fixed page refresh intervals not persisting and resetting when updating layout from YAML.
- Power Management Settings: Fixed settings resetting to "Standard" mode when updating layout from YAML.
- Script Generation: Fixed wrong script generated for deep sleep mode (was using auto-refresh loop instead of simple sleep).
- Display Lambda: Fixed missing COLOR_ON/COLOR_OFF definitions causing compilation errors.
- Sensor Text Widget: Fixed value-only mode (no label) missing critical YAML sections (button:, font:, script:, globals:).
- Refresh Intervals: Fixed page refresh intervals < 60 seconds being filtered out.
- No-Refresh Window: Fixed invalid conditions generated when window not configured (0-0 case).
- Manual Refresh Mode: Fixed manual refresh showing unnecessary page interval logic (now minimal script only).
- Line Widget: Fixed lines not rendering straight on e-paper (right side was ~10px lower).
- Image Widget: Fixed missing path property in UI and drag functionality not working.
- Battery Icon: Fixed percentage text not centering underneath battery symbol when icon is enlarged.
- Sensor Text Alignment: Added separate alignment options for label and value (e.g., label left, value right) with WYSIWYG canvas preview.
- DateTime Widget: Verified alignment options working correctly.
- Progress Bar Widget: Verified alignment options working correctly.
- Google Fonts: Fonts now work correctly - all fonts pre-defined in template (Template-Only approach).
- Font Selection: Verified font dropdown shows all 15 supported families.
- Font Persistence: Fixed font selections (Family, Weight, Size) for Sensor Text widgets not persisting through YAML updates.
- Frontend/Backend Parity: Both generators now produce identical output.
- Robust Import:
applyImportedLayout()now merges settings instead of overwriting, preserving user preferences. - Smart Parsing: The YAML parser now intelligently extracts page names and refresh rates from comments and code logic.
- YAML Highlighting: Selecting a widget on the canvas now automatically highlights its corresponding YAML definition in the snippet box.
- Critical Bug Fix: Fixed JavaScript error
ReferenceError: isTextSensor is not definedin snippet generator that prevented YAML generation and caused compilation errors.
- Number Sensor Fix: Fixed a bug where number sensors were interpreted as text sensors, causing them to show gibberish or fail to compile.
- Graph Improvements: X and Y information are now automatically added if the user adds min/max information or time information in the widget settings.
- Graph Persistence: Fixed a bug where graph minimum/maximum values and duration were not saving to YAML. These values would reset when "Update Layout from YAML" was pressed.
- Known Bugs:
- Puppet widget is still unstable.
- Straight lines are not perfectly straight.
- Visible conditions are not fully tested and might fail to compile.
- Min/Max Visibility: Added support for numeric range conditions (Min/Max) with AND/OR logic for widget visibility. Perfect for progress bars (e.g.,
0 < value < 100). - Boot Stability: Updated the default hardware template (
reterminal_e1001_lambda.yaml) to remove the immediate display update fromon_boot, preventing boot loops on heavy layouts. - WiFi Sensor: Added
wifi_signal_dbto the default hardware template (diagnostic entity). - GUI Updates: Added "Update Layout from YAML" button to the editor for easier round-trip editing.
- Graph Widget Fixes: Fixed persistence of
min_value,max_value,min_range, andmax_rangeproperties. - Editor Fixes: Fixed CSS regression and ensured fullscreen editing works correctly.
- Text Sensor Persistence: Fixed "Is Text Sensor?" checkbox state not saving to backend.
- Puppet Widget Fixes: Fixed Puppet/Online Image widgets not saving to backend, added automatic
http_requestdependency, and fixed URL corruption in parser. - Puppet Stability: Added
on_errorhandler and conditional page updates to prevent crashes and unnecessary refreshes. - Conditional Visibility: Fixed C++ compilation error when using conditional visibility with numeric sensors (removed invalid
atofcheck).
- Text Sensor Support: Added "Is Text Sensor?" checkbox to
sensor_textwidget to correctly format string states (fixesNaNissue). - Entity Picker Limit: Increased the entity fetch limit from 1000 to 5000 to support larger Home Assistant installations.
- Default Template Fixes: Updated
reterminal_e1001_lambda.yamlto match default dashboard entity IDs (sensor_reterminal_e1001_...) and device name. - Canvas Responsiveness: Improved canvas scaling and centering on smaller screens.
- Copy/Paste: Added support for copying and pasting widgets using
Ctrl+CandCtrl+V. Pasted widgets are automatically offset for visibility. - Undo/Redo: Implemented Undo (
Ctrl+Z) and Redo (Ctrl+YorCtrl+Shift+Z) functionality for widget operations (move, resize, add, delete, property changes). - Fullscreen YAML Editing: The fullscreen YAML view is now editable and includes an "Update Layout from YAML" button to apply changes directly.
- Sidebar Visibility Control: Added a configuration option to show or hide the integration in the Home Assistant sidebar.
- Canvas Responsiveness: The editor canvas now dynamically scales and centers to fit smaller screens, ensuring the entire layout is visible without scrolling.
- Ghost Pages: Fixed an issue where deleted pages would persist in the generated YAML snippet.
- Undo/Redo Stability: Fixed issues where Undo would jump back multiple steps or become unresponsive due to duplicate history states or missing drag state capture.
- Graph Persistence: Fixed
Continuous: truesetting not saving correctly. - Page Jump: Fixed editor jumping to the first page after layout updates.
- Weather Text Color: Fixed weather widget text color reverting to black.
- Graph Widget: Added automated sensor info (min/max) based on Home Assistant entity attributes.
- Circle Widget: Enforced 1:1 aspect ratio during resize to prevent distortion.
- Manifest: Version bump.