Kanban
Drag cards between columns with pointer, touch or keyboard.
Playground
Drag with a mouse, with the grip on touch screens, or from the keyboard: focus a card, press Space, move with the arrow keys and press Space again. The strip under the board shows what a screen reader announces.
Props
1import { Kanban } from "@/components/ui/kanban"23// DndContext + SortableContext per column, closestCorners,4// PointerSensor (6px) and KeyboardSensor (sortableKeyboardCoordinates)5<Kanban6 columns={["Backlog", "In progress", "Review", "Done"]}7 cards={cards}8 wipLimits={{ "In progress": 3 }}9 onMove={(cardId, { to, index }) => moveCard(cardId, to, index)}10 onAddCard={(column, title) => createCard(column, title)}11/>Card states
Locked cards can't be dragged and say who holds them; blocked cards say why. Cards in Done carry a check.
Migrate billing webhooks
Globex
IntegrationOct 2LFDefaultrestMigrate billing webhooks
Globex
IntegrationOct 2LFHover:hoverMigrate billing webhooks
Globex
IntegrationOct 2LFFocus:focus-visibleMigrate billing webhooks
Globex
IntegrationOct 2LFLoadingdragging (DragOverlay)SSO for Initech
Initech
Priya Raman is editing
EnterpriseMCDisabledlocked, aria-disabledContract renewal flow
Acme Corporation
Waiting on legal review
SaaSLFErrorblockedExport to CSV
Northwind
DashboardPRSuccessdone
Examples
The same sensors with a single SortableContext: reorder a backlog by priority, locked to the vertical axis.
- 1Rate limit alerts
- 2Migrate billing webhooks
- 3Draft Q4 roadmap
- 4Audit onboarding emails
Keyboard
- Focus the next card
- Tab
- Pick up or drop the focused card
- SpaceorEnter
- Move within a column
- ↑or↓
- Move to the neighbouring column
- ←or→
- Cancel and put the card back
- Esc
Semantics and ARIA
- Cards get
role="button",aria-roledescription="sortable"and a description with the keyboard instructions from dnd-kit. - Custom announcements name the card, the column and the position, for example
Dropped Rate limit alerts in Review, position 1 of 1, and mention an exceeded WIP limit. - Escape and drops outside the board restore the snapshot taken when the drag started, and say where the card went back to.
- Locked cards stay focusable with
aria-disabledand a reason, so the lock is discoverable instead of silently ignored. - Pointer drags start after 6px so clicks and scrolling still work; on touch, drag from the grip and swipe elsewhere to scroll the board.
- The board scrolls sideways inside its own region on narrow screens; the page itself never scrolls horizontally.