Stefan Imbesi65 downloadsClose the previous dated note and open the next one, in one command — date-stamped, with optional templating.
A lightweight Obsidian plugin for date-stamped note workflows. One command closes the previous dated note and opens the next one — renaming the old note to mark it done and creating a fresh, date-stamped note in the same folder.
It's fully configurable, so it adapts to any naming convention rather than a single hard-coded format.
Running Roll over to the next note:
FileManager.renameFile so internal links to the note update automatically.How the date is chosen: normally it's today's real date — so after you skip days (weekends, holidays) it jumps straight to today rather than a wrong in-between date. If the note you're closing is already dated today or later, it advances to the day after instead, so you never end up with two notes on the same date.
A folder containing:
2026-06-16 ✓
2026-06-17 — ← today's open note
Run Roll over to the next note on 18 June and you get:
2026-06-16 ✓
2026-06-17 ✓ ← closed
2026-06-18 — ← created
| Command | Description |
|---|---|
| Roll over to the next note | Close the most recent open note, then create the next dated note (today's, or the day after the closed note if that's already today or later). |
| Mark current note as done | Close only the active note (pending → done). Appears only when the active note's name ends with the pending marker. |
Neither command sets a default hotkey — assign your own in Settings → Hotkeys.
Folder
Journal/2026).File naming (with live previews)
YYYY-MM-DD. — Log. —. ✓.New note content
.md path (with file autocomplete).Behaviour
Markers and labels become part of the file name, so avoid characters Obsidian disallows in note titles:
* " \ / < > : | ? # ^ [ ].
If a template file is configured, its contents are copied into the new note with these tokens substituted:
| Token | Replaced with |
|---|---|
{{date}} |
Today's date in the configured date format |
{{label}} |
The configured note label |
{{day}} |
Full day name, e.g. Wednesday |
{{isoDate}} |
Full ISO date, e.g. 2026-06-17 |
Content precedence: if Carry over previous content is on, today's note is seeded with a copy of the previous note instead — the template is then used only on the first run, when there's no previous note to copy. With both off, the note is created empty.
The pending/done markers, date format, and label are all configurable, so the same one-command workflow fits:
| Use case | Pending → Done |
|---|---|
| Daily log | 2026-06-17 — → ✓ |
| Freelancer work log | 2026-06-17 Work Log [pending] → [done] |
| Student lecture notes | 2026-06-17 — Lecture — → ✓ |
| Researcher field notes | 2026.06.17 Field Note OPEN → DONE |
| Weekly standup | 2026-W25 — Standup — → ✓ |
| Personal check-ins | 26.06.17 — Check in — → ✓ |
npm install # install dev dependencies
npm run dev # watch build → main.js
npm run build # type-check + minified production build
To test in a vault, copy (or symlink) manifest.json, styles.css, and the built main.js into <vault>/.obsidian/plugins/rollover/, then enable the plugin in Settings → Community plugins.
Releases are produced by .github/workflows/release.yml. Bump the version, tag it (the tag must equal the manifest.json version, with no v prefix), and push the tag:
npm version patch # updates manifest.json + versions.json, commits, tags
git push && git push --tags
The workflow builds the plugin and attaches main.js, manifest.json, and styles.css to a draft release — review it, then publish.