All notable changes to this project will be documented in this file.
Fixed:
- A hidden
secondary_info(object form withhide_unavailableorhide_if) showed the main entity's state on HA 2026.8+ instead of hiding: HA's row now renders anysecondary_infoit's given against the main entity whenever the card supplies no secondary text. The card no longer passes its ownsecondary_infoforms through to HA's row - only the generic keywords HA renders natively (#452). This also stops lovelace-canary from taking over templated secondary lines, sodisable_canaryis no longer needed alongside this card (#450)
Changed:
- The style rules the card injects into HA's row element (
name_gap, the main icon paint) are placed above lit's render marker, so they survive the row's template swaps instead of being removed and re-injected - one less style recalc per entity blip. Thanks @dcapslock
Fixed:
- A templated string
secondary_infois now handed to HA's row element as a plain string instead of a rendered template fragment. When anything else mutates the row's DOM (another plugin, a browser extension, a page translator), the old form made HA's renderer crash on every template update - each crash triggering HA's error reporter and burning CPU. The reported case was a conflict with lovelace-canary, which templates the same line; there, also adddisable_canary: trueto the row (#450) name_gapand the main icon paint survive an entity temporarily disappearing: HA's row element sweeps its shadow DOM when it swaps to the "entity not found" warning and back, which silently removed the card's injected style rules until a full reload
Added:
name_gap- the spacing between the main icon and the row name, a CSS length or a number (px). HA hardcodes it at 16px inside its row element's shadow DOM, so it previously took card-mod's shadow-piercing$; unset rows are untouched. Contributed by @BlackZork (#401, #443)state_coloraccepts a map of state value → color, overridingcolorfor matching states the waystate_iconoverridesicon. A match is painted likeicon_color, active or not, so an entry foroffworks. Static, so it costs no template subscription; the boolean form keeps working as the deprecated alias (#444)stylesvalues accept templates, on the row, additional entities andsecondary_info- the way to color the displayed text by state. A pending declaration is dropped until its result lands; the rest apply (#439)
Changed:
- The main row's
icon_color(andstate_colormap) no longer bleeds into additional entities' icons - it paints the main icon only, as documented. Sub-entity icons that relied on inheriting it need their ownicon_color(#445) - An additional entity without its own
color/state_colornow follows the row's, socolor: noneon the row restores the pre-4.9 look for the whole row. An explicit per-entitycolor,state_colororicon_colorstill wins (#441)
Fixed:
styleson asecondary_infoobject had been silently ignored since 4.0.0 moved the secondary line into HA's row element; it applies again, as documented
Fixed:
- 4.10.1 made the inter-entity gap padding, which stacked with margins users set via
stylesand widened tuned rows into overflowing on narrow screens. Spacing is margin again (layout identical to 4.10.0); the gap stays clickable through a layout-neutral hit-area extension (#432) - Toggles are now centered within their entity slot; HA's toggle host left-aligns in any slot wider than the switch (#436)
Fixed:
- The gap between entities showed the row's pointer cursor but ignored clicks - it is now part of the neighboring entity's tap target (#432)
- Rows no longer intermittently show "Configuration error: Custom element doesn't exist" on cold or slow loads under HA 2026.8. HA's new custom-element registry polyfill can replace
window.customElementsafter this resource has registered; the card now detects the swap and re-registers, logging which detector caught it (frontend#52960) - Loading the resource twice (e.g. a HACS entry plus a leftover manual one) no longer throws mid-load - the first copy wins with a console warning, and the card picker lists the card once
Added:
vars- named values usable in any template in the same scope, on the row and on additional entities, which inherit the row's and may shadow them. Values may themselves be templates, and a variable can build on one declared before it. Inlined into each template that uses them, so a field is still a single subscription (#422)- Templates inside
tap_action/hold_action/double_tap_action, at any depth - service data,target,navigation_path,confirmation.text. Results keep their native type, and are resolved when the action fires so a service call carries current values (#422) - An additional entity no longer needs
entity,attributeoricon- an entry with none of them (even- {}) shows the main entity's state, which is the only way to repeat it when the id isn't known in advance, as undercustom:auto-entities(#340) alignoption - vertical alignment of the entity slots (top,centerorbottom). Thestylesoption can't do this: it reaches one entity's own div, which is a flex item, wherevertical-alignhas no effect (#261)- Timer entities show their remaining time instead of the raw
active/idle/pausedstate - the localized state while idle, a countingmm:sswhile running, andmm:ss (Paused)when paused, matching HA's own timer row. An explicitattribute:ortemplate:still wins (#65, #299, #350)
Changed:
name: falsenow removes the name entirely rather than blanking it, so the entities get its space. Rows that also setsecondary_infokeep the name area, since HA renders secondary info inside it (#341, #365)- An entity id that doesn't resolve is now marked with a warning icon instead of silently disappearing from the row.
hide_unavailable: truehides it as before, anddefault:still takes precedence (#364)
Fixed:
- Icons and toggles no longer reserve a header line when their name is hidden. The reserved line aligns text values with their headered siblings; a control has no baseline, so on rows mixing named values with icon-only entities it only added height (#425)
Breaking:
- Entity icons are now colored by state by default, matching Home Assistant's entities card since 2026.8. Set
color: noneon the row or entity to restore the previous look. Rows already usingstate_colororicon_colorare unaffected (#416)
Added:
coloroption on the row and on additional entities, following HA's icon color API:state,none, a theme color name (red,deep-purple, ...) or any CSS color. Templatable likeicon_color. Works back to HA 2024.4; theme colors andstateneed 2026.8+ for the main row icon (#416)
Fixed:
name: ' 'now behaves exactly likename: false. 4.8.0 gave it a reserved header line, which kept blank-named entities level with each other but pushed an all-blank row's values below the row name (#421)
Deprecated:
state_color- still accepted and mapped tocolor(true→state,false→none), and no longer offered in the visual editor
Added:
- Jinja templating, rendered server-side by Home Assistant and updated live as referenced entities change. Supported in
name,icon,icon_color,secondary_infotext,hide_if(string form orhide_if.template), and a newtemplate:option that replaces the displayed value; each template gets anentityvariable holding the owning entity id (#409, #35, #249, #278, #247, #254, #269, #270) - Templated configs open directly in the code editor - the visual editor can't round-trip Jinja safely
Fixed:
unit:overrides (includingunit: false) ignored on state values of entities whose integration ships translated units, e.g. Analytics Insights - the card now formats overridden values itself, keeping locale formatting and the display-precision setting (#413)- Custom
width/justify-contentstyling of.entities-rowhad no effect since 4.7.0: HA wrapped the row in shrink-to-fit boxes because the #338 fix setcatchInteraction, which pinned the row to its content width (#411) - Clicking the name or header of a
toggle: trueentity did nothing since 4.7.0 - toggle entities were skipped when wiring gesture handling, leaving everything but the switch dead (#415) - Entities using
name: ' 'sat a line higher than their siblings since 4.7.1: the blank header collapsed to zero height while the main state reserved its line, misaligning toggles and values (#418)
Added:
wrapoption - reflow entities onto multiple lines instead of overflowing the card on narrow screens (#411)
Fixed:
- Row could stay permanently blank when the first
hassupdate arrived in a later render batch than the config - the likely cause of long-standing intermittent blank rows (#389, #400 diagnosis) - Rows with
%entities clipping on narrow/mobile screens instead of wrapping - regression from the 4.6.0 switch to HA-native formatting (#403) unit:overrides (includingunit: false) were ignored when displaying an attribute - same regression family (#408)format:timestamp options (time,datetime, ...) were silently ignored on thelast-changed/last-updatedattributes (#221, #305)default:on a hidden/missing entity now resolves its header like a visible entity (friendly-name fallback) instead of requiring an explicitname:(#302)confirmation:ontap_actionnow gatestoggle: truetoggles instead of being bypassed (#265)- A
name: falseentity (and the header-less main state) now aligns its value with headered siblings instead of floating centered (#281)
Breaking:
- Minimum Home Assistant version is now 2024.4 (declared in
hacs.json). The pre-2023.9 state/attribute formatting fallback chain was removed - the row now always delegates tohass.formatEntityState/hass.formatEntityAttributeValue, matching HA's own display formatting.
Added:
- Visual config editor - tabbed main/additional entities with add/reorder/copy/paste/delete, secondary info modes, state-based icons, per-entity custom CSS, and action selectors (#395)
hold_actionanddouble_tap_actionon additional entities; all actions resolve against the entity actually tapped (#338, #202, #188, #251)- Combinable numeric formats: comma-separated pipelines like
format: invert, precision3, with a Custom… entry in the editor (#385) hide_if.entity/hide_if.attribute- evaluate hide criteria against another entity's state or attribute (#280, thanks @akomelj)icon_color- any CSS color for entity icons (#325)state_icon- map of state value to icon override (#197)show_state_first- render the main state before the additional entities (#384)percentformat (#323) andupper/lower/capitalize/titlestring formats (#367)--multiple-entity-row-header-colortheme variable (#317, thanks @ildar170975)
Changed:
- Actions dispatch through HA core via the
hass-actionevent: native confirmation dialogs and lock/cover security restrictions now apply; the unmaintainedcustom-card-helpersdependency is removed - A long-press without a
hold_actionacts as a plain tap, matching HA's native rows (previously opened more-info) - Sub-entity taps no longer also fire the main row's action
- Top-level
hide_if/hide_unavailablenow hide the main state value (previously silently ignored) (#227) - Internal: incremental TypeScript migration begun; new code is TypeScript
Fixed:
- Uncaught
RangeErrorwhen typing an incompleteprecision/kilo/mega/milliformat in the config editor (#387)
Several features adapted from the duczz/ha-multiple-entity-row fork - thanks @duczz.
Fixed:
- HA 2026.7+'s entities-card row editor silently renames a row's
formatkey totime_formaton save, breakingformat:for the main entity -multiple-entity-rownow falls back totime_formatwhenformatisn't set (#386)
Changed:
- Internal: console banner now includes a build timestamp and short git commit SHA, to make it easier to tell a stale cached bundle apart from a fresh one when debugging
Added:
mega<0-9>andmilli<0-9>number formats, andkilo<0-9>for an explicit decimal precision override (kiloalone is unchanged) (#304)
Fixed:
nameoverride not applying on the main row on HA 2026.2+ until an unrelated entity update forced a re-render (#370, #371)format: duration/duration-m/duration-hshowing the literal string "null" for a zero-second value (#240)- Numeric formats (brightness, precision, kilo, invert, position, celsius/fahrenheit conversion) showing the literal string "undefined" for a missing attribute (#225)
invert/positionformats losing decimal precision compared to the unformatted value (#304)- Decimal/currency/precision formatting now delegates to Home Assistant's own official formatting functions when available (HA 2023.9+), fixing a cluster of long-standing formatting bugs (#333, #308, #286, #220, #375, #363, #357, #320)
- Console spammed with errors for monetary sensors using a non-currency unit like "c/kWh" (#324)
- Missing-attribute display showing "undefined" on older HA versions without the official formatting functions
Changed:
- Internal: added a real test suite (100+ tests), CI, and automated release tooling - the built JS file is no longer manually committed per release
- Internal: bumped
lit(2->3) andcustom-card-helpers(1.8->2.0), bundled into the built file, no action needed - Internal: fixed 57 known vulnerabilities (4 critical) in the dev/build toolchain
Fixed:
- Incorrect state icons for HA 2024.2+ (#330, #331)
Added:
- Support default value for missing/hidden entity (#241)
- Fahrenheit to celsius and celsius to fahrenheit formatter (#243)
- Formatting option for duration as hours
duration-h(#263) - Support state object attributes as formatting values (#267)
Changed:
- Support new translation_key for entity states (#289, #290, #293)
Fixed:
- Rendering of secondary info with last-changed/updated attributes (#222)
Fixed:
- Incorrect usage of timestamp formats array (#219)
- Missing number formatting on
positionandinvertoptions (#220)
Added:
- Support
last-changedandlast-updatedstates on additional entities (#101) - Support hiding entities based on specific value(s) or criteria (#218)
- Formatting options
position,invert,kiloandduration-m(#135, #151, #174)
Changed:
- Replace outdated functionality from
custom-cardswith updated equivalents
Fixed:
- Date/time inputs not respecting selected time format (#189)
Fixed:
- Incorrect triggering of
more-infodialog on mobile devices (#217)
Fixed:
- Use correct locale field on entity value formatting (#212)
Added:
- Support hiding main entity name with
name: false(#131, #134, #179) - Locale-aware number formatting of all entity values (#149, #162, #208, #212)
Changed:
- Bundle
Litin card rather than importing from HA (#192) - Simplify and improve handling of entity state display
Fixed:
- Incorrect triggering of
more-infodialog when clicking additional entities (#216, #217)
Added:
- Support
fire-dom-eventcustom action (#173) - Support haptic feedback configuration on actions (#164)
- Support custom entity on
more-infoaction (#161)
Changed:
- Use localization on
attributevalues (#178) - Render disabled toggles on unavailable state (#160)
- Improve state display of
input_dateimeentities (#140)
Fixed:
- Incorrect rendering of
unitwhenfalse(#145)
Fixed:
- Incorrect handling of datetime string values (#142)
Added:
- Handle non-numeric values when using
formatoption (#127) - Support
brightnessas a formatting option (#128) - Support
hide_unavailableoption on secondary info objects (#136)
This release includes a major refactoring of the codebase, but should not contain any (significant) breaking changes. Please report any bugs or issues here.
Added:
- Support showing
attributeinstead of state on main entity (#124) - Support all standard HA
secondary_infooptions (#113, #123) - Support standard
imageoption for entity row (#114) - Support
hold_actionanddouble_tap_action(on entity row only) (#50) - Prevent unnecessary re-rendering with
shouldUpdatefunction (#125) - Option
hide_unavailablenow also supports attributes (#119) - Several external packages and tools to improve developer experience
Changed:
- Major refactoring and improvements of entire codebase
- Use
hui-generic-entity-rowto handle generic parts of row - Move CSS and utility functions to separate files
- Replace some utility methods with equivalents from
custom-card-helpers - Simplify most configuration handling
Removed:
- Custom styles option on secondary info
Fixed:
- Unit not being rendered when
formatoption is set (#117)
Added:
- Support custom styling on state and entity objects (#111, #112)
- Format option
precision<0-9>for value decimal precision (#110) - Option
hide_unavailableto hide entity if unavailable (#77)
Fixed:
- Secondary info name not being rendered when
formatoption is set (#60) - Call correct service when toggling
lockorcoverentity (#32)
Added:
- Format option
durationfor displaying value in seconds ashh:mm:ss(#89) - Display
hui-warningelement when main entity is not available
Changed:
- Row tap action now affects entire row, not only state value (#107)
- Simplify and improve tap action handling
- Remove deprecated handling of zwave state values
Added:
- Support
navigateaction withnavigate_pathon tap actions (#66, #82) - Support for showing entities in a
columninstead of the default row (#98) - Print version information to browser console window (#78)
Changed:
- Improved alignment on state element by removing min-width (#64)
- Tap action mode
urlnow behaves similarly as other HA cards (#66)
Fixed:
- Compatibility issues with HA
0.116(#103, #104)
Fixed:
- State display for entities with
device_class(#74) - Default HA icon when state attribute icon is undefined (#71)
Fixed:
- Remove unsupported optional chaining operator (#54, #56, #57)
Changed:
- Display name/header above additional entity icons (#41)
Added:
- Support
state_colorconfig on additional entity icons (#45) - Haptic feedback on
call-serviceandtoggleactions (#44) - Support entity override on
more-infoaction (#46) - Support
confirmationdialog config ontap_action(#42) - Support
urlaction config ontap_action(#49) - Support
noneaction config ontap_action(#53) - Support any string value as
secondary_info(#51) - Support
formatconfig for date/time values (#43, #47)
Several main configuration options have been changed to better match the default Lovelace cards, as listed below. See README for more info and examples on all possible breaking configuration changes.
Changed:
- Convert additional entity config to
entitieslist instead of named objects (#28) - Merge
infointosecondary_infofor simpler configuration - Rename
hide_statetoshow_statewith defaulttrue - Rename
name_statetostate_header - Move service call configuration to
tap_action(#31)
Added:
- Support custom
tap_actionfor main entity (#31) - Support for
more_info,toggleandcall_serviceactions undertap_action(#32) - Additional entity icons change color based on entity state (#25)
Added:
- Support
state_colorconfig introduced in HA v0.105 (#36)
Fixed:
- Minor incorrect code syntax
Fixed:
- Info name showing as
nullwhen disabled (#27)
Changed:
- More refactoring and cleanup of code
- Make
entityoptional on additional entity objects (#23)
Added:
- Support for calling services on entity click (#6)
Fixed:
- Issue where LitElement has already been declared (#21)
Changed:
- Major refactoring and cleanup of code
- Use LitElement instead of Polymer.Element
Added:
- Support for HA Cast https://cast.home-assistant.io (#20)
- Support for displaying icons for additional entities (#19)
Fixed:
- Incorrect toggle state on climate entities (#18)
Added:
- Default row click-handler, after it was removed in HA v0.101 (#16)
Changed:
- Refactor and improve code
Added:
- Toggle-support for additional entities (#15)
Added:
- Support for an optional tertiary object (#15)
- Optional name/header above the main entity state (#15)
Fixed:
- Attribute showing as unavailable when falsy (#13)
Fixed:
- Incorrect toggle state when unavailable (#8)
Fixed:
- Not possible to hide entity unit value (#7)
Fixed:
- Entity state values not updating correctly (#4)
Fixed:
- Missing entity state values (#3)
Changed:
- Refactor and improve code
Added:
- Support for custom entity/attribute as secondary_info
- Card as default plugin in HACS
Added:
- More-info dialog on click on additional entities
- Support for custom_updater component
Fixed:
- Badge link in README
- Initial release