Asef Hossain Khan164 downloadsRolls unfinished todos forward into notes created by the Journals plugin. Finds the previous note via journal-date frontmatter instead of Daily Notes paths, so it works with Journals' nested, date-templated folders.
An Obsidian plugin that rolls unfinished todos forward from your previous note into a newly created one — built to work with the Journals plugin.
It is a spiritual successor to
Rollover Daily Todos,
rewritten so it no longer depends on the core Daily Notes / Periodic Notes
settings. Instead of reconstructing a note path from a single static folder + date
format (which Journals' nested, date-templated folders break), it finds the
previous note using the journal-date frontmatter that Journals writes into every
note.
The original Rollover Daily Todos locates daily notes by rebuilding the expected
path as <dailyNotesFolder>/<DD-MMM-YYYY>.md and comparing it to the file on disk.
Journals stores notes at paths like:
Daily Notes/2026/08-2026/28-Aug-2026.md
The core Daily Notes plugin can only hold one static folder, so that path can never be reconstructed and the comparison always fails — the rollover silently bails out. This plugin sidesteps path reconstruction entirely and keys off frontmatter, which Journals maintains reliably:
---
journal: DailyNote
journal-date: 2026-08-28
---
journal and journal-date frontmatter.journal-date in the same journal — that's your "previous"
note.TODOS, e.g.
## FRIDAY TODOS). If no heading matches, it falls back to the bottom of the
note (configurable).On automatic runs the plugin waits for the Journals template to finish rendering (polling up to a few seconds) before inserting, so it never races the template.
| Setting | Default | Description |
|---|---|---|
| Automatic rollover on new note | on | Roll over when Journals creates a note. The manual command is always available too. |
| Delete todos from the previous note | off | Move instead of copy. Destructive. |
| Roll over child items | on | Carry indented lines nested under a todo. |
| Skip empty todos | on | Ignore bare - [ ] items. |
| Skip todos already in the new note | on | Avoid duplicate inserts. |
| Target heading pattern | ^#{1,6}\s+.*TODOS\s*$ |
Case-insensitive regex for the insertion heading. |
| If the heading is not found | Append to bottom | bottom / top / skip. |
| Done status markers | xX- |
Characters inside [ ] that mean done. |
| Limit to journals | (empty = all) | Comma-separated Journals names to act on. |
| Show notice after rollover | on | Summary notice per rollover. |
npm install
npm run dev # watch + rebuild main.js
npm run build # type-check + production bundle
The repo root is also the installed plugin folder inside a test vault
(<vault>/.obsidian/plugins/journals-aware-rollover-todos/), so a build updates
the running plugin in place — just reload the plugin in Obsidian.