Skip to content

Releases: SH1FT-W/flode

v1.5.1

Choose a tag to compare

@SH1FT-W SH1FT-W released this 18 Jul 16:44

Bug Fixes

  • Fixed dialog scrolling being silently blocked inside the FLODE panel (Shadow DOM): scrollable content in dialogs (e.g. the automation list in "Open Automation") no longer ignores wheel/trackpad scroll. Root cause was Radix Dialog's default scroll lock breaking under Shadow DOM event retargeting; dialogs are now non-modal for scroll-locking purposes while still dimming/blocking the background.
  • Fixed incorrect colors on native Home Assistant form fields and dropdowns (e.g. the entity picker field, select dropdowns) in dark mode.

v1.5.0

Choose a tag to compare

@SH1FT-W SH1FT-W released this 10 Jul 20:02

New features

  • The node property panel's ID field now works correctly for triggers, so {{ trigger.id }} templating and choose:/condition: trigger routing can be set up entirely from the canvas.
  • FLODE now warns (inline in the property panel and with a badge on the canvas node) if two triggers in the same automation end up with the same ID, since that would make routing ambiguous or fail to load in Home Assistant.

Bug fixes

  • Fixed the ID field silently producing an invalid save ("extra keys not allowed") when set on action, delay, wait, or set_variables nodes — Home Assistant's schemas only support a per-step id: on triggers, so the field is now scoped to trigger nodes only.

v1.4.0

Choose a tag to compare

@SH1FT-W SH1FT-W released this 10 Jul 19:08

Added

  • Quick-add menu on empty-canvas connection drop — drag a connection from a node's handle and release it on empty canvas to get a searchable node picker at the drop point instead of losing the connection. Picking a type creates that node there and auto-wires the dragged connection to it. Direction-aware: dragging from a source handle excludes Trigger (it has no target handle to satisfy the drag); dragging from a target handle offers Trigger but not compound blocks (no single well-defined exit point to wire).

Fixed

  • Compound-block entry point was assumed to be the first node, which was wrong for repeat_while — its first node is the loop body, not the while-condition that actually runs first (found while wiring quick-add's auto-connect for compound blocks). parallel also has two independent branches with no single entry at all. block-factories.ts now returns an explicit entryNodeIds per block instead of callers guessing nodes[0].

v1.3.2

Choose a tag to compare

@SH1FT-W SH1FT-W released this 10 Jul 18:24

Added

  • Undo/Redo on the canvas — Cmd+Z / Cmd+Shift+Z (also Ctrl+Y), plus buttons in the canvas toolbar. Tracks graph content (nodes, edges, name, description, metadata) only — selection, simulation, and clipboard state never create or get reverted by a history entry. Rapid bursts of changes (dragging a node, a run of keystrokes) coalesce into a single undo step instead of one per pointer-move frame. Opening a different automation, or clearing the canvas, resets history so you can't undo into a previous automation.

Fixed

  • Externally-controlled value in a log format string (CodeQL js/tainted-format-string) — the deep-link automation ID and a batch-fetch automation ID were interpolated directly into console.warn messages; a crafted ID containing %s/%d could garble the logged output. Passed as a separate %s argument instead.

v1.3.1

Choose a tag to compare

@SH1FT-W SH1FT-W released this 10 Jul 12:28

Added

  • Theme toggle in the header — force FLODE into Home Assistant's own light or dark palette independently of your HA profile's theme, or leave it on "Automatic" to keep following your real HA setting as before. Persisted per browser via localStorage.

Fixed

  • Native HA components (pickers, selectors, ...) ignored FLODE's theme entirely, always showing the real HA theme regardless of what FLODE's own chrome displayed — they read Home Assistant's CSS variables directly, which the light/dark override now also overrides in addition to FLODE's own aliased tokens.
  • Text color leaked in from the real Home Assistant page instead of FLODE's own theme in panel mode, because FLODE's base color rule targeted body, which doesn't exist inside FLODE's Shadow DOM there — invisible on any override that diverged from the actual HA theme (e.g. forcing light while signed into a dark HA profile). Fixed by declaring the color/background explicitly on FLODE's own root element instead of relying on inheritance.
  • Fallback light/dark colors didn't match Home Assistant's real palette — several were approximated by hand and had drifted (primary-color, primary-text-color, secondary-text-color), and the status colors (error/warning/success/info) were incorrectly varied between light and dark when real HA keeps them constant. Values are now read directly from home-assistant/frontend's theme source.

v1.3.0

Choose a tag to compare

@SH1FT-W SH1FT-W released this 04 Jul 21:39

Added

  • Save-dialog metadata — set icon, category, labels, and area directly when saving an automation, matching HA's own automation editor. Prefills from the entity registry when editing an existing automation, without clobbering fields you're already editing.
  • Full action targeting — Action nodes can now target by label and floor, in addition to the existing entity/device/area support.
  • Native more-info dialogs — clicking an entity name on a node (trigger, condition, or action target) opens HA's own more-info dialog with history and controls, without leaving FLODE.
  • Trace overlay on the canvas — load the last automation run and see it highlighted directly in the diagram: executed nodes in green, errors in red, unreached nodes grayed out, plus trigger/timestamp details in the Debug tab.
  • Deep links/flode?automation=<entity_id> opens FLODE with that automation loaded, /flode?new=1 starts a blank one, making "Edit in FLODE" dashboard buttons possible. FLODE also fires a flode_automation_saved event with the entity_id after every save.
  • Diagnostics download — standard HA diagnostics (FLODE version, HA version, config options, panel status) via Settings → Devices & Services → FLODE.
  • Repair issues for lossy imports — if importing a YAML automation doesn't round-trip losslessly, FLODE now files a persistent Repair issue (Settings → System → Repairs) instead of only a one-time toast.
  • Language override — FLODE's integration options (Settings → Devices & Services → FLODE → Configure) now let you pin FLODE's own UI language independent of Home Assistant's active language.
  • Exit confirmation — leaving FLODE back to Home Assistant now asks for confirmation first.

Changed

  • Toasts use HA's native notification system when FLODE is running as a real panel, falling back to FLODE's own toasts only in standalone dev mode.
  • Mobile sidebar toggle now reacts to HA's real narrow state instead of only the browser window's width.
  • "Exit" moved into FLODE's own sidebar, above the node palette, styled to match the palette buttons — previously a header button.
  • Removed the "by SH1FT-W" credit line from the sidebar footer.

Fixed

  • Integration options were unreachable — a leftover config_panel_domain setting made the integration's gear icon always jump into the FLODE panel instead of opening the options dialog, so the new language override had no way to be configured. Removed.

Internal

  • Removed the unused vite-plugin-css-injected-by-js dependency — the Shadow DOM CSS injection has used Vite's native ?inline import for a while, this package hadn't been wired into the build in months.
  • Bumped Yarn from 4.12.0 to 4.17.0.
  • Evaluated js-yaml 5 — rejected: it removes the quotingType/forceQuotes dumper options FLODE relies on for exact YAML formatting, in favor of a new presenter/tag API. Staying on 4.x until that's worth a dedicated migration.
  • Fixed the automation-trace-to-node mapping, which previously guessed node order from canvas Y-position and broke on any manual repositioning — now walks the graph's actual topology.

v1.2.1

Choose a tag to compare

@SH1FT-W SH1FT-W released this 04 Jul 09:16

Internal

  • Pinned transitive dependencies to patched versions via resolutionstar, lodash, minimatch, @isaacs/brace-expansion, uuid, ip-address, picomatch, and diff were all resolving to versions flagged by Dependabot advisories through indirect dependencies (build tooling only — node-gyp, graphlib, glob, socks-proxy-agent, ts-node, tinyglobby); none were reachable from the shipped frontend bundle, but all are now forced to the fixed releases.

v1.2.0 — Native Home Assistant UI

Choose a tag to compare

@SH1FT-W SH1FT-W released this 03 Jul 22:32

Added

  • Native Home Assistant theming — FLODE now mirrors HA's active theme (light/dark, custom themes, corner-radius scale) into its own UI at runtime instead of using fixed Tailwind colors.
  • Native Home Assistant components everywhere — entity/device/area/service pickers, dropdowns, toggles, and text/number/date/time/duration/template/object fields now use HA's own web components (the same ones you see in HA's built-in automation editor) instead of hand-built equivalents. Falls back automatically to FLODE's previous components when a native one isn't available.
  • Shadow DOM panel mount — the panel now shares HA's document via Shadow DOM instead of an iframe, which is what makes loading native components possible in the first place.
  • One-time compatibility notice — if a native HA component fails to load or breaks at runtime, FLODE shows a single toast instead of silently degrading field by field, and logs the running HA version once per session to help diagnose future incompatibilities.

Changed

  • Duration fields always use the native object picker — the string/object toggle for Delay/Wait duration values was removed now that the object form has full native UI support; existing string-form durations are still read correctly.
  • Minimum Home Assistant version raised to 2025.8.0 (previously 2024.6.0) — required for the multi-entity state/attribute selector support the new UI depends on.

Fixed

  • Native time picker no longer loses in-progress input — a re-render bug was overwriting object/array field values on every render even when their content hadn't changed, which reset HA's time selector mid-keystroke.
  • Delay/Wait/Set-Variables palette entries no longer render white-on-white — a :root CSS selector that never matches inside Shadow DOM silently dropped several color tokens; fixed by targeting :root, :host.
  • numeric_state condition's attribute field now autocompletes correctly against the selected entity's actual attributes.

Internal

  • Dependency refresh: patch/minor updates across Radix UI, Tailwind, Vite, Turbo, i18next, Biome, and @types/node. js-yaml and vite-plugin-css-injected-by-js were deliberately left on their current major versions pending a dedicated compatibility review.
  • Trimmed the README (removed the redundant Project Structure and Node Types sections) and refreshed its screenshots and badges for the current UI.

v1.1.0 — Flow-Control Blocks, Performance & Hardening

Choose a tag to compare

@SH1FT-W SH1FT-W released this 25 Jun 20:57

Added

  • Flow-control blocks in the node palette — the Home Assistant control structures that previously couldn't be added from the palette are now first-class draggable blocks: Choose (Fallunterscheidung), If / Else (Wenn / Sonst), Repeat While (Wiederholen solange), Repeat N× (N× Wiederholen) and Parallel. They are created as ready-to-wire compound blocks (correct nodes, edges and handles) and round-trip to the matching HA YAML (choose: / if-then-else / repeat.while / repeat.count / parallel:)
  • Grouped palette section — the new blocks live under an "Ablauf-Steuerung / Flow Control" heading, sub-grouped logically into Branching, Loops and Concurrency
  • Dedicated "repeat count" field — the N× Repeat block now has a proper number input in the properties panel instead of requiring raw JSON editing
  • Labelled exit button — the bare back-arrow in the header is now an explicit "Exit / Beenden" button

Changed

  • Much faster initial load via code-splitting — the main bundle shrank from ~3.3 MB to ~408 KB. The transpiler + ELK layout engine and the YAML code editor are now lazy-loaded on demand, and React / React Flow / Radix / i18next are split into long-term cacheable vendor chunks
  • Cleaner loop rendering — the Repeat-While block now lays out as action → condition with the loop-back edge routed cleanly around the nodes (a detour over the top) instead of cutting diagonally through them, even when the loop body contains multiple nodes
  • The "Beta" status markers were removed from the README and landing page now that the project is stable and well-covered by tests

Fixed

  • Type-safety hardening in the Home Assistant bridgecontexts/HassContext.tsx no longer relies on any as / as unknown as casts (13 → 0). Frontend-only fields the editor never reads are now optional on the HomeAssistant type, registry fetches use the generic sendMessagePromise<T> boundary, and the duplicated registry-loading logic was consolidated

Internal

  • Added round-trip tests for the palette block factories (structural + transpile checks for all five blocks); the suite now stands at 292 tests across all packages
  • Migrated the Biome configuration to 2.5.0 and applied a repo-wide safe autofix (formatting / import & class sorting only)

image

v1.0.0 — Major Dependency Overhaul & Choose Block Fixes

Choose a tag to compare

@SH1FT-W SH1FT-W released this 20 Jun 20:46

Changed

  • Major dependency upgrade across the whole monorepo: React 18 → 19, Tailwind CSS 3 → 4, Vite 5 → 8, Vitest 2 → 4, TypeScript 5.7 → 6.0, @vitejs/plugin-react 4 → 6, i18next 25 → 26, react-i18next 16 → 17, custom-card-helpers 1.9 → 2.0, lucide-react 0.577 → 1.21, uuid 13 → 14, commander 12 → 15
  • Building from source now requires Node.js ≥20.19 (Vite 7+ requirement) — only affects contributors building the frontend, not end users
  • Migrated vitest.workspace.ts to the test.projects field in a root vitest.config.ts (the standalone workspace file was removed in Vitest 4)
  • Migrated Tailwind config from tailwind.config.ts to CSS-native @theme in index.css, switched from the PostCSS plugin to @tailwindcss/vite

Fixed

  • Choose block: first case had no visible connection to its trigger — every other case showed a fan-out hint edge back to the trigger, but the first case's structural edge was invisible by design with no visible substitute. All cases now consistently show the connection (gap noticed while verifying cafe-hass #201)
  • Choose block: a choice with conditions: [] was silently dropped on import — Home Assistant treats an empty conditions array as vacuously true, but FLODE filtered such choices out before processing, discarding their actions with no warning. They're now folded into the default branch; a genuinely ambiguous case (multiple empty-condition choices, or a clash with an explicit default:) produces a warning instead of silent data loss (fixes cafe-hass #181)
  • Tailwind v4 dark mode was broken — the canvas stayed on the light background/grid colors instead of switching to dark. Root cause: @theme { --color-background: hsl(var(--background)) } gets resolved against :root at build time in Tailwind v4 instead of being re-evaluated per element; switched to @theme inline
  • Two latent bugs surfaced by the Vitest 4 upgrade: an ineffective tsconfig.json exclude pattern (__tests__ only matched the project root, not nested folders, so compiled test files leaked into dist/), and missing node ambient types in the transpiler's tsconfig.json

Tests

  • 282 tests, all green across the full dependency upgrade