---
url: /components/progress-indicators/guidelines.md
description: >-
  Progress indicators inform users about the status of ongoing processes, such
  as loading an app. It show the status of a process in real time.
---

# Progress indicators

Progress indicators inform users about the status of ongoing processes, such as loading an app. It show the status of a process in real time.

[Overview](overview.md) · [Specs](specs.md) · **Guidelines** · [Accessibility](accessibility.md)

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm37ri5xn-Progress-Indicator-A_1.mp4?alt=media" aria-label="Primary colored horizontal line fills a contrasting track from left to right and reaches the end when the app is loaded."></video>

Progress indicators communicate the status of an ongoing process

## Usage

Use progress indicators to show the status of ongoing processes, such as loading an app, submitting a form, or saving updates.

When multiple items are loading, use a single progress indicator to show progress for the group. Don’t add progress indicators to every activity.

::: tip Do
<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0h3mssg-Progress-Indicator-B.mp4?alt=media" aria-label="One progress indicator showing the loading progress for a page of podcasts."></video>

Indicate overall progress of a group of items
:::

::: danger Don't
<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0h3n5x5-Progress-Indicator-C.mp4?alt=media" aria-label="Two progress indicators showing the loading progress of two podcasts."></video>

Don’t show the progress of each activity in a group
:::

Choose a [loading](../loading-indicator/overview.md "Loading indicators show the progress of a process with a short wait time.") or [progress indicator](overview.md "Progress indicators show the status of a process in real time.") that corresponds to the expected wait time and kind of process. 

If the wait is very long, consider allowing people to navigate away from the page while the process finishes up.

| **Expected wait time**       | **Recommendation** |
| ---------------------------- | ------------------ |
| Instant (under 200ms)        | No indicator       |
| Short (between 200ms and 5s) | Loading indicator  |
| Long (Over 5s)               | Progress indicator |

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0h3nu79-Progress_Indicator-C.mp4?alt=media" aria-label="Screen without latency without progress indicator."></video>

**Instant (under 200ms):** Display the content immediately

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0h3o5um-Progress_Indicator-D.mp4?alt=media" aria-label="Screen with slight lag with loading indicator."></video>

**Short (between 200ms and 5s):** Use a loading indicator

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm37rcxcs-Loading-Indicator-E_2.mp4?alt=media" aria-label="Screen with long lag and progress indicator."></video>

**Long (over 5s):&#xA0;**&#x55;se a progress indicator

There are two variants of progress indicators:

1. Linear
2. Circular

**Linear** indicators are best when placed on the edge of a container.

**Circular** indicators are best when centered in an element.

A process should be represented by the same variant of progress indicator throughout the product. For example, if refreshing uses a circular indicator in one place, it should use circular indicators everywhere.

![1. A primary colored horizontal line fills a contrasting track from left to right. 2. A circle appears from 0 to 360 degrees.](/assets/c4f8e0ae-mlep5ivu-07.DIV8VbSj.webp)

1. Linear indicator  
2. Circular indicator

<br>

<br>

Progress indicators behave differently based on the time of progress being tracked:

* **Determinate**: Known progress and wait time
* **Indeterminate**: Unknown progress and wait time

When using a **determinate** indicator, the indicator must accurately represent the progress of what it's measuring. 

Use **indeterminate** indicators to show that a process is happening, but the wait time is unknown.

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw0hzu-Progress-Indicator-G.mp4?alt=media" aria-label="Linear and circular progress indicators show both determinate and indeterminate progress."></video>

1. Determinate progress indicators fill from 0% to 100%
2. Indeterminate progress indicators move along a fixed track, growing and shrinking in size

As more information about a process becomes available, a progress indicator should change from **indeterminate** to **determinate**.

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw2h3o-Progress-Indicator-K.mp4?alt=media" aria-label="On a track, a contrasting primary-colored horizontal line grows and shrinks, then fills it from left to right as app loads."></video>

A linear progress indicator changes from indeterminate to determinate while loading a screen

## Anatomy

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw333o-Progress-Indicator-H.mp4?alt=media" aria-label="1. The track is a horizontal line. 2. A primary colored line over the contrasting colored track is the progress indicator."></video>

1. Active indicator
2. Track
3. Stop indicator

### Active indicator

The active indicator shows the progress that has been made so far. 

In indeterminate processes, it grows and shrinks along the track repeatedly.

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw3uto-Progress-Indicator-I.mp4?alt=media" aria-label="A primary colored horizontal line fills a contrasting line from left to right."></video>

Linear indicators animate from the leading to the trailing edge along the track. Circular indicators animate from the top of the track, clockwise by default.

The active indicator appears as soon as progress begins. At low percentages where space is limited, this should appear as a dot to help people understand that there’s progress underway.

![A linear and circular progress indicator at 1% progress, where the active indicator has only just appeared.](/assets/1662ca79-mlep6b3j-12.WWkv05vm.webp)

When progress first begins, the active indicator appears as a dot

The active indicator has two shape options: **flat** and **wavy**. Use the shape that best fits the product’s tone.

The wavy shape can make longer processes feel less static and is best used when a more expressive style is appropriate.

When using the wavy shape, the overall height of the component changes. At very small sizes, the wavy shape may not be as visible.

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw4l6g-Progress-Indicator-J.mp4?alt=media" aria-label="Examples of flat and wavy active indicator."></video>

Wavy linear indicators increase the height of the overall container

### Stop indicator

The stop indicator is a 4dp circle that marks the end of a linear determinate progress indicator to meet Material's accessibility standards.

It's not used for indeterminate or circular progress indicators.

The stop indicator is required if the track has a contrast below 3:1 with its container or the surface behind the container.

::: tip Do
![A primary colored horizontal line fills a contrasting line from left to right.](/assets/da007cde-mlep7pxt-16.BeYW5_3s.webp)

Use a stop indicator when placing the progress indicator inside a container with low contrast
:::

::: warning Caution
![An invisible circular track fills with color from 0 to 360 degrees.](/assets/1bf52e99-mlep87pn-17.DbXmWAgW.webp)

Only remove the end stop indicator if there's a visual contrast of at least 3:1 with surrounding surfaces
:::

## Placement

Place a linear progress indicator along the edge of a container that’s loading. If the container changes shape, place it on the edge that animates. It can also be placed in the middle of a container.

Use a single progress indicator at the top of a page to show progress of the whole group. Don’t add one for every element unless they’re activated independently.

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw57zf-Progress-Indicator-L.mp4?alt=media" aria-label="Progress indicator at top of screen, indicating page content is loading."></video>

When at the top of a screen, a progress indicator shows that all of the page content is loading

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw6vq0-Progress-Indicator-M.mp4?alt=media" aria-label="Progress indicator on a card, indicating that the card's content is loading."></video>

When attached to a card, a progress indicator shows that just the card content is loading

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm37rivp2-Progress-Indicator-N_1.mp4?alt=media" aria-label="Linear indicator shows the loading progress of a selected news article in a list."></video>

A progress indicator on the expanding edge of a card shows that the edge may expand to show the loaded content

Circular progress indicators should be centered directly on the container or page that's loading, such as a button or card.

When loading more items on a page, place the circular progress indicator in the empty space where the new content will appear, not overlapping existing content.

However, if the content does not take long to load, consider using a loading indicator instead.

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw7zgb-Progress-Indicator-O.mp4?alt=media" aria-label="As content loads, the screen is blank except for a circular progress indicator."></video>

A circular progress indicator can show that the page is loading

<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qw8fla-Progress-Indicator-P.mp4?alt=media" aria-label="As container content loads, the container is blank except for a circular progress indicator."></video>

A circular progress indicator can show where new items will appear on a page. A loading indicator also works well in this space.

### Progress indicators in buttons

A circular indicator can be placed in a button to show that the button’s action is currently in progress.

In very small buttons, use the flat shape since the wavy shape is not as visible at that size.

To ensure a minimum 3:1 contrast ratio, change the active indicator color to be the same color as the button’s icon or label text, and remove the track.

::: tip Do
<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qwbhkm-Progress-Indicator-Q.mp4?alt=media" aria-label="Determinate circular indicator active for 2 seconds after download button is selected, reflecting download progress."></video>

Use circular indicators for short, indeterminate activities under 5 seconds
:::

::: danger Don't
<video controls src="https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fm0qwbvqt-Progress-Indicator-R.mp4?alt=media" aria-label="Shows idea of indeterminate circular indicators active on multiple buttons as  cluttered and confusing."></video>

Avoid applying progress indicators to every button in a list
:::

## Responsive layout

### Right-to-left languages

Linear progress indicators should be mirrored horizontally for products using right-to-left (RTL) languages. 

Circular progress indicators don’t need to be mirrored.

![Mirrored right-to-left progress indicator.](/assets/a11a85e0-mlep96rs-25.BxxRnCjz.webp)

Linear progress indicators can flow from right to left in right-to-left (RTL) languages

### Large screens

Circular progress indicators have flexible sizes. They can range from 24dp to 240dp, depending on the placement and the breakpoint. Avoid exceeding the minimum and maximum sizes.

Reserve very large progress indicators for large and extra-large windows, such as desktop.

![Circular progress indicators can range in size from 24dps to 240dps.](/assets/e070e132-mlep9qg1-26.BCnR0UnC.webp)

The waveform should scale with the size so the proportions look the same across sizes

Linear progress indicators dynamically adjust to fit the width of the window or element they’re placed within, such as a card. They shouldn’t be used in any elements smaller than 40dp.

The padding on each end should be 4dp minimum, but can be modified.

![Linear progress indicators can dynamically adjust to any width.](/assets/2ffd7b17-mlepa8w9-27.BuEpjbMV.webp)

The linear progress indicator should always span the width of the UI element it’s placed within
