What Is Kanban?
A Kanban board shows work as cards moving through a workflow. For example, a task starts in To do, moves to In progress, then finishes in Done.
Your first board
Four tasks move through To do, In progress and Done.
Try it: Move the research card, or double-click a card to edit it.
What to notice: Moving a card changes its status; the board keeps the same four tasks.
TypeScript source
Install the packages from Getting Started, then use this source in your app.
import { defineCustomElements } from '@revolist/revogrid/loader';import { KanbanPlugin, type KanbanConfig } from '@revolist/kanban';import '@revolist/revogrid-pro/styles.css';import '@revolist/kanban/styles.css';
export interface WorkCard { id: string; title: string; status: string; order: number; description?: string; team?: string; owner?: string; priority?: string; tags?: string[]; progress?: number; startDate?: string; endDate?: string;}export const demoCards: WorkCard[] = [ { id: 'task-1', title: 'Research customer needs', description: 'Collect feedback for the next release.', status: 'todo', team: 'product', owner: 'Ana', priority: 'normal', order: 1000 }, { id: 'task-2', title: 'Build onboarding', description: 'Make the first session useful.', status: 'doing', team: 'product', owner: 'Mia', priority: 'high', order: 1000 }, { id: 'task-3', title: 'Improve API errors', description: 'Return actionable validation messages.', status: 'todo', team: 'platform', owner: 'Rui', priority: 'normal', order: 2000 }, { id: 'task-4', title: 'Release checklist', description: 'Ready for the next deployment.', status: 'done', team: 'platform', owner: 'Sam', priority: 'normal', order: 1000 },];export const boardConfig: KanbanConfig<WorkCard> = { columns: [{ prop: 'todo', name: 'To do', size: 210 }, { prop: 'doing', name: 'In progress', size: 210 }, { prop: 'done', name: 'Done', size: 210 }], card: { titleField: 'title' }, cardRowHeight: 88, addCard: false, swimlaneColumn: false,};
export async function configureBoard( grid: HTMLRevoGridElement, config: KanbanConfig<WorkCard> = boardConfig, cards: readonly WorkCard[] = demoCards, extraPlugins: HTMLRevoGridElement['plugins'] = [],) { await defineCustomElements(); grid.plugins = [KanbanPlugin, ...extraPlugins]; // The packaged editor and history install automatically. grid.columns = [{ prop: 'title', name: 'Title' }, { prop: 'status', name: 'Status' }, { prop: 'owner', name: 'Owner' }]; // Cached remote data can hydrate immediately: finish initial grid setup first. grid.kanban = config.remote ? { ...config, remote: false } : config; grid.source = cards.map(card => ({ ...card })); await grid.componentOnReady(); const plugins = await grid.getPlugins(); const kanban = plugins.find((plugin): plugin is KanbanPlugin<WorkCard> => plugin instanceof KanbanPlugin); if (!kanban) throw new Error('Kanban could not start.'); if (config.remote) grid.kanban = config; return kanban;}
// Give your container a width and mount once after it exists in the DOM.export async function createKanbanBoard(container: HTMLElement) { await defineCustomElements(); const grid = document.createElement('revo-grid'); grid.style.cssText = 'display:block;width:100%;height:400px'; container.append(grid); try { const kanban = await configureBoard(grid); return { grid, kanban, destroy() { grid.remove(); } }; } catch (error) { grid.remove(); throw error; }}Try it: move Research customer needs from To do to In progress. The card is the same task; only its status and position change. Reset restores the example.
Cards and columns
Section titled “Cards and columns”A card is one work item. Its title tells users what to do. A column is a workflow stage. The record’s status value chooses its column; its numeric order chooses its position within that column.
Swimlanes
Section titled “Swimlanes”A swimlane groups the same columns by team, project or another field. Product and Platform can each have To do, In progress and Done work without duplicating the underlying data. See the swimlane example.
Work in progress
Section titled “Work in progress”A WIP limit caps how much work is in a stage or lane bucket. It can warn or block a move. Start with a small limit in Work in Progress Limits.
What happens when I move a card?
Section titled “What happens when I move a card?”Kanban updates that card’s workflow value and order, validates rules and capacity, records a local history change and emits a committed event. Saving to a database is an application integration, not an automatic consequence of displaying the board.
Next steps
Section titled “Next steps”Next, create Your First Board, then configure columns.