Installation
Theme
Mode

Data display

Kanban

A working board, not a snapshot. Cards carry priority, tags, due dates, subtask and comment counts; columns enforce WIP limits and count their load. Drag a card across columns, regroup the whole board by priority, and add work inline.

$npx shadcn@latest add @orbit/kanban

Overview

Live component — drag any card to another column (a blue line shows exactly where it lands), toggle Group: Priority, or hit + Add card to add one inline. The columns scroll sideways inside the board.

Sprint 24 — drag between columns, quick-add, group toggle
Sprint 24
Jun 23 – Jul 4 · 12 in flight
ARSCJLPN+3
Backlog3
ORB-1461
Audit empty states across the app
Design
Jul 80/52
MK
ORB-1455
Spike: offline-first sync
Research
4
PN
ORB-1450
Keyboard shortcuts for board view
Frontend
Jul 111/6
SC
To do3 / 4
ORB-1442
Redesign task card density toggle
DesignFrontend
Jun 302/73
AR
ORB-1438
Bulk-edit selection in table
Frontend
Jul 20/41
SC
ORB-1435
Webhook retry & backoff
Backend
Jul 33/5
JL
In progress2 / 3
ORB-1428
Ship onboarding flow v2
DesignFrontend
Jun 304/75
SC
ORB-1431
Realtime presence on cards
Backend
Jun 292/41
JL
In review1 / 3
ORB-1419
Command palette fuzzy ranking
Frontend
Jun 276/64
AR
Done3
ORB-1402
Migrate auth to new SDK
Backend
Jun 245/52
JL
ORB-1399
Dark-mode token pass
Design
Jun 238/83
MK
ORB-1395
Audit log export
Backend
Jun 224/4
PN

Anatomy

Each column owns a colored status dot, a live count pill (count / limit when a WIP cap is set), and an add / options pair. Cards compress a task into one scannable tile: a 3-bar priority meter and mono ID on top, title and labels in the body, then due date, subtask progress, comments and the assignee avatar in the footer. Overdue dates flip red; complete subtask counts go green.

In progress2 / 3
ORB-1428
Ship onboarding flow v2
DesignFrontend
Jun 304/75
SC
ORB-1431
Realtime presence on cards
Backend
Jun 292/41
JL

WIP limits

A neutral count pill reads count / limit while a column is at or under its WIP cap. Cross the limit and the pill turns red, with a banner naming how many cards over you are.

In progress is 1 over its limit of 3
To do2 / 4
ORB-1438
Bulk-edit selection in table
Jul 2
SC
ORB-1435
Webhook retry & backoff
Jul 3
JL
In progress4 / 3
!Over WIP limit by 1
ORB-1428
Ship onboarding flow v2
Jun 30
SC
ORB-1431
Realtime presence on cards
JL
ORB-1424
Notification digest emails
AR
ORB-1421
Import from CSV
PN

Group by priority

The segmented control in the board header flips every column between status and priority lanes — the same cards re-sliced into Urgent / High / Medium / Low without moving anything. Also available as the controlled groupBy prop.

Sprint 24
Same cards, priority lens
To do3 / 4
High1
ORB-1442
Redesign task card density toggle
DesignFrontend
Jun 302/73
AR
Medium2
ORB-1438
Bulk-edit selection in table
Frontend
Jul 20/41
SC
ORB-1435
Webhook retry & backoff
Backend
Jul 33/5
JL
In progress2 / 3
Urgent1
ORB-1428
Ship onboarding flow v2
DesignFrontend
Jun 304/75
SC
High1
ORB-1431
Realtime presence on cards
Backend
Jun 292/41
JL
Priority scale — urgent and high light 3 bars, medium 2, low 1
urgenthighmediumlow

Controlled

Pass items + onItemsChange to own the board — every drop, keyboard move and quick-add reports the full next board. onMove additionally fires per move with the card id, source and destination column, and indices, ready to persist.

To do2
ORB-1442
Redesign task card density toggle
DesignFrontend
Jun 302/73
AR
ORB-1438
Bulk-edit selection in table
Frontend
Jul 20/41
SC
In progress1
ORB-1428
Ship onboarding flow v2
DesignFrontend
Jun 304/75
SC
Done1
ORB-1402
Migrate auth to new SDK
Backend
Jun 245/52
JL

Drag a card (or focus one and press Shift+Arrows) — every move reports through onMove.

Custom cards

renderCard replaces the card body while the shell keeps its border, selection ring, drag handlers and keyboard moves — use it for denser tiles or extra fields.

To do2
Redesign density toggleAR
Bulk-edit selectionSC
In progress1
Ship onboarding flow v2SC

Props

PropTypeDefaultDescription
columnsKanbanColumn[]Board columns: { id, name, accent?, wip? }. accent colors the header dot; wip sets the limit behind the count pill.
items / defaultItemsRecord<string, KanbanItem[]>Controlled / uncontrolled cards per column id, in column order. Items carry { id, title, priority?, labels?, assignee?, due?, overdue?, subtasks?, comments? }.
onItemsChange(items) => voidFires with the full next board on every drop, keyboard move and quick-add.
onMove(move: KanbanMove) => voidFires per card move with { itemId, from, to, fromIndex, toIndex }.
onAddItem(item, columnId) => voidA quick-add draft was committed (Enter or the Add button).
createItem(columnId, title) => KanbanItemFactory for quick-added cards — mint real ids here. Default: card-n + medium priority.
onSelectItem(item) => voidA card was clicked or selected with Enter / Space.
title / subtitleReactNodeBoard header copy. The header renders when any header prop is set.
people / peopleOverflowKanbanPerson[] / numberHeader avatar stack ({ initials, color }) with a trailing +N chip.
onNewTask() => voidopen first column's quick-addOverrides the header's primary New task button.
showNewTask / showGroupTogglebooleantrueHide the header's primary button / segmented group control.
groupBy / defaultGroupBy"status" | "priority""status"Controlled / uncontrolled grouping; onGroupByChange reports toggles. "priority" re-slices each column into lanes.
compactbooleanfalseColumns grow to fit their cards instead of the fixed 560px rail.
renderCard(item, ctx) => ReactNodeReplace the default card body. ctx = { column, index, selected, dragging }.
addPlaceholder / addLabelstring"What needs doing?" / "Add card"Quick-add textarea placeholder and the dashed add button label.
…restHTMLAttributesForwarded to the root <div>, including ref.

Usage

Do

Keep columns to a handful

Four to six stages read at a glance. More than that and the board scrolls sideways into a maze.

Don’t

Let In-progress sprawl

WIP limits exist to be felt. If a column is permanently red, the limit — or the staffing — is wrong.

Do

Put the next action on the card

A due date, an owner, a subtask count — enough to act without opening the task.

Don’t

Use it for sequenced work

Dependencies and durations belong on the Gantt. A board shows state, not a schedule.

Keyboard & accessibility

Columns are lists of draggable-card list items. Every card is focusable with a Shift+Arrow move alternative to drag, and each move is announced to screen readers via a polite live region. Escape backs out of the quick-add draft.

DragMove a card between or within columns
Shift + ← →Move the focused card to the adjacent column
Shift + ↑ ↓Reorder the focused card within its column
Enter / SpaceSelect the focused card
EnterCommit a new card title (draft stays open)
EscCancel adding a card