Progress
Determinate progress with labels, formatted values, sizes and a token-driven indicator transition.
Purpose
Use Progress for measurable work with a known current value and maximum, such as uploads, imports or multi-step processing.
Task progress
Installation
With the Siteplane registry alias configured, add the component and import the installed source from your app.
CLI
pnpm dlx shadcn@4.16.1 add @siteplane/progressImport
import { Progress } from "@/components/ui/progress";
import { ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue } from "@/components/ui/progress";Need the machine-readable source metadata? View registry JSON.
Usage
Progress communicates completion of a task. Pair the track with a label when the number matters.
import { Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue } from "@/components/ui/progress";
export function Example() {
return (
<Progress value={64}>
<div><ProgressLabel>Deploy</ProgressLabel><ProgressValue /></div>
<ProgressTrack><ProgressIndicator /></ProgressTrack>
</Progress>
);
}Examples
Labels, formatted values, sizes, value states and indeterminate loading are props and compositions of the same primitive.
Label and value
Formatted value
ProgressValue accepts a render function when percent is not the right unit.
Sizes
sm and default share the same track height — the root gap and value text scale with the size.
Value states
Without children the root renders track and indicator automatically.
Indeterminate
value={null} switches to the indeterminate state; aria-valuetext keeps the status readable.
Auto updating
An indeterminate bar with the continuous fill utility for background work without a known total.
Circular
A custom SVG visualization on top of Progress semantics — the primitive keeps the accessible value.
API Reference
The reference lists the source-owned exports and props that are easy to miss in visual examples. Inherited Base UI props remain available unless the wrapper narrows them.
Progressaccepts a numericvalueorvalue={null}for indeterminate status, plusmax,format,localeandsize="sm" | "default" | "lg" | "xl"; the wrapper defaultslocaletoen-US.- Compose
ProgressLabel,ProgressValue,ProgressTrackandProgressIndicatorwhen custom children are needed. ProgressLabel,ProgressValueandProgressTrackeach accept their ownsizeoverride; otherwise they inherit the root or provider size.- Use
getAriaValueTextoraria-valuetextwhen the numeric value needs a human-readable explanation.
Motion
Component motion uses the shared Siteplane motion contract. See the global motion guide for provider setup, tokens and reduced-motion behavior.
- Value changes animate through the shared Progress transition tokens; the surrounding layout remains stable.
- The operating-system reduced-motion preference removes the indicator transition. The forced
reducedMotionPresetshortens the shared linger duration from 380ms to 120ms, and the provider contract stops the continuous indeterminate fill. - Do not add local durations or transforms; state changes and progress semantics remain visible in every mode.
Accessibility
- Provide a visible label or explicit accessible name and keep
valueandmaxaccurate. - Use human-readable value text for units or stages that a plain number cannot explain.
- Use a numeric value for known progress.
value={null}supports a short transitional indeterminate state when paired with usefularia-valuetext; Spinner or Skeleton can be clearer for unknown or long-running loading.
Implementation Guidance
- Keep track and indicator together when supplying custom children.
- Set locale deliberately for non-English products instead of relying on the
en-USwrapper default. - Use part-level size overrides only when a real composition requires them; root size is the normal path.