Self-hosted personal Kanban for your terminal. Linux-only.
No cloud, no account. Your board lives as a single board.json on your machine. Manage tasks with deadlines, priorities, and tags — all from a fast TUI.
Built with Rust, ratatui + crossterm. Clean, modular codebase.
- Private by design — local JSON file, no sync required
- Terminal-native — stays in your workflow, works over SSH
- Custom boards — any columns you want, not just To Do / Doing / Done
- Rich tasks — title + description, due dates, priority, tags
- Start from scratch — delete everything and rebuild; onboarding guides you
Boards
- Add, rename, delete, and reorder columns
- Start empty and build your own flow, or create from template
- Welcome screen when empty guides you to your first column
Tasks
- Title and description — description is long (wraps, no limit, shown full in detail view)
- Deadline (
YYYY-MM-DD) — overdue in red, today in yellow - Priority — Low · Medium ▲ High ‼ Urgent (color + icon,
pto cycle) - Tags — comma-separated, e.g.
work, bug - URL —
https://…(🔗in list,oto open in browser,https://required)
All changes auto-save.
Requires Rust 1.98+.
git clone https://github.com/revprm/termiban
cd termiban
cargo build --release
# binary at target/release/termiban
# optional: install to ~/.cargo/bin
cargo install --path .
# run
cargo run --release
# or
termibanPortable data file:
TERMIBAN_DATA_PATH=/tmp/board.json termibanCompatibility: Linux only. macOS and Windows are not supported.
termiban- First run gives you a template board:
To Do→In Progress→Done. - Press
?for help,qto quit.
To build your own board from scratch:
- Open board manager:
B - Press
cto clear, thenato addBacklog,Cto addDoing,Cto addReview…
Or delete columns one by one with B → d until empty — the welcome screen will offer a (add column) or t (template).
Navigate
h/lor←/→— columnsj/kor↓/↑— tasksH/L— move task to prev/next column
Tasks
n— quick add (title only) ·N— full add (all fields incl. URL + long desc)e— quick edit ·E— full editEnter/v— view details (wrapped long description + URL)p— cycle priority ·o— open URLd/x— delete
In full form (N/E) — 6 fields: Title → Description (long) → Deadline → Priority → Tags → URL
Tab/Shift+Tab— next/prev fieldpon Priority — cycleEnter— save (validatesYYYY-MM-DDandhttps://),Esc— cancel
Board
B— board manager →aadd,rrename,ddelete,ttemplate,cclear,H/LmoveC— quick add column,R— quick rename
General: ? help, q/Esc quit.
Auto-saved JSON. Location (in order):
$TERMIBAN_DATA_PATHor$TERMIBAN_DATAif set$XDG_DATA_HOME/termiban/board.json~/.local/share/termiban/board.json./board.json
Long descriptions? Paste as much as you want — detail view wraps, no hard limit. Add a URL for quick o open.
Edit board.json by hand if you like:
{
"title": "My Board",
"columns": [
{"name": "Backlog", "tasks": []},
{"name": "Doing", "tasks": [
{"id":1,"title":"Fix login","description":"Long notes here...\nMultiple paragraphs wrap in detail view.","deadline":"2026-09-01","priority":"high","tags":["work"],"url":"https://github.com/me/proj","created_at":"2026-08-30"}
]}
],
"next_id": 2
}Highly modular — easy to read and extend:
src/
├── main.rs — terminal setup
├── board/ — data model (Task, Column, Board, Priority)
├── storage.rs — load/save
├── app/ — state, task & board logic, key handlers
└── ui/ — rendering (board, footer, popups)
└── popups/ — welcome, task form/detail, board manager, help
boardis pure data,storageis only I/Oapphandles all logic,uionly reads state
cargo check
cargo test -- --test-threads=1 # 14 tests
cargo build --release