HomeGetting StartedColor SystemTypographySpacingIconographyLayoutInstallationUsageAngularBlazorReactSvelteVueThemingTypographyCustomizationCSS-Only ComponentsFormsIconsIllustrationsAccessibilityGlobal ConfigurationTailwind CSSSass LibraryForge MCP ServerDropdown OptionsFocus Indicator ClippingAll componentsButtonButton AreaChipFloating Action ButtonIcon ButtonSplit ButtonAutocompleteButton ToggleCalendarCheckboxChip FieldColor PickerDate PickerDate Range PickerFile PickerLabelRadioSelectSliderSwitchText FieldTime PickerApp BarApp LauncherDrawerMenuPaginatorSkip LinkStepperTabsView SwitcherAccordionApp LayoutCardDividerExpansion PanelScaffoldSplit ViewStackStructured CardToolbarBadgeBannerBusy IndicatorCircular ProgressDialogInline MessageLinear ProgressPage StateSkeletonToastTooltipAvatarIconKeyLabel ValueListMeterSecretTableTimelineTimestampTreeKeyboard ShortcutPopoverIntroductionColorTypographySpacingShapeBorderElevationLayeringAnimationUsageIcon LibraryBlocksRoadmapChangelogBlog

Circular Progress

Circular progress indicators display progress along a circular track, for both determinate and indeterminate waits.

Usage

forge-circular-progress communicates that a single component or a small area of the page is loading or changing, through determinate, progress, theme, and track. Place it close to the content it describes, such as inside a button, a list item, or a card, rather than for the whole page. For a page-level or full-region block, use a busy indicator instead, and for a horizontal, linear alternative, use a linear progress indicator instead.

Rules

Do
Only show a progress indicator when the expected wait is more than a second.Place the indicator inside or directly beside the specific content that's loading or changing.Pick one indicator style — linear or circular — for a given action, and use it consistently everywhere that action appears.
Don't
Don't show more than one spinner on a single page at once — use a busy indicator or a parent-level indicator instead.Don't mix linear and circular indicators for the same kind of activity in different parts of the app.Don't use a circular progress indicator for a full-page load — use a busy indicator instead.

Basic usage

An indeterminate spinner is the default — it animates continuously with no specific progress value.

An indeterminate circular progress indicator.

Determinate

Set determinate and progress (a value from 0 to 1) when the actual completion percentage is known.

A determinate indicator showing a specific completion percentage.

Theme and track

Set theme to match the indicator’s surrounding context, and track to keep its background ring visible.

A themed indicator with its track visible.

Circular progress indicators display progress by animating along a circular track in a clockwise direction. They can be used to represent both determinate and indeterminate progress.

import "@tylertech/forge/circular-progress";
Properties
PropertyAttributeTypeDefaultDescription
determinatedeterminatebooleanfalseControls the determinate state.
progressprogressnumber0Controls the progress while in a determinate state. Accepts values from `0` to `1`.
themethemeCircularProgressTheme"primary"Controls the theme of the progress indicator.
tracktrackbooleanfalseControls the visibility of the track background.
Slots
NameDescription
(default)The is the default/unnamed slot. Renders content at the center of the progress indicator.
CSS Parts
NameDescription
::part(progressbar)Styles the progress bar container element
CSS Custom Properties
NameDescription
--forge-circular-progress-sizeThe height and width of the indicator container.
--forge-circular-progress-paddingThe padding inside the bounding box of the container.
--forge-circular-progress-track-widthThe track indicator width.
--forge-circular-progress-track-colorThe track background color.
--forge-circular-progress-indicator-colorThe track indicator color.
--forge-circular-progress-arc-durationThe duration of the arc animation.
--forge-circular-progress-theme-transition-durationThe duration of the theme transition.
--forge-circular-progress-theme-transition-timingThe easing function to use for the theme transition.

Screen reader behavior

Always set a meaningful aria-label on the progress indicator — without one, a screen reader has no way to tell the user what’s loading.

Loading Forge chat…