shabbirpatheria179 downloadsRender a checklist in your daily note from a folder structure. Checking an item logs the daily note's date into that note's 'entries' property.
Turn a folder of notes into a retro 16-bit RPG habit tracker for Obsidian — a checklist, a day planner, and a stats screen.
Every note in your routines folder becomes a checkbox, grouped into colour-coded sections. Ticking one writes today's date into that note, so your history lives in your vault as plain frontmatter.

Drag habits from the tray into the day, stretch them to however long they really take, and check them off in place. Double-click an empty slot for a one-off task that isn't part of your routines.

A JRPG character screen for your consistency: levels, ranks, XP, achievements, and a heatmap where streaks join into a single bar labelled with its length.

Routines folder.```routines
```
```pixel-calendar
```
```routine-stats
```
All three stay in sync as you click, and everything is stored in your notes' frontmatter.
Everything below is optional detail — the plugin works out of the box.
Point the plugin at a root folder (default: Routines). Each subfolder becomes a collapsible section, and each note inside becomes a checklist item:
Routines/
├── Fitness/
│ ├── Gym.md
│ └── Protein goal.md
└── Work/
└── Inbox zero.md
Add a code block to your daily note (or use the Insert routines checklist block command):
```routines
```
This renders a collapsible Habits checklist with Fitness and Work sections. When you check Gym in a daily note dated 2026-06-25, that date is appended to the entries frontmatter property of Fitness/Gym.md:
---
entries:
- 2026-06-25
---
Unchecking removes the date. Checked items are shown with a strikethrough.
A routine note can break a habit into subtasks by adding a subtasks list to its frontmatter:
---
subtasks:
- Warm up
- Main set
- Cool down
---
Each subtask renders as a nested checkbox under the habit, connected with pixel tree connectors (├── / └──). The parent and its subtasks stay in sync both ways:
entries.entries dates from before it had subtasks, those dates are automatically backfilled into every subtask on render, so the parent stays consistent.Per-subtask completion is stored in a plugin-managed subtaskEntries property so it survives reloads:
---
subtasks:
- Warm up
- Main set
subtaskEntries:
Warm up:
- 2026-06-25
Main set:
- 2026-06-25
entries:
- 2026-06-25
---
Notes without a subtasks property behave exactly as before — a single checkbox.
Plan your day by adding a pixel-calendar code block to your daily note (or use the Insert pixel calendar block command):
```pixel-calendar
```
This renders a single-day planner titled Day Plan for the daily note's date, with 48 half-hour slots covering 24 hours. Every habit — and its subtasks — appears in a side tray:
pixelCalendarPlan frontmatter property, so it persists across reloads.entries / subtaskEntries exactly like the checklist (subtask/parent stay in sync), and both the tray and slot reflect the completion.× button on its slot chip.---
pixelCalendarPlan:
"07:00":
- Routines/Fitness/Gym.md
"07:30":
- "Routines/Fitness/Gym.md::Cool down"
---
Every scheduled block starts as one 30-minute slot, but a habit rarely fits neatly into half an hour:
Anything other than a plain 30-minute slot is saved to the daily note's pixelCalendarTimes property:
---
pixelCalendarTimes:
Routines/Fitness/Gym.md:
start: "07:10"
end: "09:05"
---
Not everything is a routine. Double-click any empty time slot to type a task just for that day — no note is created and nothing is added to your routines folder:
× button (or dragging it back to the tray) deletes it.One-off tasks are stored in the daily note's pixelCalendarTasks property and referenced from the plan with a custom: prefix:
---
pixelCalendarPlan:
"09:30":
- custom:m3k9f2-a1b2
pixelCalendarTasks:
m3k9f2-a1b2:
title: Call the plumber
done: true
---
The checklist, the pixel calendar, and the stats board stay in sync as you click. Checking a habit in the calendar instantly ticks it in the Habits checklist (updating its progress bars), and vice versa — no page refresh, no reopening the note.
Add a stats screen to any note with the routine-stats code block (or use the Insert routine stats board command):
```routine-stats
```
This renders a retro RPG character-stats screen with one board per folder/section, showing the last 21 days:
LV.n), current streak, and a rank badge (S/A/B/C/D/E).Click any cell in the heatmap to add or remove a completion for that routine on that day — it writes to the same entries (and fans out to subtasks) exactly like the checklist, and the board updates live.
Routines)entries)entries (default: YYYY-MM-DD)subtasks)subtaskEntries)pixelCalendarPlan)pixelCalendarTasks)pixelCalendarTimes)Once accepted: Settings → Community plugins → Browse → search for "Pixel Habits".
main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/folder-routines/.