A beautiful terminal kanban board built with OpenTUI React
Project description
◈ KanFlow
A beautiful terminal kanban board built with OpenTUI React.
Jira-style card editing · Dynamic columns · Terminal-aware theming · Responsive layout · Vim navigation
Features
- Jira-style card detail — open any card to see title + description + icon, Tab between fields, Enter to edit inline
- Multi-step card creation —
nprompts for title, then description - Dynamic columns — add, rename, delete columns. No limit on how many
- Terminal-aware theming — auto-detects Ghostty, iTerm2, Kitty, WezTerm, Alacritty
- Responsive layout — columns resize to fit your terminal width
- Keyboard-first — Vim-style (
hjkl) and arrow key navigation - Persistent storage — board state saved to
~/.kanflow/data.json - AI agent plugins — Claude Code, OpenCode, Codex, Copilot, Cursor, Windsurf, Kiro can all manage your board
- Modern icons — ◇ ◈ ◆ ● ◎ ▣ ⬡ ✦ ⬢ ◉
- Custom card icons — each card gets a status icon by column (○ ◐ ●), or set your own per card
- Flat card list — clean, borderless card rows with status indicators
Install
npm (requires bun)
bun install -g kanflow
kanflow
curl (auto-adds to PATH, reloads shell)
curl -fsSL https://raw.githubusercontent.com/yashwanthbogam/kanflow/main/install.sh | bash
This will:
- Install bun if not present
- Clone the repo to
~/.kanflow/repo - Run
bun install - Create
~/.local/bin/kanflowlauncher - Auto-add to PATH in
.zshrc,.bashrc,.bash_profile,.profile, and fishconfig.fish - Reload your shell —
kanflowworks immediately
pip
pip install kanflow
Requires bun on your system. The Python package wraps the bun-based TUI.
Homebrew
brew tap yashwanthbogam/kanflow https://github.com/yashwanthbogam/kanflow
brew install kanflow
From source (local development)
git clone https://github.com/yashwanthbogam/kanflow.git
cd kanflow
bun install
bun run start
Or run directly:
bun run src/index.tsx
Keyboard Shortcuts
Navigation
| Key | Action |
|---|---|
← → / h l |
Switch columns |
↑ ↓ / j k |
Navigate cards |
Cards (Jira-style)
| Key | Action |
|---|---|
Enter / e |
Open card detail view |
n |
New card (title → description) |
x / Delete |
Delete card |
Shift+← Shift+→ |
Move card left/right |
In Detail View
| Key | Action |
|---|---|
Tab |
Cycle between title ↔ description ↔ icon |
Enter |
Edit the selected field |
Esc |
Close detail / cancel edit |
Column Management
| Key | Action |
|---|---|
Shift+A |
Add new column |
Shift+R |
Rename current column |
Shift+D |
Delete current column |
General
| Key | Action |
|---|---|
? |
Toggle help overlay |
q / Esc |
Quit |
Icon System
Default Status Icons
Each card automatically gets a status icon based on its column position:
| Column Position | Icon | Meaning |
|---|---|---|
| 1st column | ○ | Uncompleted / Backlog |
| 2nd column | ◐ | In Progress |
| 3rd column | ● | Completed / Done |
| 4th+ columns | ◇ ◈ ◆ ✦ ⬡ … | Rotating icons |
Custom Card Icons
Override any card's icon in the detail view:
- Press
Enteroreto open card detail - Press
Tabuntil the ICON field is selected - Press
Enterto edit - Type or paste any icon/emoji and press
Enter
Available palette:
○ ◐ ● ◇ ◈ ◆ ✦ ⬡ ⬢ ◉ ★ ☆ ✓ ✗ ⚡ ⚙ ♦ ♠ ▶ ■ □ ▪ ▫ ◘ ◙ ⊕ ⊗ ⊙ ⊛ ⊜
You can also use any Unicode character or emoji.
Terminal Themes
| Terminal | Theme |
|---|---|
| Ghostty | GitHub Dark — blues and greens |
| iTerm2 | Tokyo Night — purples and pinks |
| Kitty | Nord — cool blues and muted tones |
| WezTerm | Catppuccin — pastels and lavender |
| Alacritty / Other | Catppuccin Mocha (default) |
AI Agent Integration
KanFlow includes plugins for all major coding agents. Each agent can read/write ~/.kanflow/data.json to manage cards and columns — just like a user.
Supported Agents
| Agent | Plugin Location | How It Works |
|---|---|---|
| Claude Code | .claude/commands/kanflow.md |
Slash command: /kanflow |
| OpenCode | skills/kanflow/SKILL.md |
Auto-discovered skill |
| Codex | codex/AGENTS.md |
Agent instructions |
| GitHub Copilot | .github/copilot-instructions.md |
Custom instructions |
| Cursor | .cursor/rules/kanflow.mdc |
Rules with glob matching |
| Windsurf | .windsurf/rules/kanflow.md |
Cascade rules |
| Kiro | .kiro/skills/kanflow/SKILL.md |
Kiro skill |
| Any AGENTS.md agent | AGENTS.md |
Universal standard |
What Agents Can Do
All agents interact with the board by reading/writing ~/.kanflow/data.json:
- Add cards — push
{ "id": "<timestamp>", "title": "...", "desc": "...", "icon": "..." }into a column'scardsarray - Edit cards — find by
id, updatetitle,desc, oricon - Move cards — remove from source column, append to destination
- Delete cards — filter out by
id - Add columns — append
{ "id": "<slug>", "name": "...", "icon": "◇", "cards": [] }tocolumns - Rename columns — find by
id, updatename - Delete columns — filter out by
id(keep at least one)
Data Format
{
"columns": [
{
"id": "backlog",
"name": "Backlog",
"icon": "◇",
"cards": [
{ "id": "1", "title": "Setup project", "desc": "Initialize repo", "icon": "○" }
]
},
{ "id": "progress", "name": "In Progress", "icon": "◈", "cards": [] },
{ "id": "done", "name": "Done", "icon": "◆", "cards": [] }
]
}
- Columns are not limited to 3 — add as many as you need
- Card
iconis optional — defaults based on column position - Card IDs are unique string timestamps
- Column IDs are lowercase slugs
Quick Agent Commands
# Read the board
cat ~/.kanflow/data.json | jq .
# Launch the TUI
kanflow
Data Storage
Board data is persisted at ~/.kanflow/data.json. Delete this file to reset to the default board.
Requirements
- bun >= 1.3.0
- A modern terminal with true-color support
Tech Stack
- OpenTUI — native terminal UI core (Zig + TypeScript)
- @opentui/react — React reconciler for OpenTUI
- React 19
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kanflow-1.0.0.tar.gz.
File metadata
- Download URL: kanflow-1.0.0.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d18f5af1bbcaf32729ada262e9494f57251befff4f3fa0b140e238872b0cb094
|
|
| MD5 |
b68b7541ab50994cb1d6b2d022f6192c
|
|
| BLAKE2b-256 |
f9dad6405fb3003acaf181123ce787054da4dbe51d29b9c5ecb681f935817238
|
File details
Details for the file kanflow-1.0.0-py3-none-any.whl.
File metadata
- Download URL: kanflow-1.0.0-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fdfc2a952119d3bd1252950d0af2eec6e2c6c952249aca65cbee616bfad81acf
|
|
| MD5 |
5470178d40708654885518cc2f85b679
|
|
| BLAKE2b-256 |
85c59563848daa2493c5d31b15fa400cf01562c8e991d77b0c38674233768c35
|