Browse Components

Components

Spinner

Spinners notify users that their request is being processed.

DesignUsageAccessibilityUpdates

Purpose

Show work in progress

Use a spinner to show that the system is processing a request.

Handle unknown duration

Spinners fit waits where progress cannot be measured precisely.

Place feedback near the action

Show the spinner near the control or area that started loading.

Anatomy

1

Spinner glyph

2

Label

Configuration

Tone

The colour tone of the spinner. Pick a tone that contrasts with the surface it sits on.

Brand-coloured spinner. Default for primary loading states.

Size

Match the spinner scale to the size of the surrounding component or button.

Default size for most loading states.

Label

Optional text label that accompanies the spinner to describe the action being performed.

Adds a descriptive label so users know what is being loaded.

Orientation

Spinner orientation controls whether the label sits beside or below the spinner.

Use horizontal orientation when space allows the label to sit beside the spinner.

Structure

Design tokens used

Each row is a colour, spacing, or size value the component uses, and the right-most column tells you where in the component you'll see it.

CategoryTokenValueWhere it's usedTypographysgds-font-size-14Font size of the spinner labelSizesgds-dimension-32Height of the spinner; width of the spinner

Usage

When to use

  • Use spinner for short indeterminate waits where users need to know that work is in progress.
  • Use it when you cannot accurately predict the remaining duration.

When not to use

  • Do not use spinner for long waits without any supporting context.
  • Do not leave users blocked without explaining what is happening next.

Best practices

Use a spinner for short, indeterminate waits

Spinners suit brief, unmeasurable waits like fetching data. For longer or measurable progress, use a bar.

Do not use a spinner for measurable progress

If you can show what proportion is done, uploading a known file size, a progress bar gives better feedback.

Pair the spinner with a label when context helps

Add a label so users know what is loading. Without context, a spinner only says that something is happening, not what.

Do not leave a spinner running with no resolution

If the operation fails or stalls, replace the spinner with a clear error message and a way to retry.

Accessibility considerations

Built-in accessibility

  • Spinners are loading indicators.
  • The component does not add custom keyboard behaviour.

Labels and content

  • Pair the spinner with text when users need to know what is loading.
  • Use a progress bar instead when determinate progress is available.

Focus and interaction

  • Spinners should not receive focus.
  • Do not trap users on a loading state without a way forward.

Keyboard interaction

This component does not have a separate keyboard interaction table because:

  • Spinners are loading indicators and should not receive focus.
  • Keyboard interaction belongs to any related control, such as a cancel or retry button.

Updates

DateVersionDescription

Roadmap

Planned itemStatusTargetFuture enhancements for spinnerPlannedTBD

Feedback

Have suggestions or feedback?

Share them with us on Slack → #ask-sgds-v3

Bug Reports

Found a bug or issue?

Report it on GitHub Issues → sgds/components/spinner

Singapore Government Design System

The Singapore Government Design System was developed to empower teams in creating fast, accessible and mobile-friendly digital services.

Past VersionsSGDS v1SGDS v2