README file from
GithubDashy
Charts, streaks, heatmaps and goals from the properties in your daily notes. Each block is a few lines of YAML. No JavaScript, no Dataview, and it runs on your phone.
Website · Every block and key · Guides · Changelog
That page is one note and three blocks: stats, chart and heatmap.
Install
Settings → Community plugins → Browse → search for Dashy → Install → Enable.
Open a note, run Dashy: Insert block from the command palette, pick a block. A working example lands at the cursor, already pointed at a folder and a property from your own vault.
A habit tracker in two blocks
Tick gym: true in a daily note's Properties. Paste this into any other note:
```stats
columns: 4
items:
- { label: Gym days, source: Diary, field: gym, agg: sum, icon: 🏋️ }
- { label: Longest gym streak, source: Diary, field: gym, agg: streak, unit: days, icon: 🔥 }
- { label: Gym this week, source: Diary, field: gym, agg: sum, period: week, icon: 📅, compare: true, better: up }
- { label: Gym this month, source: Diary, field: gym, agg: sum, period: month, icon: 🗓 }
```
```heatmap
source: Diary
field: gym
color: orange
title: Gym
```
Diary is the folder your daily notes live in, and each note's name starts with its date.
A ticked box counts as 1. period: week is always the current week, and compare: true sets it
against the same days of last week. The step-by-step version, with the same tracker in Tracker
and dataviewjs next to it: a habit tracker without Dataview.
Seven blocks
Every block reads frontmatter through Obsidian's own metadata cache. Each name below opens its page: a picture, an example, every key.
stats: number cards. Count, sum, average, best and current streak, this week against last.chart: a line or bars of a number by day, week or month, with a goal line.heatmap: a year of days coloured by a number or a checkbox, several habits on one grid.progress: bars towards a goal, like 24 books this year.today: today's date and links to the daily, weekly and monthly notes.tiles: link tiles into the vault, with live note counts.countdown: days until a race, a holiday, a review.
Durations read the way your watch writes them: sleep: 7h 38min counts as a number and comes
back as 7h 38m. Every
block redraws when a note changes and takes its colours from your theme. With Obsidian Charts
turned on, write the chart block as dashy-chart.
When the config is wrong, the block says so in the note: a typo gets a "did you mean", a broken YAML line gets its line number.
Guides
One problem per page, with the notes, the block, and the Tracker or dataviewjs version beside it:
- A habit tracker without Dataview
- A habit streak that skips weekends
- Two activities on one heatmap
- A weekly chart without Tracker
Your AI agent can write these blocks
Two buttons in Dashy's settings write a reference of every block and key: a Claude Code skill,
or an AGENTS.md section for Cursor, Codex and the rest. Both are generated from the schema the
plugin validates against. Then ask for "weekly distance as bars with a 40 km goal and my current
streak". More on the site.
What it leaves out
Pie, radar and scatter charts and stacked bars (Obsidian Charts),
tables and queries (Bases, Dataview), kanban, tasks. It reads frontmatter only, not inline
key:: value fields or tags with values. If that stops you, say what you tried.
Questions
No. Dashy reads frontmatter from Obsidian's own metadata cache. Nothing else to install.
Yes. A tap on a heatmap cell or a chart bar shows its value, and a second tap opens the note.
From its name, when it starts with YYYY-MM-DD: 2026-01-05 Monday counts. Otherwise add
date_field to the block and keep the date in a property.
English, Russian, German, French and Spanish, following Obsidian or picked in the settings.
Corrections to a translation are welcome: copy src/i18n/en.ts and translate the values.
Bugs and ideas
The settings tab has a row for each. It opens a GitHub issue with your plugin and Obsidian versions filled in. Or go straight to the issue tracker.
Development
npm install
npm test # vitest, with coverage gates
npm run lint # eslint + eslint-plugin-obsidianmd
npm run typecheck
npm run build # main.js + styles.css
npm run dev:vault # build into a test vault and watch
npm run build:skill # regenerate the agent skill from the schema
npm run build:reference # regenerate the site's block reference
npm run preview shows every block in every state in a browser. npm run e2e runs the suite
against a real Obsidian, and npm run capture retakes the pictures. Logic lives in src/core/,
which imports neither Obsidian nor the DOM. Block keys live in
src/blocks/schema.json; the agent skill and the site's
reference pages are generated from it. Design notes: docs/SPEC.md.
License
MIT © Dmitriy Yurkin