Use cases
- File uploads — show upload percentage with
showValue. - Multi-step processes — indicate progress through a wizard or onboarding flow.
- Loading states — omit
valuefor an indeterminate shimmer animation. - Quotas and limits — display usage against a maximum (storage, API calls).
When NOT to use
- Loading entire pages — use Skeleton placeholders.
- Step-by-step navigation with clickable steps — use a Stepper (planned).
- Binary loading/not-loading on a button — use the button's
isLoadingprop.
Sizes
| Size | Height | Use when |
|---|---|---|
sm | 6 px | Inline progress in dense UIs (table rows, cards). |
md | 10 px | Default for standalone progress bars. |
lg | 16 px | Hero-level progress (onboarding, upload modals). |
Composition
- Pass
labelfor screen reader context. PassshowValueto render the percentage visually. - Use
valueLabelPositionto place the visible valueinline-end, above the bar, or below the bar. - Use
showTrackLabelswithtrackLabelPositionto place min/max labels above, below, or inline with the bar. - Use
labelGapandlabelGroupGapto control compact spacing when value labels share a row with min/max labels. - Omit
valueentirely for indeterminate mode — the bar animates a shimmer. - Pair with a
<Text>above the bar for a visible label + percentage layout.
Stepwise color
Progress uses the fixed primary brand tone by default. Use segmented only when progress communicates health, risk, or completion bands. The fill transitions width and tone together so range changes fade smoothly:
<Progress
value={68}
segmented
showValue
showTrackLabels
valueLabelPosition="bottom-center"
trackLabelPosition="bottom"
labelGap="xs"
valueFormatter={(value) => `${value} selected`}
label="Payroll import health"
/>The default segments are semantic and tokenized: low values use danger, middle values use warning and primary, and completed values use success. Pass segments to tune the thresholds for a domain-specific scorecard.