Backlog.md
Markdown‑native Task Manager & Kanban visualizer for any Git repository
npm i -g backlog.md
or bun add -g backlog.md
or brew install backlog-md
or nix run github:MrLesk/Backlog.md

Backlog.md turns any folder with a Git repo into a self‑contained project board
powered by plain Markdown files and a zero‑config CLI.
Features
-
📝 Markdown-native tasks -- manage every issue as a plain .md
file
-
🔒 100 % private & offline -- backlog lives entirely inside your repo
-
📊 Instant terminal Kanban -- backlog board
paints a live board in your shell
-
📤 Board export -- backlog board export
creates shareable markdown reports
-
🌐 Modern web interface -- backlog browser
launches a sleek web UI for visual task management
-
🤖 AI-ready CLI -- "Claude, please take over task 33"
-
🔍 Rich query commands -- view, list, filter, or archive tasks with ease
-
💻 Cross-platform -- runs on macOS, Linux, and Windows
-
🆓 MIT-licensed & open-source -- free for personal or commercial use
Five‑minute tour
bun/npm i -g backlog.md or brew install backlog-md
backlog init "My Awesome Project"
backlog task create "Render markdown as kanban"
backlog board view or backlog browser
Claude I would like to build a search functionality in the web view that searches for:
* tasks
* docs
* decisions
Please create relevant tasks to tackle this request.
Claude please implement all tasks related to the web search functionality (task-10, task-11, task-12)
* before starting to write code use 'ultrathink mode' to prepare an implementation plan
* use multiple sub-agents when possible and dependencies allow
All data is saved under backlog
folder as human‑readable Markdown with the following format task-<task-id> - <task-title>.md
(e.g. task-10 - Add core search functionality.md
).
Web Interface
Launch a modern, responsive web interface for visual task management:
backlog browser
backlog browser --port 8080
backlog browser --no-open

The web interface provides:
- Interactive Kanban board with drag-and-drop functionality
- Task creation and editing with rich forms and validation
- Interactive acceptance criteria editor with checklist controls and instant persistence
- Real-time updates as you manage tasks
- Responsive design that works on desktop and mobile
- Archive tasks with confirmation dialogs
- Seamless CLI integration - changes sync with your markdown files
CLI reference
Project Setup
Initialize project | backlog init [project-name] (creates backlog structure with interactive configuration) |
Re-initialize | backlog init (preserves existing config, allows updates) |
The backlog init
command provides comprehensive project setup with interactive prompts for:
- Project name - identifier for your backlog
- Auto-commit - whether to automatically commit task changes to git
- Default editor - editor command for opening tasks (detects from environment)
- Remote operations - enable/disable fetching tasks from remote branches
- Web UI settings - port and browser auto-open preferences
- Agent guidelines - AI agent instruction files (CLAUDE.md, .cursorrules, etc.)
- Claude Code agent - optional Backlog.md agent for enhanced task management
When re-initializing an existing project, all current configuration values are preserved and pre-populated in prompts, allowing you to update only what you need.
Task Management
Create task | backlog task create "Add OAuth System" |
Create with description | backlog task create "Feature" -d "Add authentication system" |
Create with assignee | backlog task create "Feature" -a @sara |
Create with status | backlog task create "Feature" -s "In Progress" |
Create with labels | backlog task create "Feature" -l auth,backend |
Create with priority | backlog task create "Feature" --priority high |
Create with plan | backlog task create "Feature" --plan "1. Research\n2. Implement" |
Create with AC | backlog task create "Feature" --ac "Must work,Must be tested" |
Create with notes | backlog task create "Feature" --notes "Started initial research" |
Create with deps | backlog task create "Feature" --dep task-1,task-2 |
Create sub task | backlog task create -p 14 "Add Login with Google" |
Create (all options) | backlog task create "Feature" -d "Description" -a @sara -s "To Do" -l auth --priority high --ac "Must work" --notes "Initial setup done" --dep task-1 -p 14 |
List tasks | backlog task list [-s <status>] [-a <assignee>] [-p <parent>] |
List by parent | backlog task list --parent 42 or backlog task list -p task-42 |
View detail | backlog task 7 (interactive UI, press 'E' to edit in editor) |
View (AI mode) | backlog task 7 --plain |
Edit | backlog task edit 7 -a @sara -l auth,backend |
Add plan | backlog task edit 7 --plan "Implementation approach" |
Add AC | backlog task edit 7 --ac "New criterion" --ac "Another one" |
Remove AC | backlog task edit 7 --remove-ac 2 (removes AC #2) |
Remove multiple ACs | backlog task edit 7 --remove-ac 2 --remove-ac 4 (removes AC #2 and #4) |
Check AC | backlog task edit 7 --check-ac 1 (marks AC #1 as done) |
Check multiple ACs | backlog task edit 7 --check-ac 1 --check-ac 3 (marks AC #1 and #3 as done) |
Uncheck AC | backlog task edit 7 --uncheck-ac 3 (marks AC #3 as not done) |
Mixed AC operations | backlog task edit 7 --check-ac 1 --uncheck-ac 2 --remove-ac 4 |
Add notes | backlog task edit 7 --notes "Completed X, working on Y" |
Add deps | backlog task edit 7 --dep task-1 --dep task-2 |
Archive | backlog task archive 7 |
Multi-line descriptions
The CLI preserves literal newline characters; \n
sequences are not converted. To enter multi-paragraph text:
- Bash/Zsh:
backlog task create "Feature" --desc $'Line1\nLine2\n\nFinal paragraph'
- POSIX sh:
backlog task create "Feature" --desc "$(printf 'Line1\nLine2\n\nFinal paragraph')"
- PowerShell:
backlog task create "Feature" --desc "Line1
nLine2n
nFinal paragraph"`
The CLI help displays the Bash example with escaped \\n
sequences; when typing the command, use a single \n
to insert a newline.
Draft Workflow
Create draft | backlog task create "Feature" --draft |
Draft flow | backlog draft create "Spike GraphQL" → backlog draft promote 3.1 |
Demote to draft | backlog task demote <id> |
Board Operations
Kanban board | backlog board (interactive UI, press 'E' to edit in editor) |
Export board | backlog board export [file] (exports Kanban board to markdown) |
Export with version | backlog board export --export-version "v1.0.0" (includes version in export) |
Statistics & Overview
Project overview | backlog overview (interactive TUI showing project statistics) |
Web Interface
Web interface | backlog browser (launches web UI on port 6420) |
Web custom port | backlog browser --port 8080 --no-open |
Documentation
Create doc | backlog doc create "API Guidelines" |
Create with path | backlog doc create "Setup Guide" -p guides/setup |
Create with type | backlog doc create "Architecture" -t technical |
List docs | backlog doc list |
View doc | backlog doc view doc-1 |
Decisions
Create decision | backlog decision create "Use PostgreSQL for primary database" |
Create with status | backlog decision create "Migrate to TypeScript" -s proposed |
Agent Instructions
Update agent files | backlog agents --update-instructions (updates .cursorrules, CLAUDE.md, AGENTS.md, GEMINI.md, .github/copilot-instructions.md) |
Maintenance
Cleanup done tasks | backlog cleanup (move old completed tasks to completed folder) |
Full help: backlog --help
Configuration
Backlog.md merges the following layers (highest → lowest):
- CLI flags
backlog/config.yml
(per‑project)
~/backlog/user
(per‑user)
- Built‑ins
Configuration Commands
View all configs | backlog config list |
Get specific config | backlog config get defaultEditor |
Set config value | backlog config set defaultEditor "code --wait" |
Enable auto-commit | backlog config set autoCommit true |
Bypass git hooks | backlog config set bypassGitHooks true |
Enable cross-branch check | backlog config set checkActiveBranches true |
Set active branch days | backlog config set activeBranchDays 30 |
Available Configuration Options
defaultAssignee | Pre‑fill assignee | [] |
defaultStatus | First column | To Do |
statuses | Board columns | [To Do, In Progress, Done] |
dateFormat | Date/time format | yyyy-mm-dd hh:mm |
timezonePreference | Timezone for dates | UTC |
includeDatetimeInDates | Add time to new dates | true |
defaultEditor | Editor for 'E' key | Platform default (nano/notepad) |
defaultPort | Web UI port | 6420 |
autoOpenBrowser | Open browser automatically | true |
remoteOperations | Enable remote git operations | true |
autoCommit | Automatically commit task changes | false |
bypassGitHooks | Skip git hooks when committing (uses --no-verify) | false |
zeroPaddedIds | Pad all IDs (tasks, docs, etc.) with leading zeros | (disabled) |
checkActiveBranches | Check task states across active branches for accuracy | true |
activeBranchDays | How many days a branch is considered active | 30 |
Note: Set remoteOperations: false
to work offline. This disables git fetch operations and loads tasks from local branches only, useful when working without network connectivity.
Git Control: By default, autoCommit
is set to false
, giving you full control over your git history. Task operations will modify files but won't automatically commit changes. Set autoCommit: true
if you prefer automatic commits for each task operation.
Git Hooks: If you have pre-commit hooks (like conventional commits or linters) that interfere with backlog.md's automated commits, set bypassGitHooks: true
to skip them using the --no-verify
flag.
Performance: Cross-branch checking ensures accurate task tracking across all active branches but may impact performance on large repositories. You can disable it by setting checkActiveBranches: false
for maximum speed, or adjust activeBranchDays
to control how far back to look for branch activity (lower values = better performance).
Date/Time Support: Backlog.md now supports datetime precision for all dates. New items automatically include time (YYYY-MM-DD HH:mm format in UTC), while existing date-only entries remain unchanged for backward compatibility. Use the migration script bun src/scripts/migrate-dates.ts
to optionally add time to existing items.
Sharing & Export
Board Export
Export your Kanban board to a clean, shareable markdown file:
backlog board export
backlog board export project-status.md
backlog board export --force
backlog board export --readme
backlog board export --export-version "v1.2.3"
backlog board export --readme --export-version "Release 2024.12.1-beta"
Perfect for sharing project status, creating reports, or storing snapshots in version control.
📊 Backlog.md Project Status (v1.9.0)
This board was automatically generated by Backlog.md
Generated on: 2025-09-03 21:26:52
TASK-247 - Web UI - Read-only Description with Edit Toggle (Hide Editor Mode Buttons) #web-ui #editor #ux | └─ TASK-24.1 - CLI: Kanban board milestone view [@codex] | TASK-236 - Fix TUI Unicode rendering for CJK (Chinese shows as ?) [@codex] #tui #bug #unicode |
TASK-248 - Circular navigation in TUI list and Kanban board #ui #tui #kanban | | TASK-246 - Domain: split Description/Plan/Notes into first-party Task fields [@codex] #domain #parsing #web-ui #tui |
TASK-244 - TUI: add live updates via watch in task list and kanban [@codex] #tui #watcher #enhancement | | TASK-227 - Web UI: interactive acceptance criteria editor [@codex] #web-ui #enhancement |
TASK-218 - Update documentation and tests for sequences #sequences #documentation #testing | | TASK-245 - Fix case-insensitive priority filtering [@codex] |
TASK-217 - Create web UI for sequences with drag-and-drop #sequences #web-ui #frontend | | └─ TASK-217.01 - Sequences server: endpoints for list and move [@codex] #sequences |
└─ TASK-217.03 - Sequences web UI: move tasks and update dependencies #sequences | | TASK-215 - Implement TUI view for sequences #sequences #tui #ui |
└─ TASK-217.04 - Sequences web UI: tests #sequences | | └─ TASK-215.05 - TUI sequences: tests and stability [@codex] #sequences |
└─ TASK-217.02 - Sequences web UI: list sequences #sequences | | └─ TASK-215.04 - TUI sequences: create new sequences via drop positions [@codex] #sequences |
TASK-242 - Centralize task filtering logic to eliminate duplication [@codex] #refactoring #backend #cli | | └─ TASK-215.03 - TUI sequences: move tasks with dependency updates [@codex] #sequences |
TASK-241 - Consolidate assignee normalization into helper [@codex] | | └─ TASK-215.02 - TUI sequences: navigation and detail view [@codex] #sequences |
TASK-243 - Enable TUI task reordering with Shift+Arrow keys [@codex] #tui #ui #enhancement | | TASK-214 - Add CLI command to list sequences [@codex] #sequences #cli |
TASK-213 - Compute sequences from task dependencies #sequences #core | | TASK-234 - Investigate newline handling in CLI descriptions [@codex] #cli #bug #ux |
└─ TASK-215.01 - TUI sequences: read-only view #sequences | | TASK-232 - Nix build fails due to missing libstdc++.so.6 |
TASK-240 - Improve binary resolution on Apple Silicon (Rosetta/arch mismatch) [@codex] #packaging #bug #macos | | TASK-231 - Fix case-insensitive status grouping and status normalization [@codex] |
TASK-239 - Feature: Auto-link tasks to documents/decisions + backlinks [@codex] #web #enhancement #docs | | TASK-230 - Add --plain to task create/edit and print plain details after operation [@codex] #cli #plain-output |
TASK-238 - Fix web editor selection/cursor issues (MDEditor integration) [@codex] #web #bug #editor | | |
TASK-237 - Fix invalid git ref 'origin/origin' during remote task loading [@codex] #git #bug #remote | | |
TASK-235 - Fix duplicate Acceptance Criteria sections in tasks [@codex] #cli #bug | | |
TASK-233 - MVP: Live task watcher in TUI (Bun.watch) [@codex] #tui #watcher #mvp | | |
TASK-228 - Replace @uiw/react-md-editor with TOAST UI Editor for rich-text editing #web-ui #enhancement #editor | | |
TASK-222 - Improve task and subtask visualization in web UI | | |
TASK-208 - Add paste-as-markdown support in Web UI #web-ui #enhancement #markdown | | |
TASK-200 - Add Claude Code integration with workflow commands during init #enhancement #developer-experience | | |
License
Backlog.md is released under the MIT License – do anything, just give credit. See LICENSE.