caliper uidocs

Gantt chart

Pro

A project plan on a time axis: grouped tasks, milestones, dependency arrows, the critical path, late dependencies flagged, and bars you drag or move with Alt and the arrows while dependent tasks follow.

Installs components/ui/gantt-chart.tsxDepends on lucide-reactMotion shared motion tokens
pnpm dlx shadcn@latest add @caliper/gantt-chart

Billing redesign

TaskStartDays
5 Oct10
Interviews5 Oct5
Synthesis12 Oct3
15 Oct14
Flows15 Oct7
Visual design19 Oct10
19 Oct36
API19 Oct12
Front end29 Oct16
QA16 Nov5
Launch23 Nov—
Interviews
Flows
Visual design
API
Front end
QA

Alt and ← → move a task by a day; add Shift to change its length.

When to use #

Use it for

  • Project and launch planning.
  • Construction, events and anything with hard dependencies.

Skip it when

  • A backlog without dates; use the kanban board.

Installation #

terminal
pnpm dlx shadcn@latest add @caliper/gantt-chart

Adds its 4 files to components/ui/, each with its own stylesheet, and installs their packages. Pro installs with your access token, set up once per project. See Pro access. The first part also adds Caliper UI’s tokens; import them once as in Installation.

Usage #

Import it from your copy of the source. The example behind the preview comes with the source. It is built from criticalPath, shiftDependents and GanttChart.

example.tsx
import { criticalPath, shiftDependents, GanttChart } from "@/components/ui/gantt-chart"

The worked example comes with Pro

The 23-line example behind the preview opens here with a Pro or Team licence.

Checking your licence…

API reference #

criticalPath

component

No props of its own; it accepts the native props of its root element.

shiftDependents

component

No props of its own; it accepts the native props of its root element.

GanttChart

component
PropTypeDefault
tasks *readonly GanttTask[]—
onTasksChange *(tasks: GanttTask[]) => void—
todaystringnew Date().toISOString().slice(0, 10)
zoom"month" | "day" | "week""week"
labelstring"Project plan"
classNamestring—

Accessibility #

It exposes treegrid, row, columnheader, gridcell, button and status semantics, with aria-labelledby, aria-label, aria-level, aria-expanded, aria-hidden and aria-describedby kept in step with state. Changes that matter are announced through a live region.

KeyBehaviour
←Moves to the previous item or value.

Motion #

Transitions use the shared duration and easing tokens. Under prefers-reduced-motion those tokens collapse to instant and travel distances go to zero, so state changes still happen without movement.