Environment*
- Home Assistant Core: 2026.7.4
- Drag & Drop Card (frontend): v2.0.8
- Drag & Drop Card Backend: v0.1.8
- Installed via HACS (
/hacsfiles/Drag-And-Drop-Card/drag-and-drop-card.js)
- Dashboard mode: storage (UI-managed), affected card config:
storage_key: "layout_PAD", auto_save: true, container_size_mode: "fixed_custom"
Summary
When I update the config of a card nested inside a custom:drag-and-drop-card by calling Home Assistant's standard lovelace/config/save WebSocket command (the official API any external tool/script uses to edit a dashboard), the change is correctly persisted in the dashboard's stored Lovelace config — I verified this by reading it back immediately after with lovelace/config. However, the running card keeps rendering the old/stale content indefinitely, even in a brand-new private/incognito browser window that had never loaded the dashboard before. The only way to make the change actually appear is to open that specific nested card's own "Edit in YAML" dialog inside the Home Assistant UI and save it from there.
Steps to reproduce
- Create/open a dashboard using
custom:drag-and-drop-card with auto_save: true and a storage_key set.
- Add a nested card (e.g. an
entities card) to it via the normal dashboard editor.
- Using an external tool (not the drag-and-drop-card's own UI), call the standard
lovelace/config/save WebSocket command to update that nested card's config (e.g. add new entities to its entities list), targeting the dashboard's url_path.
- Confirm via
lovelace/config that the change is present server-side (it is).
- Load the dashboard in the browser — even a fresh private/incognito window that never had it open. The nested card still renders the OLD content.
- Open that nested card's own "Edit in YAML" (three-dot menu on the card) inside the HA UI, paste the exact same updated YAML, and save from within that dialog.
- The change now appears correctly and persists.
Expected behavior
A change written through the standard Lovelace config API should be reflected the next time the dashboard loads, the same as it would for any native/built-in Lovelace card.
Actual behavior
The card appears to keep its own separate persisted source of truth (tied to storage_key, likely handled by the backend integration Drag & Drop Card Backend v0.1.8, given there's a dedicated backend update entity), rather than treating the standard dashboard's cards array as authoritative after initial load. External changes to the dashboard's stored config are silently ignored by the running card until a save is triggered from inside the card's own UI. There is no error or warning anywhere — the API call reports success, and reading the config back confirms the change, which makes this confusing to debug.
Additional data points from my investigation
- I checked
frontend/get_user_data with key "layout_PAD" (matching the card's storage_key) for my admin account — it returned null, so the layout doesn't seem to be stored there under that literal key, at least not for that user.
- The stale content persists even in a fresh incognito window that never loaded the dashboard before, which rules out browser-side caching (localStorage/IndexedDB/service worker) and points to some other persisted state — most likely server-side, via the backend integration — that only gets updated through the card's own internal save action, not by changes to the underlying Lovelace dashboard storage.
- The card ships with its own backend HACS component (
Drag & Drop Card Backend, v0.1.8) in addition to the frontend module — this is presumably where the separate persisted layout/content lives.
Why this matters
Anyone managing Home Assistant dashboards programmatically (backups, git-versioned configs, scripted deployments, custom tooling) will have their changes to any drag-and-drop-card silently fail to apply — with no error — unless they specifically re-open and re-save that exact card from its own native editor.
Things that might be worth checking
- Where exactly the backend integration stores per-card layout/content, and whether it's keyed independently from the dashboard's canonical Lovelace config.
- Whether the card could reconcile/prefer the incoming dashboard
cards config over its own stored state on load when they diverge — or at least expose a "resync from dashboard config" action.
- Whether the card listens for a
lovelace_updated (or similar) event to invalidate/refresh its internally cached layout, instead of only refreshing after its own internal save actions.
Happy to provide more detail (raw dashboard config JSON, network trace, etc.) if useful.
Environment*
/hacsfiles/Drag-And-Drop-Card/drag-and-drop-card.js)storage_key: "layout_PAD",auto_save: true,container_size_mode: "fixed_custom"Summary
When I update the config of a card nested inside a
custom:drag-and-drop-cardby calling Home Assistant's standardlovelace/config/saveWebSocket command (the official API any external tool/script uses to edit a dashboard), the change is correctly persisted in the dashboard's stored Lovelace config — I verified this by reading it back immediately after withlovelace/config. However, the running card keeps rendering the old/stale content indefinitely, even in a brand-new private/incognito browser window that had never loaded the dashboard before. The only way to make the change actually appear is to open that specific nested card's own "Edit in YAML" dialog inside the Home Assistant UI and save it from there.Steps to reproduce
custom:drag-and-drop-cardwithauto_save: trueand astorage_keyset.entitiescard) to it via the normal dashboard editor.lovelace/config/saveWebSocket command to update that nested card's config (e.g. add new entities to itsentitieslist), targeting the dashboard'surl_path.lovelace/configthat the change is present server-side (it is).Expected behavior
A change written through the standard Lovelace config API should be reflected the next time the dashboard loads, the same as it would for any native/built-in Lovelace card.
Actual behavior
The card appears to keep its own separate persisted source of truth (tied to
storage_key, likely handled by the backend integrationDrag & Drop Card Backendv0.1.8, given there's a dedicated backend update entity), rather than treating the standard dashboard'scardsarray as authoritative after initial load. External changes to the dashboard's stored config are silently ignored by the running card until a save is triggered from inside the card's own UI. There is no error or warning anywhere — the API call reports success, and reading the config back confirms the change, which makes this confusing to debug.Additional data points from my investigation
frontend/get_user_datawith key"layout_PAD"(matching the card'sstorage_key) for my admin account — it returnednull, so the layout doesn't seem to be stored there under that literal key, at least not for that user.Drag & Drop Card Backend, v0.1.8) in addition to the frontend module — this is presumably where the separate persisted layout/content lives.Why this matters
Anyone managing Home Assistant dashboards programmatically (backups, git-versioned configs, scripted deployments, custom tooling) will have their changes to any
drag-and-drop-cardsilently fail to apply — with no error — unless they specifically re-open and re-save that exact card from its own native editor.Things that might be worth checking
cardsconfig over its own stored state on load when they diverge — or at least expose a "resync from dashboard config" action.lovelace_updated(or similar) event to invalidate/refresh its internally cached layout, instead of only refreshing after its own internal save actions.Happy to provide more detail (raw dashboard config JSON, network trace, etc.) if useful.