Progress
Progress visually displays the status of a task. Provides linear bar and circular types — ideal for file uploads, step-based progress, or any determinate progress value.
Playground
<Progress value={0} />Sizes
smdefaultlg| Size | Track Height | Circular Diameter | Linear | Circular |
|---|---|---|---|---|
sm | 4px | 32px | ||
default | 8px | 48px | ||
lg | 12px | 64px |
Features
Type
Two display types — linear bar and circular. Choose based on context.
<Progress value={60} />
<Progress type="circular" value={60} />Striped
variant="striped"shows diagonal stripes.animatedenables a flowing animation.
<Progress value={70} variant="striped" />
<Progress value={70} variant="striped" animated />Show Value
showValuedisplays the percentage value.formatLabelenables custom formatting.
<Progress value={75} showValue />
<Progress type="circular" value={75} showValue />
<Progress value={750} max={1000} showValue
formatLabel={(v, max) => `${v}/${max} MB`} />API
Component Structure
Progress— Radix ProgressStandalone component — no sub-components.
Props
type"linear""linear" | "circular"Display type — linear bar or circular
value0numberProgress value (0 to max)
max100numberMaximum value
size"default""sm" | "default" | "lg"Size — linear: track height, circular: diameter
variant"default""default" | "striped"Visual variant (linear only)
color"default""default" | "primary"Indicator color — default: dark, primary: brand color
indicatorClassNameundefinedstringCustom class for the indicator (overrides color)
showValuefalsebooleanShow percentage value
formatLabelundefined(value: number, max: number) => stringCustom value formatter
animatedfalsebooleanFlowing stripe animation (striped variant only)
thicknessundefinednumberStroke width for circular (circular only)
labelundefinedstringAccessibility label
classNameundefinedstringAdditional CSS class
| Name | Type | Default | Description |
|---|---|---|---|
type | "linear" | "circular" | "linear" | Display type — linear bar or circular |
value | number | 0 | Progress value (0 to max) |
max | number | 100 | Maximum value |
size | "sm" | "default" | "lg" | "default" | Size — linear: track height, circular: diameter |
variant | "default" | "striped" | "default" | Visual variant (linear only) |
color | "default" | "primary" | "default" | Indicator color — default: dark, primary: brand color |
indicatorClassName | string | undefined | Custom class for the indicator (overrides color) |
showValue | boolean | false | Show percentage value |
formatLabel | (value: number, max: number) => string | undefined | Custom value formatter |
animated | boolean | false | Flowing stripe animation (striped variant only) |
thickness | number | undefined | Stroke width for circular (circular only) |
label | string | undefined | Accessibility label |
className | string | undefined | Additional CSS class |
Anatomy
Best Practices
Recommended
- ✓Use determinate mode when progress is measurable
- ✓Show value with showValue for long-running tasks
- ✓Use appropriate color for status (e.g. error for failure)
Don't
- ✕Don't use Progress when progress is unknown — use Spinner
- ✕Don't display large numbers of Progress bars on one page
- ✕Don't use Progress for post-action feedback — use Toast
Accessibility
ARIA / WCAG
role="progressbar"applied automaticallyaria-valuenow/aria-valuemaxlabelprop sets a custom label