Installation
Theme
Mode

Data viz

Burndown / burnup

The sprint-tracking chart. Burndown plots work remaining against an ideal pace line; burnup plots work completed against the total scope — so mid-sprint scope creep is visible rather than hidden. Toggle between the two, hover any day for the numbers. Built on the shared Orbit chart scaffolding.

$npx shadcn@latest add @orbit/burndown-chart

Overview

Sprint 24 with scope creep on days 5 and 8. Switch Burndown / Burnup, and hover a day to read points remaining or completed against scope.

Sprint 24 — burndown / burnup card
Sprint 24 · Burndown
Work remaining vs. the ideal pace
40 / 46Points completed
87%Sprint progress
6 ptsRemaining
Remaining workIdeal

Two readings

Same sprint, two lenses. Burndown answers “are we on pace to finish?”; burnup adds “did the goalposts move?” by drawing scope as its own line.

defaultMode="burndown" — remaining vs. the dashed ideal pace
Sprint 24 · Burndown
Work remaining vs. the ideal pace
40 / 46Points completed
87%Sprint progress
6 ptsRemaining
Remaining workIdeal
defaultMode="burnup" — completed climbing toward the dotted scope line
Sprint 24 · Burnup
Work completed against total scope
40 / 46Points completed
87%Sprint progress
6 ptsRemaining
CompletedIdealScope

Controlled

Hide the built-in segmented control with showToggle={false} and drive the mode from outside via mode + onModeChange.

mode + onModeChange · showToggle={false}
Controlled from outside · mode="burndown"
Sprint 24 · Burndown
Work remaining vs. the ideal pace
40 / 46Points completed
87%Sprint progress
6 ptsRemaining
Remaining workIdeal

Props

PropTypeDefaultDescription
data{ days: string[]; scope: number[]; remaining: number[]; completed: number[] }One entry per day: total scope, points remaining (burndown line), and points completed (burnup line).
mode"burndown" | "burnup"Controlled mode. Pair with onModeChange.
defaultMode"burndown" | "burnup""burndown"Uncontrolled initial mode.
onModeChange(mode) => voidFires when the segmented toggle (or a controlled parent) switches modes.
titlestring"Sprint 24"Card heading; the active mode label is appended.
subtitlestringOverrides the per-mode subtitle copy.
unitstring"pts"Unit suffix in stats and tooltip values.
heightnumber270Plot height in px. Width is responsive.
showTogglebooleantrueSegmented Burndown / Burnup control in the header.
showStatsbooleantrueCompleted / progress / remaining stats row.
showLegendbooleantrueBordered legend row under the plot.
ariaLabelstringPlain-language summary for the chart's role=“img”.
…restHTMLAttributes<HTMLDivElement>Forwarded to the root card, including ref and className.

Usage

Use it for a fixed-length sprint with an estimate-based backlog. For flow over time across statuses, the Cumulative Flow chart is the better tool.

Do

Show the ideal line

The diagonal reference is what makes the actual line meaningful — without it, “30 points left” says nothing about pace.

Don’t

Hide scope changes

If work is added mid-sprint, a burndown can look fine while you fall behind. A burnup’s scope line keeps it honest.

Do

Use consistent units

Points or count — pick one and label the axis. Mixing estimates and task counts makes the slope a lie.

Don’t

Read too much into one day

Daily wobble is normal. Judge the trend across the sprint, not a single dip or plateau.

Keyboard & accessibility

The chart renders as a labelled image; the toggle is a group of pressed buttons and every reference line is named — and dashed — in the legend.

roleimg with an aria-label naming the mode and span
Togglearia-pressed buttons in a labelled group
TooltipDay values on a crosshair, remaining or completed vs. scope
LegendNames every line — dashes, not color alone, mark ideal and scope