Smart Done Mover

approved

by wxjett

Move completed tasks into a customizable Done section with nested task filtering, auto mode, and Tasks plugin support. - This plugin has not been manually reviewed by Obsidian staff.

โ†“ 238 downloadsUpdated 20d agoMIT

Smart Done Mover

An Obsidian plugin that moves completed checkbox tasks โ€” including their indented sub-tasks โ€” into a customizable 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, and Simplified Chinese when Obsidian is set to Chinese.

Demo

The Smart 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. It also detects task completions written back to source notes by the Tasks plugin after a short debounce (about 400 ms or more).
  • Task filter (optional): move only tasks matching a text filter such as #task. The filter applies to auto mode, Move completed tasks to Done, and Move selection to Done.
    • Leave the filter empty to keep the original behavior: all fully completed task blocks can move.
    • A matching task must be checked. If it has matching descendants, they must be checked too; non-matching descendants do not block the move.
    • A matching parent moves its complete indented block, including notes and non-matching child checkboxes. A matching child under a non-matching parent moves independently with its own indented block.
  • Excluded folders/files (optional): auto mode stays inactive in the configured vault paths (including subfolders); manual commands still work there.
  • 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).
  • Use a plain Done heading name for the original ### Done behavior, or enter a full Markdown heading such as # Completed to choose its level. An existing heading with the same title is reused.

Settings

SettingDescriptionDefault
Auto modeMove completed tasks automaticallyoff
Done headingTarget heading. Plain text creates ###; a Markdown heading keeps its level.Done
Task filterText a task must contain before it can move; empty disables filtering.empty
Append completion dateAppend a โœ… date to moved lineson
Excluded folders/filesVault paths (one per line) where auto mode stays inactiveempty

Usage

  1. Open a note that contains a checkbox to-do list.
  2. Configure the optional Task filter if only marked tasks, such as #task, should move.
  3. Right-click in the editor and choose an action, run the matching command from the command palette, or enable Auto mode.
  4. Completed tasks are moved under the configured Done heading.

Disclosures

  • The plugin works entirely offline and makes no network requests.
  • It collects no telemetry and stores no data outside your vault.
  • It only modifies the note in which a move action runs (manually or via auto mode) and never touches other files.
  • Settings are stored in the plugin's data.json inside your vault's configuration folder.
  • No account, payment, or external service is required.

Build from source

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

Install into a vault

For normal installation, download main.js and manifest.json from the matching GitHub Release. Copy them into <Vault>/.obsidian/plugins/smart-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/exclusions.tsPath-exclusion matching for auto mode
src/i18n.tsUI string localization (English / German / Simplified Chinese)
src/types.tsShared types and defaults
src/*.test.tsUnit tests

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

Origin

Smart Done Mover is an independent project based on To-Do to Done Mover by DonnervS. It retains the original MIT license.

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.