GanttKit / Gantt chart library
Gantt chart library

A Gantt chart library that stays out of your stack

GanttKit is a Gantt chart library for web applications. A headless core owns the data model, time scale, layout geometry and interaction logic. It never touches the DOM, so the same library works in plain JavaScript, in any UI framework, and in Node during tests.

Framework-agnostic 0 core dependencies Plugin-driven Virtualized TypeScript types MIT
$ pnpm add @ganttkit/core @ganttkit/svg Launch live demo Read the docs

What a Gantt chart library actually has to do

Drawing bars is the easy part. The work that makes a Gantt chart library worth installing sits underneath:

Most libraries bundle all of that into one widget. GanttKit splits it: the core computes, plugins extend, and a renderer paints.

Headless core versus monolithic widget

ConcernMonolithic widgetGanttKit
FrameworkBound to one, or wrapped per framework by the vendorCore is framework-free; the renderer is the only DOM-aware piece
Unused featuresShip in the bundle whether you use them or notSeparate packages, tree-shakeable, install what you use
CustomizationConfiguration flags the vendor anticipatedPlugins that hook the row pipeline and the scene
TestingNeeds a browser or a DOM shimEngine runs in Node; assert on geometry and scene output
Rendering targetFixedSVG, HTML or Canvas from the same engine and plugins

What you install

Everything is published under the @ganttkit scope. Pick a renderer, then add feature plugins one by one. Every package ships ESM and CJS builds with TypeScript types.

PackageRole
@ganttkit/coreHeadless engine and plugin host. Zero runtime dependencies.
@ganttkit/svg, @ganttkit/html, @ganttkit/canvasRenderers. Same engine, same plugins, different painting target.
@ganttkit/plugin-columns, plugin-tree, plugin-filterSidebar columns, hierarchical rows, filtering and sorting.
@ganttkit/plugin-dependencies, plugin-baselineFinish-to-start auto-scheduling, planned-versus-actual ghost bars.
@ganttkit/plugin-progress, plugin-markers, plugin-tooltipCompletion fill, date markers and bands, hover detail cards.
@ganttkit/plugin-toolbar, plugin-selection, plugin-i18nView-mode and zoom controls, selection and context menu, localization.

A chart in fifteen lines

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

const gantt = createGantt({
  target: '#chart',
  theme: 'dark',
  viewMode: 'Week',
  rows: [
    {
      id: 'design',
      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 },
      ],
    },
  ],
})

Need the sidebar, a tree, or dependencies? Build the engine explicitly and call use() for each plugin. Nothing is registered globally and nothing is hidden behind a config file.

Performance at twenty thousand tasks

The engine runs two passes. The expensive pass recomputes rows, time scale and layout when data changes. The cheap pass rebuilds only the windowed scene on scroll, coalesced to the animation frame.

MeasurementResult
Scene nodes, naive render at 20,000 tasksabout 90,000
Scene nodes, virtualizedabout 80
Scroll rebuildunder 1 ms
Full recompute at 20,000 tasksabout 8 ms

How to choose a Gantt chart library

Whatever you pick, these are the questions worth asking before the integration is hard to reverse:

  1. License. Is it usable commercially without a key, a seat count, or a per-developer fee?
  2. Framework coupling. If you migrate frameworks in two years, does the chart survive?
  3. Bundle cost. Do unused features ship anyway, or can the bundler drop them?
  4. Types. Are TypeScript definitions shipped and accurate, or community-maintained?
  5. Virtualization. Does it survive your worst realistic dataset, not the marketing demo?
  6. Extensibility. When you need a behavior the vendor did not anticipate, is there a documented extension point?
  7. Testability. Can you assert on layout without booting a browser?

Keep reading

JavaScript Gantt chart

Install from npm and render a chart with plain JavaScript, no build-time framework required.

Read more

TypeScript Gantt chart

Shipped type definitions, the interfaces you will use, and type-safe plugin authoring.

Read more

Gantt chart component

Wrap the engine as a React, Vue, Svelte or Angular component in about twenty lines.

Read more

Open source Gantt chart

What MIT licensing means here: no keys, no telemetry, no feature gating.

Read more

Frequently asked questions

What is a Gantt chart library?

A Gantt chart library turns rows of tasks with start and end dates into a scrollable timeline. It owns the time scale, the layout geometry of every bar, the scroll virtualization, and the drag interactions, so an application only has to supply data and react to changes.

Does a Gantt chart library need a UI framework?

No. GanttKit computes all geometry in a headless core that never touches the DOM, then emits a scene of vector primitives. A renderer paints that scene, so the same engine works with plain JavaScript, React, Vue, Svelte, Angular, or a server-side render.

How many tasks can a Gantt chart library display?

GanttKit virtualizes the scene to the scroll viewport. A 20,000 task chart emits roughly 80 vector nodes instead of about 90,000, a scroll rebuild takes under a millisecond, and a full recompute takes about 8 ms.

Is GanttKit free to use commercially?

Yes. GanttKit is MIT licensed, with no license keys, no seat counts, and no paid tier gating features.