zincplusplus26k downloadsA minimalist, elegant habit tracker that helps you build lasting habits with clear progress visualization.
A minimalist, elegant habit tracker for Obsidian that helps you build lasting habits with clear progress visualization.
Transform your Obsidian vault into a habit-building powerhouse. Track daily habits with an intuitive grid interface, customize your tracking experience, and watch your consistency streaks grow over time.
![]()
maxGap) keeps streaks intact across short breaks while counting only days you actually completedHabits/)Exercise.md, Reading.md for each habit you want to track```habittracker
{
"path": "Habits"
}
```
That's it! Click the grid to log your daily habits.
By default, habit titles use the filename (e.g., Exercise.md → "Exercise"). Customize titles by adding frontmatter to your habit files:
---
title: "Morning Workout 💪"
entries: []
---
Examples:
title: "📚 Daily Reading"title: "Drink 8 glasses of water"title: "Meditation & Mindfulness"If no title is specified, the filename is used as before.
By default, habit colors inherit from your Obsidian theme's checkbox ticked color. Personalize individual habits with custom colors by adding a color property to your habit file frontmatter:
---
title: "Morning Workout 💪"
color: "#4CAF50"
entries: []
---
Examples:
color: "#FF5722" (hex colors)color: "rgb(76, 175, 80)" (RGB values)color: "green" (CSS color names)Invalid colors are ignored and the default theme color is used.
By default, a single missed day breaks a streak. Use maxGap to keep a streak visually intact across short gaps — useful for habits where occasional misses are acceptable (e.g. a rest day in a workout routine):
---
title: "Morning Workout 💪"
maxGap: 1
entries: []
---
maxGap: 1 allows 1 missed day, maxGap: 2 allows 2, and so onExamples by habit frequency:
| Habit | Frequency | maxGap |
Why |
|---|---|---|---|
| Workout | 3× per week | 3 |
Allows up to 3 rest days between sessions (e.g. Mon → Fri) |
| Clean Puramax | Every 2 weeks | 13 |
Up to 13 days can pass between cleanings |
| Call a friend or family member | Weekly | 6 |
One call per week, any day |
| Car service / deep clean | Monthly | 30 |
Up to 30 days between occurrences |
Access via Settings > Community plugins > Habit Tracker to set defaults for all trackers:
Override global settings in individual code blocks:
```habittracker
{
"path": "Habits",
"daysToShow": 30,
"lastDisplayedDate": "2024-01-15",
"debug": true,
"matchLineLength": false
}
```
| Setting | Type | Default | Description |
|---|---|---|---|
path |
string | "/" | Path to habit folder or file. Defaults to root folder if left empty |
firstDisplayedDate |
string | auto | First date shown in grid (format: "YYYY-MM-DD"). When provided, takes priority over daysToShow |
lastDisplayedDate |
string | today | Last date shown in grid (format: "YYYY-MM-DD"). If left empty, defaults to today |
daysToShow |
number | 21 | Number of days to display. Ignored when firstDisplayedDate is explicitly provided |
color |
string | "" | Custom color for this tracker (hex, RGB, or CSS color name) |
showStreaks |
boolean | true | Display streak indicators and counts |
debug |
boolean | false | Enable debug console output |
matchLineLength |
boolean | false | Match readable line width |
| Setting | Type | Default | Description |
|---|---|---|---|
title |
string | "" | Custom display name. Falls back to filename if not set |
color |
string | "" | Custom color for this habit (hex, RGB, or CSS color name) |
maxGap |
number | 0 | Allow up to N consecutive missed days within a streak. Gap days show at reduced opacity; only actual ticked days are counted |
entries |
array | [] | Array of completed dates in YYYY-MM-DD format. Managed automatically when clicking the grid |
Track all habits in a folder:
```habittracker
{
"path": "Habits"
}
```
Track one specific habit file:
```habittracker
{
"path": "Habits/Exercise.md"
}
```
Show last 30 days:
```habittracker
{
"path": "Habits",
"daysToShow": 30
}
```
Override default color for entire tracker:
```habittracker
{
"path": "Habits",
"color": "#FF5722"
}
```
Allow up to 1 missed day without breaking a streak:
```habittracker
{
"path": "Habits/Exercise.md"
}
```
---
title: "Exercise"
maxGap: 1
entries: []
---
Hide streak indicators for cleaner view:
```habittracker
{
"path": "Habits",
"showStreaks": false
}
```
Show habits ending on a specific date:
```habittracker
{
"path": "Habits",
"lastDisplayedDate": "2024-01-15",
"daysToShow": 30
}
```
Track habits for the entire month of November 2024:
```habittracker
{
"path": "Habits",
"firstDisplayedDate": "2024-11-01",
"lastDisplayedDate": "2024-11-30"
}
```
Enable detailed logging:
```habittracker
{
"path": "Habits",
"debug": true
}
```
"Path is required" error
"path" in your trackerTracker shows "No habits found"
.md files (subfolders are ignored)Settings not updating
Clicking a date does nothing
Debug Output Enable debug mode to see detailed logging in the browser console (F12).
git clone https://github.com/zincplusplus/habit-tracker
cd habit-tracker
npm install
npm run dev
PRs welcome! Please:
MIT License - see LICENSE for details.
Made with ❤️ for the Obsidian community