Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Writing Heatmap

0xaikang0xaikang18 downloads

Visualize your daily writing as a GitHub-style heatmap in the sidebar, alongside vault-wide note, tag and usage-day counters.

Add to Obsidian
Writing Heatmap screenshot
Writing Heatmap screenshot
  • Overview
  • Scorecard
  • Updates3

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.

中文文档

Writing Heatmap panel

Features

  • A heatmap of the past year, shaded by how much you wrote each day. The grid resizes to fit the sidebar, from 8 weeks in a narrow dock up to a full 53-week year.
  • Three counters above the grid: total notes, distinct tags, and days since your first note.
  • A status bar item with today's note and character count.
  • Hover a cell to see that day's date, note count and character count. Click it to open that day's daily note.
  • Cells can be shaded by characters written or by notes created.
  • Exclude folders and files with glob patterns, or use a whitelist to count only certain folders.
  • English and Simplified Chinese, selected automatically from your Obsidian language setting.
  • Colors follow the active Obsidian theme in both light and dark mode.

Installation

From Community Plugins

  1. Open Settings → Community plugins → Browse.
  2. Search for Writing Heatmap.
  3. Click Install, then Enable.

Manually

  1. Download main.js, manifest.json and styles.css from the latest release.
  2. Copy them into <vault>/.obsidian/plugins/writing-heatmap/.
  3. Reload Obsidian and enable the plugin under Settings → Community plugins.

Usage

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.

  • Click the ribbon icon to bring the panel to the front. If it is already in front, the click collapses the sidebar.
  • Click the status bar item for the same behaviour.
  • Or run Writing Heatmap: Toggle panel from the command palette.

Settings

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.

How a note is assigned to a day

The plugin looks for a date in this order and uses the first one it finds:

  1. The file name — a date at the start of the name, such as 2026-05-01.md or 2026-05-01-meeting.md. A date in the middle of the name is ignored.
  2. The frontmatter — the 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.
  3. The file's creation time — used only when the note carries no date of its own. It is the last resort because syncing, moving or restoring a vault rewrites it, which can collapse years of notes onto a single day.

Renaming a note or editing its frontmatter date moves it to the new day.

How characters are counted

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.

Development

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.

License

MIT

HealthExcellent
ReviewSatisfactory
About
Writing Heatmap puts a panel in your sidebar showing how much you wrote each day, as a GitHub-style grid. The grid resizes to fit the sidebar, from 8 weeks in a narrow dock up to a full 53-week year, and cells can be shaded by characters written or by notes created. Above the grid sit three counters: total notes, distinct tags, and days since your first note. A status bar item shows today's note and character count. Hover a cell for that day's numbers, or click it to open that day's daily note. Notes are dated by the date in their own file name or frontmatter, falling back to the file's creation time only when a note carries no date of its own, so syncing or moving a vault does not collapse years of writing onto a single day. Exclude folders and files with glob patterns, or use a whitelist to count only certain folders. The interface is available in English and Simplified Chinese, selected automatically from your Obsidian language setting.
WritingVisualizationStatus bar
Details
Current version
2.2.1
Last updated
7 hours ago
Created
5 months ago
Updates
3 releases
Downloads
18
Compatible with
Obsidian 1.8.7+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
0xaikang0xaikang
github.com/0xAiKang
GitHub0xaikang
  1. Community
  2. Plugins
  3. Writing
  4. Writing Heatmap

Related plugins

WebNovel Assistant

A comprehensive Obsidian plugin for web novel writers. Track word counts, goals, and focus time. Manage foreshadowing, timelines, and timed tasks. Includes a bilingual UI and OBS overlay.

Better Word Count

Count the words of selected text in the editor.

StoryLine

Transform your vault into a powerful book planning and writing tool. Corkboard, KanbanBoard view, timeline, plotlines,character tracking, and more.

Reading Time

Add the current note's reading time to the status bar.

Advanced Canvas

Supercharge your canvas experience. Create presentations, flowcharts and more.

Excalidraw

Visual PKM powerhouse. Create and edit Excalidraw drawings.

LanguageTool Integration

Advanced grammar and spell checking, powered by LanguageTool.

Breadcrumbs

Visualise the hierarchy of your vault using a breadcrumb trail or matrix view.

ChatGPT MD

A seamless integration of ChatGPT, OpenRouter.ai and local LLMs via Ollama into your notes.

Maps

Adds a map layout to bases so you can display notes as an interactive map view.