To-Do → Done Mover

approved

by wenzel1983

This plugin has not been manually reviewed by Obsidian staff. Move completed checkbox tasks (with their sub-tasks) into a Done section — via right-click, command, or automatically.

101 downloadsUpdated 8d agoMIT

To-Do → Done Mover

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.

Demo

The To-Do → Done Mover plugin in action

Features

  • Right-click menu in the editor:
    • Move completed tasks to Done — moves every fully completed task.
    • Move selection to Done — moves the task blocks touched by the current text selection (only shown when text is selected).
  • The same actions are available as commands (command palette, can be bound to hotkeys).
  • Auto mode (optional): as soon as a task is checked, it moves to Done automatically — but only when the task and all of its sub-tasks are checked.
  • Sub-tasks move along with their parent; indentation is preserved.
  • Optionally appends a completion date ✅ YYYY-MM-DD to each moved, checked line (no duplicate dates).
  • If the ### Done heading does not exist, it is created at the end of the note.

Settings

SettingDescriptionDefault
Auto modeMove completed tasks automaticallyoff
Done headingName of the target headingDone
Append completion dateAppend a date to moved lineson

Usage

  1. Open a note that contains a checkbox to-do list.
  2. Right-click in the editor and choose an action, or run the matching command from the command palette.
  3. Completed tasks are moved under the configured Done heading.

Build from source

npm install
npm test          # unit tests (Vitest)
npm run build     # produces main.js

Install into a vault

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).

Releases

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.

Project structure

FilePurpose
main.tsPlugin class: commands, context menu, auto mode
src/taskParser.tsMarkdown parsing, section and block detection
src/mover.tsPure move logic (moveCompletedTasks, moveSelectedTasks)
src/settings.tsSettings UI
src/i18n.tsUI string localization (English / German)
src/types.tsShared types and defaults
src/*.test.tsUnit tests

taskParser.ts and mover.ts have no Obsidian dependencies, so they are unit-testable without a running Obsidian instance.

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.