Kanban
v1.0.24Updated 20 Oct 2026Drag-and-drop board with columns of cards (dnd-kit). Use for task pipelines, sales stages, kanban workflows.
Preview
Live · 20 stories▸Why this is recommendedkanbanboarddnddrag+3
The default, out-of-the-box Kanban.
- ✓Task pipelines
- ✓Sales stage boards
- ✓Recruiting pipelines
- ✓A board whose lists live in an API, where only the actions the server supports may be offered
- Drag cards between columns (dnd-kit)
- Reorder within column
- Column-level WIP limits
- Per-card metadata (assignee, priority, due)
- Optional column collapse
- Add-card affordance per column (showAddCard gates it for derived boards)
- Column ⋯ menu (rename / WIP / move / clear / archive) and the card right-click menu offer an action only when it can take effect: everything on an uncontrolled board, and on a controlled one only what onChange or that action callback reports (fb_b45fe487)
- Explicit trims: columnActions / cardActions (false or a whitelist), enableInlineRename, renderColumnSettings — with no rows left, no ⋯ trigger and no card menu are rendered
- i18n: labels prop overrides every built-in string (composers, menus, aria-labels, drag announcements); Date due dates and counts format via LocaleProvider (Buddhist-calendar aware)
- ✕Linear lists (use DataTable)
- ✕Calendar events (use BuildCalendar)
Install
Ask your agent, or call the MCP tool directly. The resolved bundle is written into your project.
Usage
Tick variants in the left menu — each adds a tab with that variant’s real story source, the same code the preview above renders.
Props
columnsControlled columns — the board renders exactly this and keeps no copy. Pair with onChange (or the per-action callbacks) so its actions can take effect
—defaultColumnsUncontrolled initial columns — the board owns the state, so every action is real
—onChangeThe whole next board after any mutation. On a controlled board this alone re-enables every column/card action
—onCardMoveCard dropped (or moved from the card menu)
—onColumnMoveColumn reordered — also what makes Move left / Move right offerable on a controlled board
—onColumnRenameInline rename committed — gates Rename list + the click-to-rename title on a controlled board
—onColumnArchiveArchive list chosen — gates that row on a controlled board
—onColumnClearClear list chosen. Wire it on a server-backed board; without it (and without onChange) Clear list is not offered (fb_b45fe487)
—onColumnWipLimitChangeWIP limit set or cleared. Same rule as onColumnClear
—onCardClickCard body click; also the Open card row of the context menu
—onCardEditQuick-edit pencil; also the Edit card row
—onCardCopyCopy card chosen from the card menu — gates that row on a controlled board
—onCardArchiveArchive card chosen from the card menu (uncontrolled boards also remove it) — gates that row on a controlled board
—onCardCoverChangeCover colour picked or cleared from the card menu — gates the Cover submenu on a controlled board
—columnActionsTrim the column ⋯ menu (fb_b45fe487). Omit for the capability rule above; false drops the menu (no ⋯ trigger); an array whitelists rows inside the rule; true forces every row
—cardActionsSame for the card right-click menu; false means a right-click opens nothing. open/edit still need onCardClick/onCardEdit
—enableInlineRenameDouble-click / Enter / F2 rename on a column title. Defaults to whatever columnActions resolved rename to; false leaves a plain title (and drops the Rename list row that would open it)
—renderColumnSettingsReplace the ⋯ rows: receives the column and the rows the rule resolved, so a derived board can append its own server-backed actions or return [] for none
—showAddCardShow the per-column 'Add a card' affordances. Defaults to true when onAddCard is provided — set false (or omit onAddCard) for boards whose cards are derived elsewhere.
—showAddColumnShow the 'Add another list' composer. Defaults to true when onAddColumn is provided
—loadingColumn/card skeleton in a labelled role="status" region (loadingColumnCount sets the number)
—enableFiltersSearch + assignee/priority filter ribbon above the board
—labelsOverride any built-in UI string — composers, menus, aria-labels, drag announcements (i18n). Merged over DEFAULT_KANBAN_LABELS; {token} templates for announcements. Card dueDate also accepts a Date, formatted through LocaleProvider. See the ThaiLocale story.
—