The terminal kanban that gets out of your way.
Inspired by lazygit · Built on ratatui
- Zero latency — keyboard-driven, no clicks, no menus, no mouse
- No account, no cloud, no browser — your data is a file on your disk
- Git-native — generate branch names and
git checkoutcommands from any card - LLM-native — full MCP server (40 tools) works with Claude Code, Cursor, and any MCP client
- Offline-first — works anywhere; JSON and SQLite backends, atomic writes, live conflict detection
- Multiple boards, each with custom columns and WIP limits
- Rich cards: title, description, priority (Low/Medium/High/Critical), status (Todo/InProgress/Blocked/Done), story points (1–5), due dates
- Card numbering with configurable prefix (e.g.
KAN-42) - Card dependencies: parent/child relationships with cycle detection
- Archive and restore cards
- Full sprint lifecycle: Planning → Active → Completed / Cancelled
- Carry uncompleted cards to the next sprint with one key
- Per-sprint card prefix overrides
- Sprint logs track assignment history per card
- 3 view modes: Flat list / Grouped by column / Kanban board — toggle with
V - Real-time
/search - Sort by priority, points, due date, status, or position
- Filter by sprint, status, or search result
- Multi-select for bulk archive / move / sprint-assign
- Full undo/redo (
u/U, up to 100 levels) - External editor for descriptions (respects
$EDITOR) - Clipboard:
ycopies git branch name,Ycopiesgit checkoutcommand - Import/export boards as JSON
- JSON (default) and SQLite backends — switch by file extension
- Atomic writes (temp file → rename) prevent corruption
- Live file watching: auto-reload when another instance writes
- Conflict detection with user prompt when local edits clash
- V1 → V2 JSON migration with
.v1.backupsafety copy
- TUI — full keyboard-driven terminal UI
- CLI — scriptable; all operations, JSON output, pagination
- MCP server — 40 tools for LLM integration
cargo install kanban-cligit clone https://github.com/fulsomenko/kanban
cd kanban
cargo install --path crates/kanban-clinix run github:fulsomenko/kanbanyay -S kanbanFor y/Y clipboard operations to persist after the app exits, you need a clipboard manager:
- Wayland:
wl-clip-persist,cliphist,clipman, or your DE's built-in manager - X11: Most desktop environments include one by default
kanban # launch with default kanban.json
kanban myboard.json # load a specific file
kanban myboard.sqlite # load a SQLite filePress ? at any time to see context-sensitive help.
export KANBAN_FILE=kanban.json
kanban board create --name "My Project"
kanban board list
kanban card create --board-id <ID> --column-id <ID> --title "Fix the bug" --priority high
kanban card list --board-id <ID>
kanban sprint create --board-id <ID>
kanban sprint activate <SPRINT_ID> --duration-days 14
kanban card assign-sprint <CARD_ID> --sprint-id <SPRINT_ID>All commands output JSON. Use kanban --help for full reference.
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"kanban": {
"command": "kanban-mcp",
"args": ["/path/to/kanban.json"]
}
}
}Claude Code (.mcp.json in project root):
{
"mcpServers": {
"kanban": {
"command": "kanban-mcp",
"args": ["kanban.json"]
}
}
}Press ? in the app to see bindings for the current context.
| Key | Action |
|---|---|
j/↓ |
Navigate down |
k/↑ |
Navigate up |
gg |
Jump to top |
G |
Jump to bottom |
Enter/Space |
Open board detail |
n |
New board |
r |
Rename board |
e |
Edit board |
x |
Export board |
X |
Export all boards |
i |
Import board from file |
u |
Undo |
U |
Redo |
S |
Open settings |
1/2 |
Focus boards/cards panel |
q |
Quit |
? |
Help |
| Key | Action |
|---|---|
j/↓, k/↑ |
Navigate down/up |
gg / G |
Jump to top/bottom |
{ / } |
Half-page up/down |
h/l |
Previous/next column |
H/L |
Move card left/right column |
Enter/Space |
Open card detail |
n |
New card |
e |
Edit card |
c |
Toggle done |
p |
Set priority |
d |
Archive card(s) |
D |
View archived cards |
v |
Toggle card selection |
Ctrl+a |
Select all visible cards |
Esc |
Clear selection |
P |
Set priority (bulk) |
a |
Assign to sprint |
o |
Sort cards |
O |
Toggle sort order |
t |
Toggle sprint filter |
T |
Filter options |
/ |
Search |
s |
Manage child cards |
V |
Toggle view mode |
u / U |
Undo / Redo |
1/2 |
Focus boards/cards panel |
q |
Quit |
? |
Help |
| Key | Action |
|---|---|
1–5 |
Focus Title / Metadata / Description / Parents / Children panel |
e |
Edit current panel |
r |
Manage parent cards |
R |
Manage child cards |
y |
Copy git branch name to clipboard |
Y |
Copy git checkout command to clipboard |
a |
Assign to sprint |
d |
Delete card |
u / U |
Undo / Redo |
q/Esc |
Back |
? |
Help |
| Key | Action |
|---|---|
1–5 |
Focus Name / Description / Settings / Sprints / Columns panel |
e |
Edit current panel |
p |
Set branch prefix |
n |
New sprint (Sprints panel) / New column (Columns panel) |
r |
Rename column (Columns panel) |
d |
Delete column (Columns panel) |
J/K |
Reorder column up/down (Columns panel) |
j/k |
Navigate within panel |
Enter/Space |
Open sprint detail (Sprints panel) |
u / U |
Undo / Redo |
q/Esc |
Back |
? |
Help |
| Key | Action |
|---|---|
h/l |
Switch between uncompleted/completed panels |
j/k |
Navigate cards |
a |
Activate sprint |
c |
Complete sprint |
p |
Set sprint prefix |
C |
Set card prefix override |
o/O |
Sort / Toggle sort order |
v |
Select card(s) |
u / U |
Undo / Redo |
q/Esc |
Back |
? |
Help |
| Key | Action |
|---|---|
j/k |
Navigate |
gg/G |
Jump to top/bottom |
{/} |
Half-page up/down |
r |
Restore card(s) |
x |
Delete card(s) permanently |
v |
Select for bulk operation |
V |
Toggle view mode |
u / U |
Undo / Redo |
q/Esc |
Back |
crates/
├── kanban-core → Shared types, error handling, config, reusable state primitives
├── kanban-domain → Domain models, business logic, filtering & sorting
├── kanban-persistence → Persistence trait layer (no I/O)
├── kanban-persistence-json → JSON file storage backend
├── kanban-persistence-sqlite → SQLite storage backend
├── kanban-service → KanbanContext, persistence orchestration, undo/redo
├── kanban-tui → Terminal UI with ratatui
├── kanban-cli → CLI entry point (clap)
└── kanban-mcp → Model Context Protocol server
graph LR
CLI[kanban-cli] --> TUI[kanban-tui]
CLI --> SVC[kanban-service]
MCP[kanban-mcp] --> SVC
TUI --> SVC
SVC --> PER[kanban-persistence]
SVC -.-> JSON[kanban-persistence-json]
SVC -.-> SQL[kanban-persistence-sqlite]
JSON --> PER
SQL --> PER
PER --> DOM[kanban-domain]
DOM --> CORE[kanban-core]
| Crate | Description | README |
|---|---|---|
kanban-core |
Shared types, config, errors, graph, pagination | → |
kanban-domain |
Domain models, business logic | → |
kanban-persistence |
Persistence trait layer | → |
kanban-persistence-json |
JSON file backend | → |
kanban-persistence-sqlite |
SQLite backend | → |
kanban-service |
Service layer, KanbanContext, undo/redo | → |
kanban-tui |
Terminal UI | → |
kanban-cli |
CLI entry point | → |
kanban-mcp |
MCP server | → |
- V2 envelope format:
{ "version": 2, "metadata": {...}, "data": {...} } - Automatic V1→V2 migration: original file renamed to
.v1.backupon first load - Atomic writes: write to temp file, then rename — no partial writes on crash
- Debounced saving: 500ms minimum interval between saves
- File selected by any path that doesn't match a SQLite extension
- WAL mode with foreign key enforcement
- Connection pool: max 2 connections
- Relational schema: boards, columns, cards, archived cards, sprints, sprint logs, dependency graph edges, and more
- Schema versioning with migration skeleton for future upgrades
- File selected by
.sqlite,.sqlite3, or.dbextension
- File watching: detects changes written by other TUI or MCP instances
- Auto-reload: applies external changes automatically when no local edits exist
- Conflict prompt: when local edits clash with an external write, you choose to reload or keep
- Progressive auto-save
- Full CLI interface
- Card dependencies (parent/child)
- Multiple storage backends (JSON + SQLite)
- MCP server for LLM integration
- Full undo/redo
- Sprint planning lifecycle
- Bulk operations
- Configurable keybindings
- Attachments (files on cards)
- Audit log
- HTTP API for remote access
- Collaborative / sync features
See CONTRIBUTING.md for development workflow, code style, and testing guidelines.
Apache 2.0 — see LICENSE.md
