Get GliaKit

Feedback

Circular progress

A radial progress ring with an optional percentage in the center, in four status colors and any pixel size.

Source
src/components/ui/circular-progress.tsx
Figma
CircularProgress · status (default, success, warning, error, indeterminate). In code there is no indeterminate status; use Spinner for that.

Usage

Included in the GliaKit boilerplate. Import it where you need it:

tsx
import { CircularProgress } from "@/components/ui/circular-progress";

When to use

  • A single completion metric in a card or stat tile: onboarding steps, goal reached, quota used.
  • Compact places where a full-width bar does not fit.
  • For lists of comparable values, use Progress rows: lengths are easier to compare than arcs.
  • When the duration is unknown, use Spinner.

Examples

Status

Default, success, warning and error colors.

Sizes

Set size and strokeWidth in pixels. Hide the label when the ring is small.

Changing value

Value changes animate. Switch to success when it reaches 100.

With a caption

A small ring next to visible text, which also gives screen readers the context.

API reference

CircularProgress

Accepts only the props below (no native attribute spread).

PropTypeDefaultDescription
valuenumber-Required. 0 to 100, clamped. Changes animate over 500ms.
sizenumber72Width and height in pixels.
strokeWidthnumber8Ring thickness in pixels.
status"default" | "success" | "warning" | "error""default"Ring color: primary, diff-add, warning or destructive.
showLabelbooleantrueShows the rounded percentage in the center.
classNamestring-Merged onto the wrapper.

Accessibility

  • The wrapper has role="progressbar" with aria-valuenow (rounded), aria-valuemin=0 and aria-valuemax=100.
  • It takes no aria-label prop, so the progressbar has no accessible name. Put a visible caption next to it, or add an aria-label prop in your copy of the component.
  • Status colors are not announced; state warnings and errors in text.

Related