wenzel1983111 downloadsMove completed checkbox tasks (with their sub-tasks) into a Done section — via right-click, command, or automatically.
An Obsidian plugin that quickly moves completed
checkbox tasks — including their indented sub-tasks — from a to-do list into
a ### Done section of the same note.
🌍 Languages: English (this page) · Deutsch The plugin interface follows Obsidian's UI language: English by default, German when Obsidian is set to German.

✅ YYYY-MM-DD to each moved, checked
line (no duplicate dates).### Done heading does not exist, it is created at the end of the
note.| Setting | Description | Default |
|---|---|---|
| Auto mode | Move completed tasks automatically | off |
| Done heading | Name of the target heading | Done |
| Append completion date | Append a ✅ date to moved lines |
on |
npm install
npm test # unit tests (Vitest)
npm run build # produces main.js
Copy main.js and manifest.json into
<Vault>/.obsidian/plugins/todo-done-mover/, then enable the plugin under
Settings → Community plugins.
For development you can use the project folder directly as the plugin folder
(npm run dev for a watch build).
Pushing a git tag triggers the GitHub Actions workflow in
.github/workflows/release.yml, which builds the plugin and attaches
main.js and manifest.json to a new GitHub release. Make sure the tag
matches the version in manifest.json.
| File | Purpose |
|---|---|
main.ts |
Plugin class: commands, context menu, auto mode |
src/taskParser.ts |
Markdown parsing, section and block detection |
src/mover.ts |
Pure move logic (moveCompletedTasks, moveSelectedTasks) |
src/settings.ts |
Settings UI |
src/i18n.ts |
UI string localization (English / German) |
src/types.ts |
Shared types and defaults |
src/*.test.ts |
Unit tests |
taskParser.ts and mover.ts have no Obsidian dependencies, so they are
unit-testable without a running Obsidian instance.