Contributing
Bug reports and pull requests are welcome. Please open an issue first for significant changes.
Prerequisites
Setup
bash
git clone https://github.com/yushi265/zen-todo.git
cd zen-todo
pnpm installBuild
bash
# Development build with watch mode
pnpm dev
# Production build (includes type checking)
pnpm buildOutput files (main.js, manifest.json, styles.css) can be copied into your vault's .obsidian/plugins/zen-todo/ folder.
Project Structure
src/
├── main.ts # Plugin entry point & Obsidian lifecycle
├── settings.ts # Settings UI tab
├── types.ts # TypeScript interfaces
├── constants.ts # Defaults, view type ID, emoji markers
├── models/
│ └── task.ts # Task creation and mutation helpers
├── parser/
│ ├── markdown-parser.ts # Markdown → task object tree
│ └── markdown-serializer.ts # Task object tree → Markdown
├── utils/
│ └── date-utils.ts # Date formatting and comparison
└── views/
├── todo-view.ts # Sidebar panel (ItemView wrapper)
├── todo-controller.ts # State management & action dispatch
├── codeblock-processor.ts # Inline embedded view (MarkdownRenderChild)
├── list-selector.ts # Tab bar for list switching
├── task-input.ts # New task input row
├── task-section.ts # Incomplete / completed section rendering
├── task-item-renderer.ts # Individual task row + inline edit
├── drag-handler.ts # Task row drag & drop reorder
└── tab-drag-handler.ts # List tab drag & drop reorderArchitecture Overview
See CLAUDE.md for detailed architecture documentation.