Developer documentation

Build Gantt charts with a headless engine

GanttKit splits a Gantt chart into a headless engine and thin plugins. The engine owns the data model, time-scale, layout geometry and interaction logic it touches no DOM and depends on no UI framework. It emits a declarative scene of vector primitives that any renderer can paint.

Framework-agnostic Plugin-driven 0 core dependencies Virtualized to ~80 nodes TypeScript MIT

The mental model

Everything in GanttKit flows one way. The core runs a compute pipeline over your rows and produces a scene. A renderer subscribes to scene changes and paints primitives to the DOM, forwarding pointer events back to the engine. Feature plugins sit in the middle, transforming the data or the scene through hooks.

Core

@ganttkit/core

Rows → time-scale → layout → scene. Zero DOM, zero framework. Pure, unit-testable logic.

Feature plugins

columns · tree · i18n · …

Tap hooks.rows to transform data, or hooks.scene to add layers.

Renderer

SVG · HTML · Canvas

Paints primitives, forwards pointer events, hosts plugin UI slots.

The engine is just a JavaScript object. You can construct it, feed it rows and read back its scene in Node with no browser at all which is exactly how it's tested. A renderer is the only piece that touches the DOM.

A first chart in 15 lines

The vanilla SVG renderer needs nothing but a target element:

import { createGantt } from '@ganttkit/svg'
import '@ganttkit/svg/styles.css'

const gantt = createGantt({
  target: '#chart',
  theme: 'dark',
  rows: [
    {
      id: 'r1',
      name: 'Design',
      tasks: [
        { id: 't1', name: 'Wireframes', start: '2026-07-01', end: '2026-07-08', progress: 1 },
        { id: 't2', name: 'Mockups',    start: '2026-07-09', end: '2026-07-20', progress: 0.4 },
      ],
    },
  ],
})

Where to go next

Package map

PackageRoleExport
@ganttkit/coreHeadless engine + plugin hostGanttEngine
@ganttkit/svgVanilla SVG renderersvgRenderer, createGantt
@ganttkit/htmlVanilla <div> rendererhtmlRenderer
@ganttkit/canvas2D canvas renderercanvasRenderer
@ganttkit/plugin-columnsSidebar columnscreateColumns
@ganttkit/plugin-filterRow / task filteringcreateFilter, filters
@ganttkit/plugin-progressCompletion fillprogressPlugin
@ganttkit/plugin-markersDate markers / bandscreateMarkers, todayMarker
@ganttkit/plugin-treeHierarchical rowscreateTree
@ganttkit/plugin-dependenciesAuto-scheduling + link dragcreateDependencies
@ganttkit/plugin-baselinePlanned-vs-actual ghostscreateBaseline
@ganttkit/plugin-toolbarView-mode / zoom / todaytoolbarPlugin
@ganttkit/plugin-tooltipHover detail cardtooltipPlugin
@ganttkit/plugin-selectionSelect / rubber-band / menucreateSelection
@ganttkit/plugin-i18nLocalized dates + stringscreateI18n