← All docs

JSON status card

The JSON status card is the power-user escape hatch. It renders a local JSON file as a card of label/value rows with OK, warn and error states. Point any script at the file and its output lands on your desktop.

It is a local widget: it reads a file on your machine and makes no network connection of its own.

What you’ll need

  • A local JSON status file. Anything that can write a file can feed this widget — a scheduled PowerShell script, a Python cron job, a Home Assistant automation, curl piped through jq.

Set the file path in the widget’s ⚙ panel.

The file format

The root must be a JSON object (not an array). Only items is required to show anything:

{
  "title": "Backup status",
  "updatedAt": "2026-07-25T09:12:00Z",
  "items": [
    { "label": "Last run", "value": "09:12 today" },
    { "label": "Duration", "value": 384, "format": "duration" },
    { "label": "Archive", "value": 5398236160, "format": "bytes" },
    { "label": "Failed sets", "value": 2, "severity": "warn" },
    { "label": "Offsite copy", "value": "stale", "severity": "error" }
  ]
}
FieldWhereNotes
titleroot, optionalCard heading. Ignored if not a string.
updatedAtroot, optionalShown as the freshness stamp.
itemsrootArray of rows. Up to 20 are rendered; the rest are ignored.
labelitem, requiredRow label. A row missing label or value is skipped.
valueitem, requiredString or number.
severityitem, optionalwarn or error tone the row. Anything else is treated as normal.
formatitem, optionalPresentation template — see below.

Formatting values

format lets a script emit raw numbers and leave presentation to the widget, which is usually what you want — it keeps the script free of display logic, and each row formats independently.

formatvalueRenders
bytes53982361605.0 GB
duration3846m 24s
percent0.6262%
{v}%6262%
{v:.1f} GB7.827.8 GB

{v} substitutes the value; {v:.1f} rounds to that many decimals.

A format that isn’t recognised, or a numeric format applied to a non-numeric value, falls back to showing the raw value. A formatting mistake in a status file degrades to plain text — it never blanks the card.

Notes

  • Write the file atomically if your script runs often: write to a temporary name and rename it into place, so the widget never reads a half-written file.
  • Invalid JSON leaves the previous card on screen rather than clearing it.

A worked end-to-end example lands with the public beta.