Felix Isensee378 downloadsBreak down complex projects into visual, interactive task trees with nested subtasks and deep focus.
Break down big goals and complex projects into visual, interactive task trees.
Flat to-do lists get overwhelming when projects grow. Tree Work brings visual structure to your vault by turning complex projects into interactive task trees—helping you map out dependencies, collapse distractions, and zoom straight into what needs your attention right now.

Requires Obsidian 1.6.0 or newer.
npm install and npm run build, or use the already-built dist/tree-work folder.<your-vault>/.obsidian/plugins/tree-work/ (use your vault's actual configuration folder if customized).manifest.json, main.js, and styles.css. Do not nest a second tree-work folder inside it.After rebuilding, replace those three files and disable/re-enable the plugin or reload Obsidian. This is a local plugin build, not a published Community Plugins listing. Nothing is installed into your vault automatically.
.tree is added automatically. The destination follows Obsidian's new-file folder preference..tree file in the file explorer to open its graph. Duplicate names get a numeric suffix rather than overwriting existing files..tree file is a valid empty tree. The + on My work creates the first top-level task.examples/Example.tree into your vault to try a sample task tree.Tree Work registers the tree extension with its custom file view using Obsidian's public plugin API. Markdown files and other extensions keep their existing behavior.
- [ ] Launch my project
- [x] Define the idea
- [ ] Build the first version
- [x] Sketch the layout
- [ ] Build the interface
- [ ] means open; - [x] means completed. Uppercase X is accepted.You can quickly reorganize, rename, or bulk edit tasks by switching to the built-in text view, or by editing the file in an external editor. Invalid files display an error and are never silently replaced with an empty tree.
.tree file contains syntax errors (such as mismatched indentation), the view provides a direct Switch to text view to fix file button so you can resolve issues immediately without opening another editor.Enter on a task line automatically continues with - [ ] ; pressing Enter on an empty checkbox line clears the checkbox prefix.Tab inserts two spaces (or indents selected lines); Shift+Tab outdents lines.Ctrl+S (or Cmd+S on macOS) or click Save to save immediately..tree format and reports line-specific syntax errors in real time.Focus and collapse are temporary view state. They reset when the file is reopened or reloaded and are never written to the task file. Different panes have independent view state.
Changes save immediately via Vault.process, with the source text checked inside the atomic update. If a file has changed in another pane or editor, saving is rejected until you reload. Other open Tree Work panes display a reload notice when the file changes. The reload also closes any add-task dialog because file edits may have changed task paths.
Each view's storage is bound to its own vault file. Renaming a file does not redirect edits elsewhere, and closing a view unregisters its listeners and React root. Normal vault operations handle file rename/delete and synchronization; Tree Work does not manage sync itself.
Use Node.js 22.12+ (Node 24 recommended).
To develop without manually copying files into your vault:
Set VAULT_PATH in a local .env file (ignored by Git) or environment:
VAULT_PATH=/path/to/your/vault
(On Windows/WSL, use your WSL mount path, e.g. /mnt/c/Users/<user>/.../vault)
Run the watch script:
npm run dev
esbuild will recompile on file changes, output to dist/tree-work/, and automatically copy main.js, styles.css, and manifest.json into <vault>/.obsidian/plugins/tree-work/. It also creates .hotreload in the destination folder.
In your Obsidian vault, install and enable the Hot Reload plugin. It detects .hotreload and automatically reloads Tree Work in Obsidian on every build without restarting the app.
npm install
npm run build # type-check + production bundle (syncs to vault if VAULT_PATH is set)
npm run dev # watch mode with live sync
npm test # parser, task rules, vault storage, and file creation
node scripts/check-plugin.mjs # verify package bundle and registration contract
Build output is dist/tree-work/{main.js,manifest.json,styles.css}. React is bundled; Obsidian is an external runtime dependency provided by the app. The manifest permits desktop and mobile because the plugin uses public vault and DOM APIs, not Node filesystem APIs.
Automated verification uses unit tests, API type-checking, and package checks only.
Suggested manual checks:
.tree file.