Composable parts
Assemble Root, Content, Column, ColumnHeader, ColumnContent, CardAdd, DragPreview and more in your own template. No hidden DOM, no monolithic config.
A headless, compound kanban board for organizing work across columns, swimlanes, and phases. Drag & drop, WIP limits, transition rules, keyboard navigation, and a fully template-driven UI, all wired into a single zero-dependency engine.
Two real Vue TaskBoard products running in the page. Switch between a product roadmap and a field-operations swimlane board to see the same compound runtime handle dense cards, editors, filters, right-click menu payloads, and grouped work.
TaskBoard is shipped as a tree of compound components. Every visual surface (column, header, card, footer, overlay) is a slot you can swap, wrap, or extend without forking the engine.
Assemble Root, Content, Column, ColumnHeader, ColumnContent, CardAdd, DragPreview and more in your own template. No hidden DOM, no monolithic config.
All drag, selection, validation, and workflow logic lives below the Vue surface, so templates stay flexible while board behavior remains consistent.
Point dataKey and columnField at any field. Bring your own task model with id, ticketId, or jiraKey. The board adapts instead of forcing a schema.
A thin Vue layer connects the headless engine to reactive compound parts. The app owns visible surfaces while TaskBoard owns movement, selection, focus, and workflow state.
Built for the way real teams move work through a board. Multi-select, drag-and-drop across swimlanes, full keyboard navigation, and right-click payloads for app-owned menus.
Cross-column and cross-swimlane drags with live drop indicators, drag previews, snap-to-slot, and pointer-based ergonomics on desktop and touch devices.
Click to select, shift-click for range, ctrl/cmd-click for additive picks. Selection state surfaces to your handlers for bulk move, delete, or edit flows.
Arrow keys to move focus, space to grab, enter to open, esc to cancel. Every action is reachable without a mouse, with full ARIA roles attached.
TaskBoard emits the active card, column, position, and native event so your app can open PrimeVue ContextMenu, a drawer, or a custom action surface.
Encode the policies that matter. What can move where, who can move it, when it requires confirmation, and how many cards a stage can hold at once.
Declare which transitions between columns are valid. Invalid drops are blocked at the engine layer, so there are no half-states and no error toasts after the fact.
Set per-column or per-swimlane work-in-progress limits. The engine prevents overflow drops and exposes the limit state for header chrome.
Bind per-card and per-column permissions to your auth model. Read-only viewers, restricted editors, and admin overrides, all driven by your data.
Wrap a column move in a confirm dialog, an async approval, or a custom validator. Cancel a drop mid-flight without rolling back state by hand.
Lay out the board the way the work actually flows. Stack swimlanes, group columns into phases, lock structural columns, and virtualize when the dataset stops fitting on screen.
Drag columns to reorder, click to collapse, lock in place to prevent accidental moves. The column model is just data that you own and mutate.
Split rows by assignee, sprint, epic, priority, or any field. Swimlanes can collapse independently and respect their own drop validation.
Wrap related columns into a labeled phase header. Group-level WIP limits and metadata flow naturally to your column header slots.
Per-column virtualization keeps the DOM small even at extreme dataset sizes, with smooth drag handoff between virtualized and visible rows.
A complete editing surface, from column-scoped creation to app-owned dialogs, sitting on top of a state model that serializes, undoes, and round-trips cleanly.
Open a PrimeVue Dialog, Drawer, or Sheet from card activation and save through the board API. Your form, validation, and async flow stay in your app.
Programmatic and inline create flows, with column-scoped add buttons, drag-to-archive, and granular events for every mutation the board emits.
A command stack records every drag, edit, and structural change. Wire ctrl+z / ctrl+shift+z to step backward and forward through state.
Keep queries in your app, pass the visible items to TaskBoard, and preserve movement, selection, focus, and virtual scrolling around the result set.
Serialize the entire board, drop a single column to CSV, or render a print-ready board snapshot for offline review and reporting.
Snapshot board UI state (column order, collapse state, selection, focus) to your store, your URL, or localStorage in a single call.
Start with PrimeOne or Tailwind UI parts, then replace the surfaces that need to carry your product language. Cards, columns, overlays, toolbars, and drop states all stay app-owned.
Card, column header, footer, empty state, drag preview, and drop indicator are replaceable surfaces. Menus and dialogs stay app-owned through emitted payloads.
Copy PrimeOne parts for a polished default UI, or Tailwind parts when the product already owns utility-first styling. Both stay editable in your app.
Every color, radius, gap, and spacing value flows through CSS variables. Theme the board by overriding tokens, no preprocessor build step required.
Pluggable locale strings for every label and message, plus full right-to-left layout flipping for the entire board, including drag and selection.
Drop the package into your Vue project, import the styles, and assemble your first board in under five minutes.