oisngodr107 downloadsSink completed checklist tasks and drag-reorder task or numbered list items.
A calmer way to organize tasks and ordered lists in Obsidian.
Install · Usage · Settings · Privacy · Contributing
Completed tasks move out of the way. Numbered lists stay numbered.
Obsidian lists are excellent for thinking, but long checklists can become noisy as work changes. Checklist Flow keeps the editor calm: completed tasks sink below unfinished work, and same-level items can be rearranged with a direct press-and-drag gesture.
Everything stays in ordinary Markdown. There is no special syntax, no database, and no metadata hidden in your notes.
| Capability | What you get | |
|---|---|---|
| ✅ | Auto-sink completed tasks | Finished work moves below unfinished siblings in the same contiguous list. |
| 🖐️ | Drag task checkboxes | Reorder same-level tasks while child notes and sublists stay attached. |
| 🔢 | Drag ordinary list numbers | Reorder numbered lists by pressing the number, not just checkboxes. |
| 🔢 | Stable numbering | A list starting at 5. remains anchored to 5. after sorting or dragging. |
| ↗️ | Select from the left margin | Click to select a list item or paragraph; hold and drag to select more. |
| 🧱 | Markdown-native | Works with regular - [ ], - [x], 1., and nested Markdown blocks. |
| 🔒 | Local and private | No account, telemetry, network request, or note-content collection. |
1.5.0 or laterOpen the latest release.
Download main.js, manifest.json, and styles.css.
Create this folder in your vault:
<vault>/.obsidian/plugins/checklist-flow/
Copy the three downloaded files into that folder.
In Obsidian, open Settings → Community plugins, refresh the list, and enable Checklist Flow.
If you already use BRAT, add this repository:
hemashishi12/obsidian-checklist-flow
Use ordinary Markdown tasks:
- [ ] Read the paper
- [x] Send the reply
- [ ] Write the summary
With auto-sink enabled, checking Send the reply becomes:
- [ ] Read the paper
- [ ] Write the summary
- [x] Send the reply
Only sibling items in the same contiguous list are reordered. Nested notes and child lists remain attached to their parent.
Press and hold a task checkbox:
- [ ] First
- [ ] Second
- [ ] Third
Or press and hold an ordinary ordered-list number:
1. First
2. Second
3. Third
While dragging:
A quick click still toggles a checkbox. List numbers have no hover effect and remain visually unchanged until a press-and-drag gesture starts.
Move the mouse into the blank area to the left of a line. The cursor becomes a right-pointing arrow. Click to select a whole list item or heading, or a whole ordinary paragraph. List items include their Markdown markers; nested items remain separate lines. Blank lines, quotes, table rows and headings stop paragraph expansion.
Keep the left mouse button pressed and drag up or down to extend the selection across additional items/paragraphs. Moving back shrinks the selection; crossing the starting item reverses its direction. The selection includes all text between its endpoints. Dragging near the editor's top or bottom scrolls automatically. Release to keep the selected text, ready to copy or edit. Escape, window blur or pointer cancellation ends the gesture.
This mouse feature works in Live Preview and Source Mode, including popout editor windows, independently of the drag-reorder setting. Checkbox and number dragging still reorder items; start in the blank left margin to select instead.
This integrates Margin Paragraph Select. Disable that standalone plugin when using Checklist Flow to avoid duplicate input handlers.
| Works | Not covered |
|---|---|
| Regular Markdown task lines | Reading-view rendered checklists |
| Ordinary numbered-list lines | Tasks plugin query results |
| Same-level sibling items | Kanban cards, tables, and canvas cards |
| Nested blocks attached to a parent task/list | Content inside fenced code blocks |
Checklist Flow intentionally edits only the affected contiguous list block. That keeps behavior predictable in notes that mix outlines, quotes, code, and tasks.
Open Settings → Community plugins → Checklist Flow.
| Setting | Default | Description |
|---|---|---|
| Auto-sink completed tasks | On | Move completed tasks below unfinished siblings. |
| Drag from checkbox or number | On | Enable press-and-drag reordering. |
| Done status characters | xX |
Checkbox values treated as completed. |
Checklist Flow runs locally inside Obsidian. It does not:
npm install --no-audit --no-fund
npm test
npx tsc --noEmit
npm run build
npm run dev
npm run build generates these files in the repository root:
main.js
manifest.json
styles.css
Copy them into a folder named checklist-flow inside your vault’s .obsidian/plugins/ directory to test a local build.
src/
├── checklist.ts # Pure Markdown parsing, sorting, and reordering
├── editor-extension.ts # CodeMirror drag and auto-sink integration
├── main.ts # Plugin lifecycle, commands, and settings
├── margin-selection.ts # Left-margin click/drag selection and auto-scroll
└── settings.ts # Shared setting types and defaults
tests/
├── checklist.test.ts # Markdown transformation behavior tests
└── margin-selection.test.ts # Paragraph boundaries and directional selection
docs/
└── assets/
└── hero.svg # Generic documentation illustration
ownerDocument, including popouts. In this vault, CodeMirror DOM event extensions from a different module instance previously failed silently; direct DOM listeners and editor.cm.dispatch({ selection: { anchor, head } }) work reliably.15 1; larger sizes looked oversized in Chromium.C:\Tools\Obsidian\Obsidian.com. After copying a build into the vault, run plugin:reload id=checklist-flow and dev:errors. CLI evaluation runs in the main document: use the editor's own document/window when testing pointer events.dev:cdp method=Page.bringToFront): hidden windows pause animation frames and can produce a false failure. Local checks cover native mouse selection, checkbox clicks, number reordering, Source Mode and a separate popout document.version in manifest.json, package.json, and package-lock.json.0.2.0, without a v prefix).main.js, manifest.json, and styles.css.Issues and pull requests are welcome. For behavior changes, please include tests covering Markdown edge cases such as indentation, nested blocks, blank-line boundaries, ordered numbering, and CRLF line endings.
npm test and npx tsc --noEmit.