A flexible multi-field text card for Home Assistant dashboards.
Each field is independently styled and supports
Markdown, HTML, and live Jinja2 templates.
Introduction β’ Key Features β’ Installation β’ Configuration β’ License
Chrono Markdown Card is a drop-in replacement and upgrade for Home Assistant's built-in Markdown card. Instead of a fixed title and content structure, it renders any number of independently styled text fields stacked vertically inside a single card. Each field supports Markdown, raw HTML, and live Jinja2 templates β so any configuration that works in the standard Markdown card works here too, with zero migration effort.
The card matches the default appearance of HA's Markdown card exactly out of the box, while adding a full visual editor with per-field typography, color, border, and spacing controls that the standard card simply does not offer.
The card renders any number of text fields stacked vertically. Each field is configured independently β font size, weight, color, alignment, line height, background, border, and padding are all per-field settings. Add as many fields as you need; remove them just as easily via the visual editor.
Each field's content is evaluated as a Jinja2 template (via Home Assistant's WebSocket connection) and then rendered through the same Markdown engine used by HA's own Markdown card. Raw HTML is fully supported alongside Markdown in the same content field. Any content that works in HA's standard Markdown card works here without modification.
Every field has its own typography controls (font size in em, font weight, text alignment, line height), color controls (text color and background color), border controls (width, style, color, radius), and padding controls (top, bottom, left, right). Styling is applied cleanly without inline style conflicts β empty values fall back to Home Assistant's active theme automatically.
All default colors respect Home Assistant's active theme via CSS custom properties. Card background, border color, and text color all follow the theme. Switching themes updates the card instantly without any configuration changes.
The card is designed as a drop-in replacement. Copy the content from any existing Markdown card, paste it into a Chrono Markdown Card field, and it renders identically. No syntax changes, no reformatting required.
Every property β card-level and per-field β is configurable through the Lovelace UI editor. YAML editing is never required. Fields can be added, removed, shown, and hidden directly from the editor.
- Open HACS in your Home Assistant instance.
- Navigate to Frontend and click the three-dot menu in the top right corner.
- Select Custom repositories.
- Enter
https://github.com/rob-vandenberg/chrono-markdown-cardand select Lovelace as the category. - Click Add. The repository will appear in the list.
- Search for
Chrono Markdown Cardand click Download. - Reload your browser.
- Download
chrono-markdown-card.jsfrom the latest release. - Copy it to your Home Assistant
config/www/folder. - In Home Assistant, go to Settings β Dashboards β Resources.
- Click Add Resource.
- Enter
/local/chrono-markdown-card.jsas the URL and select JavaScript Module. - Click Create and reload your browser.
- Open HACS β Frontend.
- Find Chrono Markdown Card and click the three-dot menu.
- Select Remove.
- Reload your browser.
- Delete
chrono-markdown-card.jsfromconfig/www/. - Remove the resource entry from Settings β Dashboards β Resources.
These properties apply to the entire card container.
| Property | Type | Default | Description |
|---|---|---|---|
background_color |
string | HA theme | Card background color. Empty = HA theme default. |
padding_top |
number | 8 |
Inner padding top in px |
padding_bottom |
number | 8 |
Inner padding bottom in px |
padding_left |
number | 8 |
Inner padding left in px |
padding_right |
number | 8 |
Inner padding right in px |
border_color |
string | HA theme | Border color. Empty = HA theme default. |
border_width |
number | 1 |
Border width in px |
border_radius |
number | 12 |
Border radius in px |
border_style |
string | solid |
Border style (solid, dashed, dotted, none, or any valid CSS value) |
Each entry in the fields array has the following properties.
| Property | Type | Default | Description |
|---|---|---|---|
name |
string | '' |
Editor-only label shown in the field panel header. Not rendered in the card. |
show |
boolean | true |
Show or hide this field |
line_breaks |
boolean | false |
When enabled, a single Enter key creates a new line in the rendered output. When disabled, two Enter keys are required (standard Markdown paragraph behaviour). |
content |
string | '' |
Field content. Supports Markdown, HTML, and Jinja2 templates. |
color |
string | HA theme | Text color. Empty = HA theme default (--primary-text-color). |
font_size |
number | 1.0 |
Font size in em. Markdown headings (#, ##, etc.) scale proportionally relative to this value. |
font_weight |
number | 400 |
Font weight |
line_height |
number | 1.4 |
Line height (unitless multiplier) |
text_align |
string | left |
Text alignment (left, center, right, or any valid CSS value) |
background_color |
string | '' |
Field background color. Empty = transparent. |
padding_top |
number | 8 |
Padding top in px |
padding_bottom |
number | 8 |
Padding bottom in px |
padding_left |
number | 8 |
Padding left in px |
padding_right |
number | 8 |
Padding right in px |
border_color |
string | HA theme | Border color. Empty = HA theme default. |
border_width |
number | 0 |
Border width in px |
border_radius |
number | 12 |
Border radius in px |
border_style |
string | solid |
Border style |
type: custom:chrono-markdown-card
fields:
- name: Title
show: true
content: "## Today's Weather"
font_size: 1.2
text_align: center
- name: Content
show: true
line_breaks: true
content: >-
The temperature is **{{ states('sensor.outdoor_temperature') }}Β°C**
with {{ states('sensor.weather_condition') }} skies.
font_size: 1.0
text_align: leftGNU Affero General Public License v3.0 (AGPL-3.0)
This project is licensed under the AGPL-3.0. You are free to use, modify, and distribute this software, provided that any modifications or derivative works that are made available β including over a network β are also distributed under the same license.
Full license text: https://www.gnu.org/licenses/agpl-3.0
Copyright Β© 2026 Rob Vandenberg. All rights reserved.
If you find this project useful and wish to support its continued development, please consider a contribution.
