Svelte Kanban Board

A Kanban board is a data grid that draws its rows as cards instead of table rows. SvGrid treats it exactly that way: same <SvGrid>, same data, same columns, one extra board prop. Lanes are bucketed by a field on your rows, so a board and a table are two views of one dataset rather than two components to keep in sync.

Dragging a card does not mutate anything behind your back. The grid raises onCardMove with the card and its new lane, you assign the field on your own row object, and the board re-renders from your state. The same is true of the built-in card editor: it hands you a value, you decide what to store.

Install

npm i @svgrid/grid @svgrid/enterprise

The grid and its data model are MIT-licensed in @svgrid/grid; this view ships in the commercial @svgrid/enterprise package and runs unlicensed while you evaluate.

The code

<script lang="ts">
  import { SvGrid } from '@svgrid/grid'
  import { enableBoardView } from '@svgrid/enterprise'

  enableBoardView()

  let data = $state([
    { id: 1, title: 'Design the board layout', status: 'backlog', assignee: 'Sam Rivera' },
    { id: 2, title: 'Lane drag and drop', status: 'in_progress', assignee: 'Lee Park' },
  ])
  const columns = [
    { field: 'title', header: 'Task' },
    { field: 'status', header: 'Status' },
    { field: 'assignee', header: 'Assignee' },
  ]
</script>

<SvGrid {data} {columns} board={{ groupBy: 'status' }} />

What you get

Live examples

Documentation

Related articles

Frequently asked questions

How do I build a Kanban board in Svelte 5?

Give <SvGrid> your data and columns and set the board prop with the field to bucket lanes by, for example board={{ groupBy: 'status' }}. Cards are your rows and lanes are that field's values.

Is the Kanban board free?

The grid, the board prop and its config types are MIT-licensed in @svgrid/grid. The board renderer ships in the commercial @svgrid/enterprise package, which runs unlicensed with a small watermark while you evaluate it.

How does the board write changes back to my data?

It does not write to your data at all. Moving a card raises onCardMove and editing one raises onCardCommit; you apply the change to your own state and the board re-renders from it.

Can I switch between a board and a table?

Yes, and that is the point of the design. The board is a view of the same grid, so toggling the board prop on and off swaps between cards and rows with no data changes.

Build something else

Get started · Browse the gallery · Pricing