chart
Dashy vault/Reference/chart
Reference/chart.md

chart: a number over time

Properties
code block
chartdashy-chart
keys
17 on the block, 4 on each series
checked on
Dashy 1.5.2

A number over time: a line or bars per day, week or month, for one property or a few side by side.

Obsidian Charts turned on?

With Obsidian Charts turned on, Dashy leaves the chart block to it. Write dashy-chart instead: same keys, always Dashy.

From the demo vault

chart
```chart
source: Diary
field: run_km
type: bar
bucket: week
unit: km
goal: 30
```
renders as
Weekly bars of running distance over half a year, a dashed goal line at 30 km, the current week drawn lighter

A minimal block

The shortest config worth pasting. Change the folder and the property names to yours.

chart
```chart
source: 01-Areas/Personal/Diary
field: sleep_score
agg: avg
```

Keys on the block

KeyWhat it doesTypeDefault
sourcealso folder, from folder; includes nested ones text none
tag tag, with or without the hash text none
where a condition like year = 2026, rating >= 4, tags contains books, or several that must all hold: joined with and (year = 2026 and rating >= 4) or written as a list ([year = 2026, "rating >= 4"]). The field name may be a dotted path into a nested property, like health.sleep > 70. or is not supported; quote a value holding the word and or or. One unreadable condition drops the whole filter with a warning, and the chart is drawn unfiltered text or list none
date_field a date frontmatter property to read instead of the note name: 2026-03-02 or 2026-03-02T10:30, or a dotted path into a nested property like meta.date text none
fieldalso property, prop required unless series is set or agg is count, and not allowed together with series. One numeric frontmatter property, or a checkbox (ticked is 1, unticked 0); dotted for a nested one like health.sleep. A duration string like 5h 58min or 7:30 counts as minutes, and tooltips, the y axis and the goal label then read 5h 58m; a field mixing durations and plain numbers counts both as minutes, shows plain numbers and warns. One property only: a list here is an error, write series for several lines, or series: [{field: [a, b]}] to fold several properties into one line. A field missing from the selection, holding text rather than a number, or holding numbers only on undated notes errors and says which text none
series several lines, or groups of bars, instead of one field: [{field, agg, label, color}], at most 4. Not used together with the block's own field. Every series is its own line, or its own bar beside the others, never stacked, and all of them share one y axis list none
aggalso aggregate how the values landing in one bucket collapse into one number: sum avg min max count. A bucket's values are every value the field(s) hold on every note dated in it, so two notes on one day both count and avg is over values, not days: the same number a stats card over that week shows. sum of a checkbox is the number of ticked days. count needs no field and counts the dated notes in the bucket; next to a field it warns and ignores it. With series, each entry may override it. An unknown value is an error text sum
bucket day, week or month. A week starts on the first day of the interface language, Dashy's own when one is picked in its settings, otherwise Obsidian's: Sunday in English, Monday in most European languages; a month starts on the 1st. An unrecognised value warns and falls back to day text day
range the window, ending today: week, month, year (1 January of the current year to today) or a rolling count of days like 90d. Defaults to 30d for day, 182d for week and 365d for month. The window's start moves back to the start of the bucket it falls in, so only the last bucket can be partial. Above 400 buckets only the most recent 400 are drawn, and a window of a single bucket is drawn too; both warn. An unrecognised value warns and falls back to the default text or number none
type line or bar, for the whole block. Bars always start at zero and hang below it for negative values; a line runs from its data's own minimum to its maximum. An unrecognised value warns and falls back to line text line
labelalso name the single series' name, in the caption and the tooltip; defaults to the field name. With series, each entry carries its own, and this one warns text none
coloralso colour blue green cyan purple pink orange red gray, or #rrggbb. Ignored, with a warning, when series is set: each series carries its own colour instead text blue
unit a suffix in the tooltip, the goal label and the top y axis label: km, %, steps. Ignored, with a warning, for a series of durations, which carry their own units text none
precision decimal places in the tooltip, the goal label and the y axis labels, 0 to 6; by default a whole number stays whole and a fraction gets one decimal; no effect on durations number none
goalalso target a dashed horizontal reference line with its value, also named in the legend; the y axis always stretches to show it. A duration like 8h or 7:30 works too, read as minutes, and a plain number against durations means minutes. Anything else warns and is ignored number or text none
title a custom heading instead of the automatic one text none

Keys on each series

Each entry under items (here series) is one series.

KeyWhat it doesTypeDefault
field requiredalso property, prop this series' numeric frontmatter property, or a checkbox; dotted for a nested one. A list, like [mood_am, mood_pm], folds several properties into this one series. Durations count as minutes, the same as the block's own field. Not needed with agg: count text or list none
aggalso aggregate this series' own aggregate, overriding the block's agg: sum avg min max count text none
labelalso title, name name shown in the legend and the tooltip. Defaults to the field name(s), or notes for count text none
coloralso colour blue green cyan purple pink orange red gray, or #rrggbb. Without one, the next free colour from the palette, skipping colours other series already claimed text none

Keys from other blocks

Written here by habit, these get a message naming the key this block uses instead.

  • layers is series here
  • per_day is agg here
  • period is range here
  • trend is range here

How it behaves

  • With the Obsidian Charts plugin enabled, write the block as dashy-chart: Dashy then leaves the chart language to Charts, so a chart block is drawn by Charts. dashy-chart takes the same keys and always works. Turned Charts on while Obsidian was open? Restart Obsidian once.
  • A note's date is its name, as long as it starts with YYYY-MM-DD, unless date_field names a property instead. Notes without a date are left out, and a selection where none has one warns. Notes dated after today are never drawn.
  • A week starts on the locale's first day, the same day period: week and the heatmap grid use, and a week's tooltip names it: Week of Sun Sep 27, 2026.
  • A bucket with no data is a gap in the line and no bar, never a zero: a missing day is not a day of zero. An unticked checkbox (false) is a real 0, and count over an empty bucket is a plain 0.
  • avg is over values, not days: two notes on one day both count, so a week's average matches a stats card with agg: avg and period: week. sum of a checkbox counts the ticked days.
  • The last bucket is usually still running (this week, this month): it is drawn lighter, or as a hollow point on a line, and its tooltip ends with so far.
  • A list in the block's own field is an error rather than a guess: write series: for several lines, or series: [{field: [a, b]}] to fold several properties into one.
  • Not in this block, on purpose: pie, doughnut, radar and scatter charts, stacked bars, cumulative sums, a second y axis, smoothing and trend lines, zoom, tick and axis settings, annotations, and a height key (the height is the --dashy-chart-height CSS variable, which a CSS snippet can change). Steps and sleep on one chart are two chart blocks.