Skip to main content

Busy indicator

Overview: Progress indicators

Progress indicators inform users about the status of ongoing processes, such as loading an app, submitting a form, or saving updates. They communicate an app’s state and indicate available actions, such as whether users can navigate away from the current screen. Use a progress indicator for operations that take more than 1 second.

Progress indicators are used to:

  • Assure the user that the system is working.
  • Provide operational transparency.
  • Communicate progress made vs progress pending.
  • Reduce users perception of time elapsed.

Types of progress indicators

ContextComponentGuidance
Initial page loadSkeleton + progressive loadingUse skeleton loading when content size/shape is known. Load skeleton components, then fade in components as they become available.
Initial page loadLinear page progressUse when the content to be loaded is of unknown or variable size or quantity. Display a description of the process with a linear progress bar (see pattern below).
Full page load or changeFull page busy indicatorUse an overlay to prevent users from interacting with content on a page due to a change, server error, or form submission.
Multiple componentsSkeleton + progressive loadingLoad skeleton components, then fade in components as they become available.
Single component within a pageInline circular progress indicatorUse a contextual circular progress indicator to communicate that either a component's state or data is changing.

Overview: Busy indicator

Use a busy indicator when the entire page is loading or changing and users should be prevented from interacting with any content on the page.

Image of a busy indicator with a scrim behind it.

Busy indicator text may use the following formats.

  • [Object] is being [operation name], or
  • [Object] is being [operation name] to [destination name] or
  • [Object] is being [operation name] from to [destination name]

Real-world examples include copying files to a storage location, saving edits to a file, and more.


Resources


Research

Have you done usability testing on progress and loading? We’d love to hear from you!


Components

  • Use linear progress and circular progress components to indicate that individual elements are loading.
  • Use [skeleton](/components/progress-and-loading/skeleton loading) to initially load content when size and shape is known.
  • Use a backdrop (scrim) behind the busy indicator.
  • A busy indicator is used with a dialog.

Patterns