Progress
Determinate and indeterminate progress bars: a rounded bar that reports how far a task has gotten, or that work is underway.
The bar fills the parent it is given; a step of its own (xs, lg, …, with start to pin it to the leading edge) or a Container step sets its measure.
Name the task with string children, or pass accessibilityLabel when the visible title is omitted or contains rich content.
iOS
Android
Web
tsx
Default
Labeled
Indeterminate
Small
Large
Warning
Danger
Live
Measure
Props
Do & Don’t
Determinate
Don’t
Don't park a determinate bar at a hard-coded value as a decorative divider; a frozen fill reads as a stalled task.
Do
Uploading…
72%
Use a determinate bar when you know the share of work done, and pass showValue so the control renders the percent on the label line; the number and the bar always agree.
Indeterminate
Don’t
Don't fake indeterminate progress when you do have a measurable value; hiding a known value behind a sweep (or a spinner on iOS) hides information you could show.
Do
Connecting…
Reach for indeterminate only when the duration is genuinely unknown. Pass the label as children; on the web and Android a short bar sweeps the track; on iOS the control renders the kit Spinner, the platform's unknown-duration idiom (iOS has no linear indeterminate bar).
Context
Don’t
Don't hand-roll a bar from raw views; the kit's Progress already adapts its thickness, ends, and track anatomy per platform and stays themed.
Do
Importing contacts
Give the bar a label through its own children; it fills the parent it is given, and a Container step sets its measure when the layout calls for it.