The Problem
Project management tools force a trade-off: either your data lives in a proprietary cloud service, or you manage plain files without the views (Gantt, Kanban, table) that make project tracking practical. This plugin resolves that by bringing full project management into Obsidian, where your data is already stored as local Markdown.
What This Does
obsidian-pm is an Obsidian community plugin that adds table, Gantt, and Kanban views for project management, all backed by Markdown files with YAML frontmatter. Tasks support subtasks (arbitrary nesting), dependencies, milestones, recurring schedules, time tracking, and custom fields. The src/store/ directory contains the data layer: TaskTreeOps.ts handles hierarchy operations, Scheduler.ts manages dependency-based date propagation, and YamlParser.ts/YamlSerializer.ts handle the Markdown/YAML round-trip. src/views/ holds the three view renderers (TableView.ts, GanttView.ts, KanbanView.ts), and src/ui/ contains reusable interface components like cells, chips, and modals.
How It Is Wired
Execution starts at src/main.ts, which is the Obsidian plugin entry point. It registers the view types and wires the plugin lifecycle. The plugin uses src/store/index.ts as the store facade, which routes through src/store/ProjectStore.ts (941 lines, the largest file). That store owns filesystem effects: it reads and writes .md files in the vault via src/store/vaultFs.ts, and the YAML round-trip happens in YamlParser.ts/YamlSerializer.ts. The import graph shows 120 internal modules with 416 import edges. The two hubs are src/types.ts (imported by 63 modules, in a cycle) and src/utils.ts (imported by 41). Both are high-blast-radius: a change to types or utils ripples across most of the codebase. There are 34 modules inside circular dependencies, including src/main.ts and src/ui/ModalFactory.ts. Breaking those cycles is the main structural cost for anyone modifying this code.
How To Use It
This is an Obsidian plugin; end users install it from the Obsidian community plugin catalog. For development:
git clone https://github.com/moses-y/obsidian-pm
cd obsidian-pm
pnpm install
pnpm dev
The package.json and pnpm-lock.yaml confirm pnpm is the package manager. The pnpm dev command builds the plugin in watch mode; the output goes into the vault's .obsidian/plugins/ directory. No environment variables are required. Tests run via vitest (see vitest.config.ts); CI is in .github/workflows/test.yml.
Real-World Use
A team using Obsidian for documentation can track a release cycle entirely in the vault. Create a project note, add tasks as Markdown files with YAML frontmatter (status, due, depends_on), then open the Gantt view to see the timeline. Drag a task bar to reschedule; the Scheduler.ts logic propagates the change to dependent tasks. Log hours against a task, and the table view aggregates them. Everything is version-controllable and searchable — no export step needed.
Code Health & Issues
Static analysis found 50 findings (37 high, 13 medium) across 5 kinds. The dominant issues: 34 modules participate in import cycles (including src/types.ts and src/main.ts), 6 hub modules with wide blast radius (src/types.ts is imported by 63 modules), and 20 duplicated code blocks across 14 files (e.g., src/modals/TaskModal.ts, src/ui/TaskContextMenu.ts). There are 7 files with high branching density (e.g., src/store/TaskFilter.ts, 44 branch points over 89 lines). Two files exceed 900 lines (src/store/ProjectStore.ts and its test). The CI health audit adds:
- Med - No
permissionsdeclared in.github/workflows/build.yml— the GITHUB_TOKEN inherits repo defaults. - Med - No Dependabot/Renovate configured — dependencies sit unpatched until manual audit.
- Med - No dependency vulnerability scan in CI — known-vulnerable packages reach builds undetected.
- Low - No
timeout-minuteson workflow jobs — a wedged job runs to the six-hour default.
Tests are present (17 files), CI runs, and no secrets are committed.
The Bottom Line
This is a functional, feature-complete project management plugin for Obsidian with real depth (dependencies, scheduling, recurring tasks). The main cost is structural: the hub modules and import cycles make changes to core types or utilities risky, and the 941-line ProjectStore.ts is hard to modify safely. Worth using for anyone already on Obsidian who wants local project management; worth contributing to only if you're prepared to refactor the store layer first.