0xaikang18 downloadsVisualize your daily writing as a GitHub-style heatmap in the sidebar, alongside vault-wide note, tag and usage-day counters.
An Obsidian plugin that shows your writing activity as a GitHub-style heatmap in the sidebar, together with a few basic statistics about your vault.

main.js, manifest.json and styles.css from the latest release.<vault>/.obsidian/plugins/writing-heatmap/.The panel opens in the right sidebar the first time you enable the plugin. After that Obsidian remembers where you put it, including if you close it or move it somewhere else.
| Setting | Description |
|---|---|
| Counted folders | Folders behind the note counter, one path per line. Empty (the default) counts the whole vault. The tag and day counters are always vault-wide. |
| Exclude patterns | Files and folders to keep out of the heatmap, one glob per line. The folder configured in the Templates core plugin is excluded automatically. |
| Include patterns | A whitelist. When it is not empty, only files matching one of these globs are counted. |
| Count code blocks | Whether characters inside code blocks and inline code count towards the daily total. Off by default. |
| Color cells by | Whether cell shade follows characters written or notes created. |
| Rebuild index | Rescans every file from scratch. Use it if the numbers look wrong. |
Glob syntax: * matches within one path segment, ** crosses segments, and ? matches a single character. A plain folder path such as Templates matches that folder and everything inside it.
The plugin looks for a date in this order and uses the first one it finds:
2026-05-01.md or 2026-05-01-meeting.md. A date in the middle of the name is ignored.created key first, then date. Plain values (2026-05-01 11:25), quoted values, and links to a daily note (created: "[[2026-05-01]]") all work.Renaming a note or editing its frontmatter date moves it to the new day.
Markdown syntax is stripped first, then the remaining characters are counted — not words. Removed before counting: frontmatter, code blocks and inline code (unless you turn them on), image embeds, link targets, HTML tags, Markdown punctuation, and all whitespace.
So Hello 世界 counts as 7. The plugin was written for Chinese notes, where characters are the usual unit. If you write mostly in English, read the number as a rough measure of volume rather than a word count.
git clone https://github.com/0xAiKang/obsidian-writing-heatmap.git
cd obsidian-writing-heatmap
npm install
npm run dev # watch build
npm test # unit tests
npm run build # typecheck, tests, production bundle
Source layout: tracker.ts keeps the per-day totals, stats.ts computes the three counters, note-date.ts resolves which day a note belongs to, heatmap.ts draws the grid, view.ts is the sidebar panel, and i18n.ts holds both language tables.