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.
-
📝 Markdown-native tasks -- manage every issue as a plain
.mdfile -
🔒 100 % private & offline -- backlog lives entirely inside your repo
-
📊 Instant terminal Kanban --
backlog boardpaints a live board in your shell -
📤 Board export --
backlog board exportcreates shareable markdown reports -
🌐 Modern web interface --
backlog browserlaunches a sleek web UI for visual task management -
🤖 AI-ready CLI -- "Claude, please take over task 33"
-
🔍 Powerful search -- fuzzy search across tasks, docs & decisions with
backlog search -
📋 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
# 1. Make sure you have Backlog.md installed
bun/npm i -g backlog.md or brew install backlog-md
# 2. Bootstrap a repo + backlog
backlog init "My Awesome Project"
# 3. Capture work
backlog task create "Render markdown as kanban"
# 4. See where you stand
backlog board view or backlog browser
# 5. Find what you need
backlog search "markdown" or just backlog search for interactive filters
# 6. Create tasks using Claude-code, Gemini, Codex or Jules
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.
# 7. Assign tasks to AI
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 allowAll 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).
Launch a modern, responsive web interface for visual task management:
# Start the web server (opens browser automatically)
backlog browser
# Custom port
backlog browser --port 8080
# Don't open browser automatically
backlog browser --no-openThe 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
| Action | Example |
|---|---|
| Initialize project | backlog init [project-name] (creates backlog structure with a minimal interactive flow) |
| Re-initialize | backlog init (preserves existing config, allows updates) |
| Advanced settings wizard | backlog config (no args) — launches the full interactive configuration flow |
backlog init keeps first-run setup focused on the essentials:
- Project name – identifier for your backlog (defaults to the current directory on re-run).
- Agent instruction files – pick which AI Agent instruction files to create (CLAUDE.md, AGENTS.md, GEMINI.md, Copilot, or skip).
- Advanced settings prompt – default answer “No” finishes init immediately; choosing “Yes” jumps straight into the advanced wizard documented in Configuration.
You can rerun the wizard anytime with backlog config. All existing CLI flags (for example --defaults, --agent-instructions, or --install-claude-agent true) continue to provide fully non-interactive setups, so existing scripts keep working without change.
- Document IDs are global across all subdirectories under
backlog/docs. You can organize files in nested folders (e.g.,backlog/docs/guides/), andbacklog doc listandbacklog doc view <id>work across the entire tree. Example:backlog doc create -p guides "New Guide".
| Action | Example |
|---|---|
| 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" (replaces existing) |
| Append notes | backlog task edit 7 --append-notes "New findings" |
| Add deps | backlog task edit 7 --dep task-1 --dep task-2 |
| Archive | backlog task archive 7 |
The CLI preserves input literally; \n sequences are not auto‑converted. Use one of the following to insert real newlines:
- Bash/Zsh (ANSI‑C quoting)
- Description:
backlog task create "Feature" --desc $'Line1\nLine2\n\nFinal paragraph' - Plan:
backlog task edit 7 --plan $'1. Research\n2. Implement' - Notes:
backlog task edit 7 --notes $'Completed A\nWorking on B' - Append notes:
backlog task edit 7 --append-notes $'Added X\nAdded Y'
- Description:
- POSIX sh (printf)
backlog task create "Feature" --desc "$(printf 'Line1\nLine2\n\nFinal paragraph')"
- PowerShell (backtick)
backlog task create "Feature" --desc "Line1nLine2nnFinal paragraph"`
Tip: Help text shows Bash examples with escaped \\n for readability; when typing, $'\n' expands to a newline.
Find tasks, documents, and decisions across your entire backlog with fuzzy search:
| Action | Example |
|---|---|
| Search tasks | backlog search "auth" |
| Filter by status | backlog search "api" --status "In Progress" |
| Filter by priority | backlog search "bug" --priority high |
| Combine filters | backlog search "web" --status "To Do" --priority medium |
| Plain text output | backlog search "feature" --plain (for scripts/AI) |
Search features:
- Fuzzy matching -- finds "authentication" when searching for "auth"
- Interactive filters -- refine your search in real-time with the TUI
- Live filtering -- see results update as you type (no Enter needed)
| Action | Example |
|---|---|
| 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> |
| Action | Example |
|---|---|
| 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) |
| Action | Example |
|---|---|
| Project overview | backlog overview (interactive TUI showing project statistics) |
| Action | Example |
|---|---|
| Web interface | backlog browser (launches web UI on port 6420) |
| Web custom port | backlog browser --port 8080 --no-open |
| Action | Example |
|---|---|
| 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 |
| Action | Example |
|---|---|
| Create decision | backlog decision create "Use PostgreSQL for primary database" |
| Create with status | backlog decision create "Migrate to TypeScript" -s proposed |
| Action | Example |
|---|---|
| Update agent files | backlog agents --update-instructions (updates CLAUDE.md, AGENTS.md, GEMINI.md, .github/copilot-instructions.md) |
| Action | Example |
|---|---|
| Cleanup done tasks | backlog cleanup (move old completed tasks to completed folder) |
Full help: backlog --help
Backlog.md merges the following layers (highest → lowest):
- CLI flags
backlog/config.yml(per‑project)~/backlog/user(per‑user)- Built‑ins
| Action | Example |
|---|---|
| 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 |
Run backlog config with no arguments to launch the full interactive wizard. This is the same experience triggered from backlog init when you opt into advanced settings, and it walks through the complete configuration surface:
- Cross-branch accuracy:
checkActiveBranches,remoteOperations, andactiveBranchDays. - Git workflow:
autoCommitandbypassGitHooks. - ID formatting: enable or size
zeroPaddedIds. - Editor integration: pick a
defaultEditorwith availability checks. - Web UI defaults: choose
defaultPortand whetherautoOpenBrowsershould run.
Skipping the wizard (answering “No” during init) applies the safe defaults that ship with Backlog.md:
checkActiveBranches=true,remoteOperations=true,activeBranchDays=30.autoCommit=false,bypassGitHooks=false.zeroPaddedIdsdisabled.defaultEditorunset (falls back to your environment).defaultPort=6420,autoOpenBrowser=true.
Whenever you revisit backlog init or rerun backlog config, the wizard pre-populates prompts with your current values so you can adjust only what changed.
| Key | Purpose | Default |
|---|---|---|
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: falseto work offline. This disables git fetch operations and loads tasks from local branches only, useful when working without network connectivity.
Git Control: By default,
autoCommitis set tofalse, giving you full control over your git history. Task operations will modify files but won't automatically commit changes. SetautoCommit: trueif 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: trueto skip them using the--no-verifyflag.
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: falsefor maximum speed, or adjustactiveBranchDaysto 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.tsto optionally add time to existing items.
Export your Kanban board to a clean, shareable markdown file:
# Export to default Backlog.md file
backlog board export
# Export to custom file
backlog board export project-status.md
# Force overwrite existing file
backlog board export --force
# Export to README.md with board markers
backlog board export --readme
# Include a custom version string in the export
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.
This board was automatically generated by Backlog.md
Generated on: 2025-10-06 19:51:05
| To Do | In Progress | Done |
|---|---|---|
| TASK-276 - Implement drag mode for TUI kanban board | TASK-280 - Fix TUI task list selection and detail pane synchronization bug [@codex] #bug #tui |
TASK-284 - Simplify init flow; launch advanced settings via backlog config [@codex] #cli #init #config |
| TASK-270 - Prevent command substitution in task creation inputs [@codex] | └─ TASK-24.1 - CLI: Kanban board milestone view [@codex] | TASK-283 - Fix TUI board duplicating cards after external status changes [@codex] |
| TASK-268 - Show agent instruction version status [@codex] | TASK-273 - Refactor search [@codex] #core #search |
TASK-282 - Fix TUI detail pane loading state regression [@codex] #bug |
| TASK-267 - Add agent instruction version metadata [@codex] | TASK-275 - Extract task reordering logic to core module [@codex] | |
| TASK-260 - Web UI: Add filtering to All Tasks view [@codex] #web-ui #filters #ui |
TASK-262 - TUI: Show all configured status columns in Kanban [@codex] #tui #board #kanban #config #parity |
|
| TASK-259 - Add task list filters for Status and Priority #tui #filters #ui |
TASK-281 - Fix backlog init skip option [@codex] #bug |
|
| TASK-257 - Deep link URLs for tasks in board and list views | TASK-279 - Add cleanup functionality to web UI for managing completed tasks [@claude] | |
| TASK-200 - Add Claude Code integration with workflow commands during init #enhancement #developer-experience |
TASK-274 - Fix Kanban boards missing live updates [@claude] | |
| TASK-244 - TUI: add live updates via watch in task list and kanban [@codex] #tui #watcher #enhancement |
└─ TASK-273.06 - 273.06: Web UI on centralized search [@codex] #web #search #ui |
|
| TASK-218 - Update documentation and tests for sequences #sequences #documentation #testing |
└─ TASK-273.05 - 273.05: Server endpoints on shared store/search [@codex] #server #search #infra |
|
| TASK-217 - Create web UI for sequences with drag-and-drop #sequences #web-ui #frontend |
└─ TASK-273.04 - 273.04: CLI & TUI search integration [@codex] #cli #tui #search |
|
| └─ TASK-217.03 - Sequences web UI: move tasks and update dependencies #sequences |
||
| └─ TASK-217.04 - Sequences web UI: tests #sequences |
||
| └─ TASK-217.02 - Sequences web UI: list sequences #sequences |
||
| TASK-243 - Enable TUI task reordering with Shift+Arrow keys [@codex] #tui #ui #enhancement |
||
| TASK-240 - Improve binary resolution on Apple Silicon (Rosetta/arch mismatch) [@codex] #packaging #bug #macos |
||
| TASK-239 - Feature: Auto-link tasks to documents/decisions + backlinks [@codex] #web #enhancement #docs |
||
| TASK-222 - Improve task and subtask visualization in web UI | ||
| TASK-208 - Add paste-as-markdown support in Web UI #web-ui #enhancement #markdown |
Backlog.md is released under the MIT License – do anything, just give credit. See LICENSE.