Finn-Christopher Krause1 downloadsAutomatically move completed tasks to the bottom of each Markdown task list, keeping subtasks attached and surrounding text in place.
Automatically move completed tasks to the bottom of each Markdown task list, keeping subtasks attached and surrounding text in place.
TidyTasks automatically moves completed tasks to the bottom of each Markdown task list in Obsidian. Subtasks stay attached to their parent, and surrounding text stays in place. Keep using your usual Markdown checkboxes—no separate task manager or new workflow required.
Open tasks come first, in-progress tasks follow, and completed tasks come last. Within the completed group, the most recently completed task appears first.
TidyTasks is free to use, with no paid features, accounts, telemetry or external services. The plugin runs locally and does not require network access.
After an existing parent task changes status, TidyTasks waits for 0.5 seconds without further edits and sorts each contiguous task block: open [ ] first, in progress [/] second, completed [x] / [X] last. Newly completed tasks go to the top of the completed group, newest first, including multiple observed changes within one debounce interval. Open and in-progress tasks keep their relative order.
For example, completing A and then B in a list A, B, C produces open C followed by completed B, A. Completion order is recorded only during the pending debounce, then carried by the Markdown order itself. Existing completed tasks are not reversed. No timestamps or task IDs are written to your notes. Simultaneous batch changes have no observable click chronology, so their document order is used.
- [x] Finished parent
- [ ] Its child
- [ ] Still open
becomes:
- [ ] Still open
- [x] Finished parent
- [ ] Its child
[ ], [/], [x] and [X] are interpreted. Other custom task statuses split blocks. In-progress status can be written as - [/] Task; TidyTasks does not replace native checkbox controls or add a new click cycle.-, +, * and numbered task markers are supported. Literal numbers are not renumbered.Vault.process().TidyTasks changes the actual Markdown file, not just its display. Keep backups and test in a separate vault first. It supports desktop, Android and iOS by design; actual mobile device testing is still required before public release.
tidytasks: false. It takes precedence over the per-note switch. Remove the property or set it to true to release that override. The switch is disabled while this override is present.Undoing only a reordering does not restart automatic sorting: the statuses have not changed. Undoing a checkbox/status change is a real status change and can trigger sorting. Actual Obsidian undo grouping still needs manual verification. The tracker conservatively recognizes existing tasks by their parent text; changing the text and status simultaneously may be treated as a new task rather than an existing status change.
Requires a supported Node.js LTS release with npm.
npm.cmd install
npm.cmd test
npm.cmd run lint
npm.cmd run build
npm.cmd run dev
Copy main.js and manifest.json into <test-vault>/.obsidian/plugins/tidytasks/. In Obsidian, enable community plugins and enable TidyTasks. Reload the plugin after rebuilding. Stop the watch process with Ctrl+C.
Each successful npm.cmd run build automatically increments the patch version, for example 0.1.0 → 0.1.1 → 0.1.2. It synchronizes manifest.json, package.json, package-lock.json and versions.json. Failed builds, tests and the dev watch mode do not increment versions. Copy main.js and the updated manifest.json when installing a new build. Restart Obsidian after changing the installed manifest so the displayed version is refreshed.
No styles.css is needed. The plugin uses Obsidian's native task rendering without additional animations.
This is a development version, not yet a reviewed Community plugin.
LICENSE file before publication.minAppVersion currently targets 1.6.0; raise it if compatibility testing requires it.manifest.json (no v prefix). Build first, then create the matching release tag.main.js and manifest.json to the release; keep the manifest in the repository root as well.License selection is intentionally pending the author's decision. Do not publish this project as a licensed community release until a license is added.
Created by Finn-Christopher-Krause / @finnxwz. TidyTasks is a small, focused project built around a simple idea: completed tasks should move out of the way without changing how you write your notes.
Found a bug or have a suggestion? Open an issue in this repository's GitHub Issues tab. Include your Obsidian version, device/platform, a small Markdown example and what you expected to happen. Please remove private note content before sharing examples.
The lint configuration uses the official recommended rules. Compatibility warnings are currently expected: legacy settings, refreshing their display and slider tooltips are retained for Obsidian before 1.13. npm may also report advisories for development-only dependencies inherited from the Obsidian API/lint packages; those dependencies are not bundled into main.js. Review these again before release rather than forcing an API downgrade with npm audit fix --force.