LCARdS 2026.09.0
This release aims to help anyone who's ever hand-edited HA-LCARS theme YAML: a full visual HA-LCARS theme editor.
Plus two solid lcards-slider additions and a handful of important reliability fixes.
- HA-LCARS Theme Lab - build a complete HA-LCARS-compatible theme visually and export YAML.
lcards-slider: value marker labels and a new animation tweens for smooth value transitions- Sound scheme, MSD, and template-resolution reliability fixes
- LLM Schema + AI-Assistance guide - help stop your LLM of choice from inventing LCARdS config keys
New Features
HA-LCARS Theme Lab
Building a full HA-LCARS theme can feel daunting with huge YAML files full of unfamiliar variable names. The new HA-LCARS Theme Lab found in LCARdS Config panel tries to make this more approachable with a full visual editor.

A bit of background on what it's actually editing:
- Home Assistant doesn't ask you to pick every colour individually. Under the hood, HA builds its whole colour system (semantics) from a small handful of role colours palettes -
primary/neutral/red/orange/green- each with 11 stops. HA takes each role colour palette and computes an entire range of lighter/darker shades from it - button hover states, disabled states, borders, backgrounds, and more. Change the role colour, and every one of those derived shades updates automatically, everywhere. - HA-LCARS follows the same pattern for some of its own variables (currently using the
primarypalette) - Separately, HA and HA-LCARS also colour things by entity state - a light that's
onshows a different colour thanoff, and different domains (lights, climate, locks, sensors...) have their own conventional colours. This is what's covered by Domain & State Colours.
Previously, tuning any of this meant knowing exactly which of dozens of --lcars-*/--ha-* variables controlled what, and hand-computing shades yourself. The Theme Lab now handles:
- full light and dark mode selections where supported. You can tune a single theme for both modes (useful if you want to have a daytime and nightime colour profile for your theme)
- Palette Seed - set each role (
primary/neutral/red/orange/green) to use the HA default, one of the bundled LCARdS palettes, a fully customized palette, or by generating a smooth 11-stop shade scale from a single base colour you pick. HA (and HA-LCARS) can then use these palettes for any of their derived colours - exactly like it would from a role colour in a normal HA theme. - The Semantic Colours section includes 83 fields across 8 groups covering HA-LCARS and HA common variables. Thse are searchable and filterable with category chips, and every field has a one-line "applies to" description so you're not guessing what a variable actually affects.
- Domain & State Colours matrix - see and override the colours used for entity domains and states (lights, climate, locks, etc.) in one place, instead of hunting through YAML.
- Advanced/Raw Overrides - a catch-all for any variable outside the curated fields above, for full manual control when you need it.
- Import/export round-trips real theme YAML - load any HA-LCARS themes present in your HA installation, or if not installed LCARdS ships a current snapshot of HA-LCARS at build time - or paste in your own directly. Fields you haven't touched show exactly what HA-LCARS itself ships, badged by where the value is actually coming from (HA-LCARS Default / HA Default / Global Default) so you always know if you're looking at a real override or a fallback.
- Preview & Export shows your theme applied to real HA components (
ha-alert/ha-card/ha-button/ha-switch), real card_mod/UIX-classed demo cards, synthetic-entity domain tiles, and a hand-drawn "LCARS UI Chrome" mockups. There is a full flat swatch sheet and a live YAML export box you can copy straight out.
This is an evolving feature - please report any issues, discrepancies or ideas!
Slider: Value Marker Labels (#394) and Transition Animations
lcards-slidervalue markers can now carry an optionallabel(customizable text/colour/font size/offset), rendered as an SVG caption in both gauge and pills modes. Label text goes through the full template pipeline (JS, Jinja2, token, etc.). Thanks for the suggestions @tswonke!- A new
value_tweenconfig block eases the gauge fill, pills opacity sweep, markers and labels between old and new positions whenever (any) bound entity changes on its own - previously all of these snapped instantly. Slider and value markers can be bound to different entities.
LLM Schema Bundle + AI-Assistance Guide
If you've ever asked an LLM for LCARdS YAML and gotten back config with invented keys - those models have never seen LCARdS's real schema. LCARdS now publishes one:
- A JSON Schema bundle (
doc/public/lcards-schema.json) covering the standard cards (button, chart, elbow, slider, data-grid, select-menu, alert-overlay, layout-card), generated from the real card schemas and wired into the docs build so it can't drift. - A new AI-Assistance guide explaining what to attach (the schema bundle + Common Properties + the card's own doc page) and a prompt template that tells the LLM not to invent properties.
- MSD is excluded for now - its config surface is much deeper and out of scope for now.
Other Fixes & Improvements
Reliability fixes and smaller improvements
- Sound schemes now survive a full HA restart. The sound-scheme helper's options list was synced via a service call that didn't persist to storage, so an HA restart reloaded stale options and silently fell back to "none" if your selected scheme wasn't among them. Now written through the proper storage-collection command.
- MSD: fixed
base_svgsources under/local/orhttp(s)://silently failing to load ("Asset not found") -builtin:and HA media-library sources were unaffected. - Hardened
ConnectionOverlayService's post-reconnect config reload against a boot-order race where LCARdS's own WebSocket commands could still be unregistered for a few seconds after a full HA restart. - Fixed
{states.domain.object_id.state}token resolution project-wide - the shared token resolver couldn't reconstruct a dotted entity ID from the flathass.statesdict, so this form silently resolved to an empty string everywhere, not just on the slider. - Fixed Jinja2 templates missing
config/user/variablescontext, bringing them to parity with JS/token templates. - Fixed the deprecated anime.js
createSpring()(console warning) in favour ofspring();ease: springnow derives its physics from{duration, bounce}so its settling time actually tracks your configuredduration. lcards-form-field: fixed_handleChangeto supportselectorConfigand normalize empty values.ThemeManager.getCurrentTheme()(which doesn't exist) silently broke theme context at 3 call sites - corrected togetActiveTheme().AnimationManager._extractValueFromPath()was reading processor buffers from the wrong shape.- Audited all
doc/architecture/**anddoc/development/**pages against source and fixed ~30 stale/incorrect API references.
All changes: 2026.08.0...2026.09.0