ComponentsProgress

Progress

Something is working - and the user should never have to guess. Use a progress indicator whenever a wait lasts long enough to notice (roughly a second or more).

ShapeFeels likeBest for
CircularA pulse next to the actionButtons, table cells, compact panels
LinearA bar across the surfacePage loads, uploads, full-width cards

Both shapes share two modes:

ModeWhen
Indeterminate (default)You know it's busy, but not how far - API calls, auth checks
DeterminateYou can measure it - pass value from 0 to 100

In context

A short status line plus a spinner keeps the wait grounded in what the user asked for.


Circular

Compact by design. Default size is 40px - drop it next to a label, inside a button, or in a dense table cell.

Waiting (indeterminate)

Measuring (determinate)

Pass value when you can report how far along you are.

Colors

GDS styles primary and inherit. Use inherit when the spinner sits on a colored surface and should match nearby text.

Percent in the ring

Layer a label over the circle when the number itself matters.


Linear

A thin bar that stretches with its container. Give it a width (or a sized parent) so it has room to breathe.

Waiting (indeterminate)

Measuring (determinate)

Buffer

Two values at once - how far playback (or download) has gone (value), and how far content is already buffered (valueBuffer). Classic for streaming.

Colors


Accessibility

Progress is visual by default. Always say what is happening.

<GdsCircularProgress aria-label="Loading users" />

Props