{"id":13576560,"url":"https://github.com/benct/lovelace-multiple-entity-row","last_synced_at":"2026-08-03T01:00:19.157Z","repository":{"id":41490366,"uuid":"178921037","full_name":"benct/lovelace-multiple-entity-row","owner":"benct","description":"Show multiple entity states and attributes on entity rows in Home Assistant's Lovelace UI","archived":false,"fork":false,"pushed_at":"2026-07-23T00:32:20.000Z","size":1185,"stargazers_count":941,"open_issues_count":42,"forks_count":68,"subscribers_count":17,"default_branch":"master","last_synced_at":"2026-07-23T02:13:04.490Z","etag":null,"topics":["attribute","card","entity","entity-attribute","entity-rows","format","hacs","home-assistant","home-assistant-frontend","lovelace","lovelace-ui","multiple","state"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benct.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2019-04-01T18:16:30.000Z","updated_at":"2026-07-23T00:31:32.000Z","dependencies_parsed_at":"2024-06-12T15:43:18.203Z","dependency_job_id":"0a429b5d-cb5f-43a4-93b7-3b49c5abba91","html_url":"https://github.com/benct/lovelace-multiple-entity-row","commit_stats":{"total_commits":200,"total_committers":11,"mean_commits":"18.181818181818183","dds":"0.10999999999999999","last_synced_commit":"a3302f2778aa9a0b9e88cd829fc68e950da992fc"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/benct/lovelace-multiple-entity-row","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benct%2Flovelace-multiple-entity-row","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benct%2Flovelace-multiple-entity-row/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benct%2Flovelace-multiple-entity-row/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benct%2Flovelace-multiple-entity-row/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benct","download_url":"https://codeload.github.com/benct/lovelace-multiple-entity-row/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benct%2Flovelace-multiple-entity-row/sbom","scorecard":{"id":231749,"data":{"date":"2025-08-11","repo":{"name":"github.com/benct/lovelace-multiple-entity-row","commit":"a3302f2778aa9a0b9e88cd829fc68e950da992fc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.8,"checks":[{"name":"Code-Review","score":2,"reason":"Found 6/23 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v4.5.1 not signed: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/143211366","Warn: release artifact v4.5.0 not signed: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/105370133","Warn: release artifact v4.4.1 not signed: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/55910144","Warn: release artifact v4.4.0 not signed: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/55869534","Warn: release artifact v4.3.2 not signed: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/55790793","Warn: release artifact v4.5.1 does not have provenance: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/143211366","Warn: release artifact v4.5.0 does not have provenance: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/105370133","Warn: release artifact v4.4.1 does not have provenance: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/55910144","Warn: release artifact v4.4.0 does not have provenance: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/55869534","Warn: release artifact v4.3.2 does not have provenance: https://api.github.com/repos/benct/lovelace-multiple-entity-row/releases/55790793"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"12 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T04:58:30.504Z","repository_id":41490366,"created_at":"2025-08-17T04:58:30.504Z","updated_at":"2025-08-17T04:58:30.504Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36213603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-02T02:00:06.915Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["attribute","card","entity","entity-attribute","entity-rows","format","hacs","home-assistant","home-assistant-frontend","lovelace","lovelace-ui","multiple","state"],"created_at":"2024-08-01T15:01:11.416Z","updated_at":"2026-08-03T01:00:19.149Z","avatar_url":"https://github.com/benct.png","language":"JavaScript","funding_links":[],"categories":["Lovelace User Interface","Install from Source","JavaScript","Dashboards"],"sub_categories":["Custom Lovelace UI Cards","Smart Home Automation","Custom Cards"],"readme":"# multiple-entity-row\n\nShow multiple entity states, attributes and icons on entity rows in Home Assistant's Lovelace UI\n\n[![GH-release](https://img.shields.io/github/v/release/benct/lovelace-multiple-entity-row.svg?style=flat-square)](https://github.com/benct/lovelace-multiple-entity-row/releases)\n[![GH-downloads](https://img.shields.io/github/downloads/benct/lovelace-multiple-entity-row/total?style=flat-square)](https://github.com/benct/lovelace-multiple-entity-row/releases)\n[![GH-last-commit](https://img.shields.io/github/last-commit/benct/lovelace-multiple-entity-row.svg?style=flat-square)](https://github.com/benct/lovelace-multiple-entity-row/commits/master)\n[![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=flat-square)](https://github.com/hacs)\n\n**NOTE:** This is not a standalone lovelace card, but a row element for the [entities](https://www.home-assistant.io/lovelace/entities/) card.\n\nRequires Home Assistant **2024.4** or newer.\n\n## Installation\n\nInstall using [HACS](https://hacs.xyz/) (recommended):\n\n[![Open your Home Assistant instance and open this repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=benct\u0026repository=lovelace-multiple-entity-row\u0026category=lovelace)\n\nIf in YAML mode, also add:\n```yaml\nlovelace:\n  resources:\n    - url: /hacsfiles/lovelace-multiple-entity-row/multiple-entity-row.js\n      type: module\n```\n\n_OR_ manually add [multiple-entity-row.js](https://github.com/benct/lovelace-multiple-entity-row/releases/latest/download/multiple-entity-row.js)\nto your `\u003cconfig\u003e/www/` folder and add the following to the `configuration.yaml` file:\n```yaml\nlovelace:\n  resources:\n    - url: /local/multiple-entity-row.js?v=4.7.0\n      type: module\n```\n\nThe above configuration can be managed in the Configuration -\u003e Dashboards -\u003e Resources panel when not using YAML.\n\n## Configuration\n\nThis card produces an `entity-row` and must therefore be configured as an entity in an [entities](https://www.home-assistant.io/lovelace/entities/) card.\n\nA **visual editor** is available: when editing a `custom:multiple-entity-row` row through the entities card's UI editor, the row opens a form-based editor with tabs for the main entity and each additional entity (add / reorder / copy / paste / delete), plus sections for secondary info, state-based icons, per-entity custom CSS, and tap/hold/double-tap actions. Everything below can still be configured in YAML; a few advanced options (`hide_if`, digit-suffixed formats like `precision5`, [templates](#templating)) are YAML-only — a config containing templates opens directly in the code editor.\n\n| Name              | Type          | Default                             | Description                                      |\n| ----------------- | ------------- | ----------------------------------- | ------------------------------------------------ |\n| type              | string        | **Required**                        | `custom:multiple-entity-row`                     |\n| entity            | string        | **Required**                        | Entity ID (`domain.my_entity_id`)                |\n| attribute         | string        |                                     | Show an attribute instead of the state value     |\n| name              | string/bool   | `friendly_name`                     | Override entity friendly name                    |\n| unit              | string/bool   | `unit_of_measurement`               | Override entity unit of measurement              |\n| icon              | string        | `icon`                              | Override entity icon or image                    |\n| icon_color        | string        |                                     | CSS color for the entity icon                    |\n| state_icon        | object        |                                     | Map of state value → icon override               |\n| image             | string        |                                     | Show an image instead of icon                    |\n| toggle            | bool          | `false`                             | Display a toggle (if supported) instead of state |\n| show_state        | bool          | `true`                              | Set to `false` to hide the main entity           |\n| show_state_first  | bool          | `false`                             | Show the main state before other entities        |\n| state_header      | string        |                                     | Show header text above the main entity state     |\n| color             | string        | `state`                             | `state`, `none`, a theme color or a CSS color    |\n| state_color       | bool          | _deprecated_                        | Superseded by `color`                            |\n| column            | bool          | `false`                             | Show entities in a column instead of a row       |\n| wrap              | bool          | `false`                             | Wrap onto multiple lines instead of overflowing  |\n| default           | string        |                                     | Display this value when the state is hidden      |\n| hide_unavailable  | bool          | `false`                             | Hide the state value if unavailable              |\n| hide_if           | object/any    | _[Hiding](#hiding)_                 | Hide the state value if criteria match           |\n| styles            | object        |                                     | Add custom CSS styles to the state element       |\n| format            | string        | _[Formatting](#formatting)_         | Format main state/attribute value                |\n| template          | string        | _[Templating](#templating)_         | Replace the state value with a template result   |\n|                   |\n| entities          | list          | _[Entity Objects](#entity-objects)_ | Additional entity IDs or entity object(s)        |\n| secondary_info    | string/object | _[Secondary Info](#secondary-info)_ | Custom `secondary_info` entity                   |\n|                   |\n| tap_action        | object        | _[Actions](#actions)_               | Custom tap action on entity row and state value  |\n| hold_action       | object        |                                     | Custom hold action on entity row                 |\n| double_tap_action | object        |                                     | Custom double tap action on entity row           |\n\n### Entity Objects\n\nSimilarly as the default HA `entities` card, each entity can be specified by an entity ID string,\nor by an object which allows more customization and configuration.\n\nIf you define entities as objects, either `entity`, `attribute` or `icon` needs to be specified. `entity` is only required if you want\nto display data from another entity than the main entity specified above. `attribute` is necessary if you want to display an entity\nattribute value instead of the state value. `icon` lets you display an icon instead of a state or attribute value\n(works well together with a custom `tap_action`).\n\n| Name              | Type        | Default                     | Description                                                        |\n| ----------------- | ----------- | --------------------------- | ------------------------------------------------------------------ |\n| entity            | string      |                             | A valid entity_id (or skip to use main entity)                     |\n| attribute         | string      |                             | A valid attribute key for the entity                               |\n| name              | string/bool | `friendly_name`             | Override entity friendly name (or `false` to hide)                 |\n| unit              | string/bool | `unit_of_measurement`       | Override entity unit of measurement (or `false` to hide)           |\n| toggle            | bool        | `false`                     | Display a toggle if supported by domain                            |\n| icon              | string/bool | `false`                     | Display default or custom icon instead of state or attribute value |\n| color             | string      | `state`                     | `state`, `none`, a theme color or a CSS color                      |\n| state_color       | bool        | _deprecated_                | Superseded by `color`                                              |\n| icon_color        | string      |                             | CSS color for the entity icon                                      |\n| state_icon        | object      |                             | Map of state value → icon override                                 |\n| default           | string      |                             | Display this value if the entity does not exist or is hidden       |\n| hide_unavailable  | bool        | `false`                     | Hide entity if it is unavailable or does not exist                 |\n| hide_if           | object/any  | _[Hiding](#hiding)_         | Hide entity if its value matches specified value or criteria       |\n| styles            | object      |                             | Add custom CSS styles to the entity element                        |\n| format            | string      | _[Formatting](#formatting)_ | Format entity value                                                |\n| template          | string      | _[Templating](#templating)_ | Replace the entity value with a template result                    |\n| tap_action        | object      | _[Actions](#actions)_       | Custom entity tap action                                           |\n| hold_action       | object      | _[Actions](#actions)_       | Custom entity hold action                                          |\n| double_tap_action | object      | _[Actions](#actions)_       | Custom entity double-tap action                                    |\n\n`default` also shows when the entity is hidden by `hide_unavailable` or `hide_if`, not only when it is missing.\n\n#### Special attributes\n\nSome special data fields from HA can be displayed by setting the `attribute` field to the following values:\n\n| Value           | Description                                                        |\n| --------------- | ------------------------------------------------------------------ |\n| `last-changed`  | Renders the `last_changed` state of the entity if available        |\n| `last-updated`  | Renders the `last_updated` state of the entity if available        |\n\n### Secondary Info\n\nThe `secondary_info` field can either be _any string_ if you just want to display some text,\nan object containing configuration options listed below, or any of the default string values from HA\n(`entity-id`, `last-changed`, `last-updated`, `last-triggered`, `position`, `tilt-position`, `brightness`).\n\n| Name             | Type        | Default                     | Description                                              |\n| ---------------- | ----------- | --------------------------- | -------------------------------------------------------- |\n| entity           | string      |                             | A valid entity_id (or skip to use main entity)           |\n| attribute        | string      |                             | A valid attribute key for the entity                     |\n| name             | string/bool | `friendly_name`             | Override entity friendly name (or `false` to hide)       |\n| unit             | string/bool | `unit_of_measurement`       | Override entity unit of measurement (or `false` to hide) |\n| hide_unavailable | bool        | `false`                     | Hide secondary info if its entity is unavailable         |\n| hide_if          | object/any  | _[Hiding](#hiding)_         | Hide secondary info if its value matches given criteria  |\n| format           | string      | _[Formatting](#formatting)_ | Format secondary info value                              |\n| template         | string      | _[Templating](#templating)_ | Replace the secondary info value with a template result  |\n\n### Actions\n\nThis card supports all the default HA actions. See [Lovelace Actions](https://www.home-assistant.io/lovelace/actions/)\nfor more detailed descriptions and examples.\n\n| Name            | Type        | Default      | Description                                                                                |\n| --------------- | ----------- | ------------ | ------------------------------------------------------------------------------------------ |\n| action          | string      | **Required** | `more-info`, `toggle`, `call-service`, `url`, `navigate`, `fire-dom-event`, `none`         |\n| entity          | string      |              | Override entity-id when `action` is `more-info`                                            |\n| service         | string      |              | Service to call when `action` is `call-service`                                            |\n| service_data    | object      |              | Optional data to include when `action` is `call-service`                                   |\n| url_path        | string      |              | URL to open when `action` is `url`                                                         |\n| navigation_path | string      |              | Path to navigate to when `action` is `navigate`                                            |\n| confirmation    | bool/object | `false`      | Enable confirmation dialog                                                                 |\n| haptic          | string      | `none`       | Haptic feedback (`success`, `warning`, `failure`, `light`, `medium`, `heavy`, `selection`) |\n\n### Formatting\n\nThe `format` option supports the following values:\n\n| Value                 | Type        | Description                                                      |\n|-----------------------| ----------- |------------------------------------------------------------------|\n| relative              | `timestamp` | Convert value to relative time (`5 minutes ago`)                 |\n| total                 | `timestamp` | Convert value to relative time (`5 minutes`)                     |\n| date                  | `timestamp` | Convert timestamp value to date                                  |\n| time                  | `timestamp` | Convert timestamp value to time                                  |\n| datetime              | `timestamp` | Convert timestamp value to date and time                         |\n| brightness            | `number`    | Convert brightness value to percentage                           |\n| percent               | `number`    | Multiply a fraction value by 100 and append `%` (`0.25` -\u003e `25 %`) |\n| duration              | `number`    | Convert number of seconds to duration (`5:38:50`)                |\n| duration-m            | `number`    | Convert number of milliseconds to duration (`5:38:50`)           |\n| duration-h            | `number`    | Convert number of hours to duration (`5:38:50`)                  |\n| invert                | `number`    | Convert number from positive to negative or vice versa           |\n| kilo / kilo\u003c0-9\u003e      | `number`    | Divide number value by 1,000 (ex. `1500` -\u003e `1.5`)               |\n| mega / mega\u003c0-9\u003e      | `number`    | Divide number value by 1,000,000 (ex. `2500000` -\u003e `2.5`)        |\n| milli / milli\u003c0-9\u003e    | `number`    | Multiply number value by 1,000 (ex. `0.2` -\u003e `200`)              |\n| position              | `number`    | Reverses a position percentage (ex. `70%` open -\u003e `30%` closed)  |\n| precision\u003c0-9\u003e        | `number`    | Set decimal precision of number value (`precision3` -\u003e `18.123`) |\n| celsius_to_fahrenheit | `number`    | Converts a Celsius temperature to its Fahrenheit equivalent      |\n| fahrenheit_to_celsius | `number`    | Converts a Fahrenheit temperature to its Celsius equivalent      |\n| upper                 | `string`    | UPPERCASE the value                                              |\n| lower                 | `string`    | lowercase the value                                              |\n| capitalize            | `string`    | Capitalize the first letter of the value                         |\n| title                 | `string`    | Title Case Each Word Of The Value                                |\n\n`kilo`/`mega`/`milli` on their own default to a maximum of 2 decimal places. Suffix a digit (`kilo3`, `mega1`, `milli0`, ...) to request an exact decimal precision instead, the same way `precision\u003c0-9\u003e` does.\n\nNone of `kilo`/`mega`/`milli`/`invert`/`position` change the displayed unit — they only scale or transform the number. If you want the unit label to match (e.g. `W` -\u003e `kW`), set `unit:` explicitly alongside the format:\n\n```yaml\n- entity: sensor.power_usage\n  type: custom:multiple-entity-row\n  format: kilo\n  unit: kW\n```\n\nAn explicit `unit:` (or `unit: false`) makes the card format the value itself instead of delegating to HA's state formatter — necessary because the formatter re-applies its own unit for integrations that translate units (e.g. Analytics Insights). HA's locale rules and the entity's display-precision setting still apply, but formatter renderings driven by the entity's own unit are lost: notably, `device_class: monetary` entities lose HA's currency styling (`$4.00`) under an override, so leave `unit` unset on currency entities.\n\nNumeric formats can be **combined** comma-separated — the value flows through each in turn and is formatted once at the end. An explicit `precision\u003cN\u003e` controls the decimals wherever it appears; otherwise the last format's own default applies:\n\n```yaml\nformat: invert, precision3   # -18.123\nformat: kilo, precision1     # 1500 -\u003e 1.5\nformat: invert, kilo3        # 1500 -\u003e -1.500\n```\n\nOnly number-transforming formats compose (`brightness`, `percent`, `invert`, `position`, `kilo`/`mega`/`milli`, `precision`, temperature conversions) — durations, timestamps and text transforms cannot be combined. In the visual editor, pick **Custom…** in the Format dropdown to enter a combined format.\n\n### Hiding\n\nThe `hide_if` option can be used to hide an entity if its state or attribute value matches the specified criteria.\nIt can be used directly with a string, number or boolean value (i.e. `hide_if: 'off'`), as a list with several values,\nor as an object with one or more of the options listed below.\n\n| Name      | Type     | Description                                                     |\n| --------- | -------- | --------------------------------------------------------------- |\n| above     | number   | Hidden if entity _number_ value is above the specified value    |\n| below     | number   | Hidden if entity _number_ value is below the specified value    |\n| value     | list/any | Hidden if value matches specified value or any value in a list  |\n| entity    | string   | Evaluate the criteria against this entity instead of its own    |\n| attribute | string   | Evaluate the criteria against this attribute's value            |\n| template  | string   | Hidden if the [template](#templating) renders true              |\n\nFor example, only show the alarm exit-state sensor while the alarm is armed:\n\n```yaml\n- type: custom:multiple-entity-row\n  entity: switch.dsc_armed_away\n  toggle: true\n  entities:\n    - entity: sensor.dsc_exit_state\n      hide_if:\n        entity: switch.dsc_armed_away\n        value: 'off'\n```\n\n`hide_if` and `hide_unavailable` at the top level hide the main entity's state value (the row itself stays visible); `default` is shown in its place when set.\n\n### Templating\n\nDisplay options accept Jinja **templates**, rendered by Home Assistant server-side and updated live whenever the entities they reference change. Any supported option whose value contains `{{ }}` or `{% %}` is treated as a template: `name`, `icon`, `icon_color`, `color`, `secondary_info` text, `hide_if`, and a `template` option that replaces the displayed value entirely. The `entity` variable holds the owning entity's id.\n\n```yaml\n- type: custom:multiple-entity-row\n  entity: sensor.next_ferry\n  name: \"Next ferry {{ state_attr(entity, 'time') }}\"\n  hide_if: \"{{ is_state('binary_sensor.ferry_service', 'off') }}\"\n  entities:\n    - entity: sensor.travel_time\n      name: Drive\n      template: \"{{ states(entity) | round(0) }} min\"\n```\n\nSee **[docs/templating.md](docs/templating.md)** for the full documentation: supported options, value-template semantics, hide conditions, loading/error behavior, and more examples. Templated rows are YAML-only — the visual editor switches to the code editor when a config contains templates.\n\n### Icon styling\n\n`color` follows Home Assistant's icon color option and accepts `state` (color by entity state), `none` (never color), a theme color name (`red`, `deep-purple`, `accent`), or any CSS color. It applies to the main row icon and to additional entities rendering an icon. The default is `state`, matching the entities card:\n\n```yaml\n- entity: light.kitchen\n  type: custom:multiple-entity-row\n  color: state\n  entities:\n    - entity: binary_sensor.back_door\n      icon: true\n      color: red\n    - entity: sensor.humidity\n      icon: true\n      color: none\n```\n\nTheme color names and `state` require Home Assistant 2026.8 or newer for the main row icon; on older versions use `icon_color` there. `state_color` is still accepted as a deprecated alias — `true` means `color: state`, `false` means `color: none`.\n\n`icon_color` accepts any CSS color value (`red`, `#ff0000`, `var(--my-color)`) and applies it to the entity's icon **regardless of state**, which is the one thing `color` cannot express. Setting it also switches that entity's default to `color: none`, so the two do not fight; an explicit `color` still wins. `state_icon` maps state values to icon overrides, taking precedence over `icon` when the current state matches:\n\n```yaml\n- entity: binary_sensor.front_door\n  type: custom:multiple-entity-row\n  icon_color: 'var(--accent-color)'\n  state_icon:\n    'on': mdi:door-open\n    'off': mdi:door-closed\n  entities:\n    - entity: binary_sensor.back_door\n      icon: true\n      icon_color: red\n```\n\n## Examples\n\n![multiple-entity-row](https://raw.githubusercontent.com/benct/lovelace-multiple-entity-row/master/example.png)\n\n```yaml\ntype: entities\nentities:\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: One entity\n    secondary_info: last-changed\n    entities:\n      - sensor.bedroom_max_temp\n\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Two entities\n    secondary_info: last-changed\n    entities:\n      - sensor.bedroom_min_temp\n      - sensor.bedroom_max_temp\n\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Three entities\n    secondary_info: last-changed\n    entities:\n      - entity: sensor.bedroom_humidity\n        name: humidity\n      - sensor.bedroom_min_temp\n      - sensor.bedroom_max_temp\n\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Custom secondary_info\n    secondary_info:\n      attribute: battery_level\n      name: Battery\n      unit: '%'\n\n  - type: section\n  - entity: vacuum.xiaomi_vacuum_cleaner\n    type: custom:multiple-entity-row\n    name: Attributes\n    entities:\n      - attribute: battery_level\n        name: Battery\n        unit: '%'\n      - attribute: status\n        name: Status\n\n  - entity:  sensor.lovelace_multiple_entity_row\n    type: custom:multiple-entity-row\n    name: Attributes (show_state=false)\n    show_state: false\n    entities:\n      - attribute: stargazers\n        name: Stars\n      - attribute: open_issues\n        name: Issues\n      - attribute: open_pull_requests\n        name: PRs\n\n  - type: section\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Hide headers (name)\n    entities:\n      - entity: sensor.bedroom_min_temp\n        name: false\n      - entity: sensor.bedroom_max_temp\n        name: false\n\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Main state header\n    state_header: current\n    entities:\n      - sensor.bedroom_min_temp\n      - sensor.bedroom_max_temp\n\n  - type: section\n  - entity: switch.livingroom_tv\n    type: custom:multiple-entity-row\n    name: Toggle\n    toggle: true\n    state_color: true\n    entities:\n      - entity: sensor.livingroom_tv_power\n        name: Power\n      - entity: sensor.livingroom_tv_power_total\n        name: Total\n\n  - entity: switch.livingroom_tv\n    type: custom:multiple-entity-row\n    name: Multiple toggles\n    state_header: main\n    toggle: true\n    state_color: true\n    entities:\n      - entity: switch.livingroom_light\n        name: toggle1\n        toggle: true\n      - entity: switch.livingroom_light_2\n        name: toggle2\n        toggle: true\n\n  - type: section\n  - entity: light.living_room\n    type: custom:multiple-entity-row\n    name: Toggle with hold_action\n    state_header: Livingroom\n    toggle: false\n    hold_action:\n      action: toggle\n    entities:\n      - entity: light.nightstand\n        name: Bedroom\n        tap_action:\n          action: toggle\n\n  - entity: light.living_room\n    type: custom:multiple-entity-row\n    name: Icons with tap_action\n    secondary_info: last-changed\n    entities:\n      - entity: light.living_room\n        icon: mdi:palette\n      - icon: mdi:lightbulb-off-outline\n        state_color: true\n        tap_action:\n          action: call-service\n          service: light.turn_off\n          service_data:\n            entity_id: light.living_room\n      - icon: mdi:lightbulb-outline\n        state_color: true\n        tap_action:\n          action: call-service\n          service: light.turn_on\n          service_data:\n            entity_id: light.living_room\n          confirmation:\n            text: 'Are you sure?'\n\n  - type: section\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Customization\n    icon: mdi:fire\n    unit: °F\n    secondary_info: last-changed\n    entities:\n      - entity: sensor.bedroom_max_temp\n        name: custom name\n        unit: temp\n\n  - type: section\n  - entity: sensor.bedroom_temperature\n    type: custom:multiple-entity-row\n    name: Styles\n    styles:\n      width: 80px\n      text-align: right\n    secondary_info:\n      attribute: battery_level\n      styles:\n        font-weight: bold\n    entities:\n      - entity: sensor.bedroom_max_temp\n        styles:\n          width: 80px\n          text-align: left\n```\n\n### Theming\n\nThe color of entity headers (the small name above each value) can be overridden with the\n`--multiple-entity-row-header-color` CSS variable, either from a theme or per entity via `styles`:\n\n```yaml\nentities:\n  - entity: sensor.bedroom_max_temp\n    styles:\n      '--multiple-entity-row-header-color': red\n```\n\n## Development\n\n```bash\nyarn install\nyarn build      # lint + type-check, run tests, then bundle multiple-entity-row.js\nyarn test       # run the unit test suite\nyarn coverage   # run tests with a coverage report\n```\n\nThe codebase is migrating incrementally from JavaScript to TypeScript: `.ts` and `.js` coexist (`allowJs`), Babel strips types during bundling, and `tsc --noEmit` type-checks as part of `yarn lint`. New code should be TypeScript; existing modules migrate opportunistically when touched.\n\nTo test changes against a real Home Assistant instance, a disposable local testbed is available via Docker:\n\n```bash\nyarn ha:up      # first run also creates .dev/ha-config from the example\n# → HA boots at http://localhost:8130 (~1 min on first start)\n# → onboard a throwaway user, then add a card of type: custom:multiple-entity-row\n```\n\nAfter editing source and running `yarn build`, hard-refresh the browser to pick up the rebuilt bundle. See `yarn ha:down`, `yarn ha:logs`, and `yarn ha:reset` for managing the testbed.\n\n## My cards\n\n[xiaomi-vacuum-card](https://github.com/benct/lovelace-xiaomi-vacuum-card) |\n[multiple-entity-row](https://github.com/benct/lovelace-multiple-entity-row) |\n[github-entity-row](https://github.com/benct/lovelace-github-entity-row) |\n[battery-entity-row](https://github.com/benct/lovelace-battery-entity-row) |\n[~~attribute-entity-row~~](https://github.com/benct/lovelace-attribute-entity-row)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenct%2Flovelace-multiple-entity-row","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenct%2Flovelace-multiple-entity-row","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenct%2Flovelace-multiple-entity-row/lists"}