Dashy

approvedunreviewed

by dimagious

Dashboard blocks for your notes: tiles, number cards, progress bars, a day row, countdowns and a year heatmap. Configured in YAML, no JavaScript.

★ 1 stars↓ 767 downloadsUpdated 4d agoMIT

Dashy

Dashy (dashsidian): describe the dashboard you want, and your AI agent builds it in your Obsidian note

Downloads Latest release Stars

Describe the dashboard you want. Your AI agent builds it in your note.

Charts, streaks, heatmaps and goals from your daily notes' properties. Plain YAML you can read and edit. No JavaScript, no Dataview, works on your phone.

Website · Build one with your agent · Every block and key · Guides · Changelog

Left, a request to an AI agent: a running dashboard with weekly distance as bars against a 40 km goal, this week's distance, the current streak and a countdown to a marathon on May 17. Right, the Obsidian note it wrote: a countdown to the marathon, two cards for this week's distance and the current streak, and weekly bars under a dashed 40 km line.

One request on the left, the note it wrote on the right: three blocks, countdown, stats and chart, in a demo vault. You open the note and check; a block that can't draw says why.

Install

Settings → Community plugins → Browse → search for Dashy → Install → Enable.

Then install the agent skill from Dashy's settings or the command palette, or run Dashy: Insert block to write a block yourself.

Ask your agent

In Dashy's settings, under AI agent skill, the Install button on Skill file in this vault writes a skill for Claude Code, and the one on AGENTS.md in the vault root writes the same for Codex, Cursor and other agents. Once a file is written, its button reads Update: press it after updating Dashy. Open the vault in your agent and say what you want to see. It reads your property names and folders, writes the blocks, and you open the note to check.

Count the books I finished this year against a goal of 24.

The agent first finds how a book note says when you finished it, here a finished date property in the notes under Books, and writes:

```progress
source: Books
date_field: finished
period: year
items:
  - { label: Books this year, agg: count, goal: 24 }
```

Setup, six prompts to copy, and what to do when a block shows an error: build an Obsidian dashboard with an AI agent.

Or write it yourself: a habit tracker in two blocks

Tick gym: true in a daily note's Properties. Paste this into any other note:

```stats
columns: 4
source: Diary
items:
  - { label: Gym days, field: gym, agg: sum, icon: 🏋️ }
  - { label: Longest gym streak, field: gym, agg: streak, unit: days, icon: 🔥 }
  - { label: Gym this week, field: gym, agg: sum, period: week, icon: 📅, compare: true, better: up }
  - { label: Gym this month, field: gym, agg: sum, period: month, icon: 🗓 }
```

```heatmap
source: Diary
field: gym
color: orange
title: Gym
```
Four cards: gym days, longest streak, this week against last week, this month; below them a year of days with the gym days in orange

Diary is the folder your daily notes live in, and each note's name starts with its date. Written once at the top, it applies to every card; a card with its own source reads that folder instead. 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, or one line of numbers for a page header. Count, sum, average, best and current streak, this week against last or against your usual level.
  • progress: bars towards a goal, like 24 books this year.
  • countdown: days until a race, a holiday, the next birthday, a date kept in a note, or the soonest one in a folder of notes.
  • today: today's date, an optional live clock, and links to the daily, weekly and monthly notes.
  • tiles: link tiles into the vault, with live note counts.
  • heatmap: a year of days coloured by a number or a checkbox, several habits on one grid, or a month as a calendar with a dot under every day you kept a habit.
  • chart: a line or bars of a number by day, week, month or year, with a goal line.

A weekly or monthly review counts its own period: period: note on stats and progress, range: note on chart and heatmap, in a note named 2026-W40 or 2026-10, however late you open it. The same keys take a period written out, 2026-Q4, or two dates, { from: 2026-09-01, to: 2026-09-30 }. Step by step: a weekly review without Dataview.

Weekly bars of running distance over half a year, a dashed goal line at 30 km, the current week drawn lighter

Dates read the way your daily notes are named: 2026-10-05, or 05.10.2026 in the day format set in Daily notes or Periodic Notes, or in one a block names with date_format: DD.MM.YYYY. Durations read the way your watch writes them: sleep: 7h 38min counts as a number and comes back as 7h 38m. Race times written to the second, time: 2:16:32, come back to the second as a clock; H:MM always means hours and minutes, so write a 5 km time as 0:18:51. 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.

Messages inside a note: an unknown key with a suggestion, a missing field, an unknown aggregate, a filter using or, and a chart key borrowed from another block

Guides

One problem per page, with the notes, the block, and the Bases, Tracker or dataviewjs version beside it:

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

What does my agent see, and where does it go?

Your agent reads the notes it opens and sends them to its model provider, as it does with any file it works on. Check what your agent is allowed to open before you point it at a vault with private notes. Dashy itself sends nothing anywhere: it makes no network requests of its own, and it writes the skill files only when you press their buttons. The one thing a block loads from the internet is a tile image you set to an https:// address, the way Obsidian loads an image in a note. If you'd rather not open the vault at all, Copy markdown puts the skill on the clipboard, and you paste it into a chat with the frontmatter of a few notes.

Do I need an AI agent?

You don't need one. Run Dashy: Insert block, pick a block, and a working example lands at the cursor, already pointed at a folder and a property from your vault. Every block is a few lines of YAML, and every key is on the reference page. The agent is the fast way in, not the only one.

Do I need Dataview?

No. Dashy reads frontmatter from Obsidian's own metadata cache. Nothing else to install.

Does it work on a phone?

Yes. A tap on a heatmap cell or a chart bar shows its value, and a second tap opens the note.

How does a block know a note's date?

From its name, when it starts with YYYY-MM-DD: 2026-01-05 Monday counts. Names written another way, like 05.01.2026, are read in the day format set in the Daily notes or Periodic Notes settings, or in one the block names with date_format: DD.MM.YYYY. Otherwise add date_field to the block and keep the date in a property.

Which languages does it speak?

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

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.