Progress

Progress indicators in three forms: a linear Progress bar whose fill springs smoothly with an optional label and rolling percentage, a ProgressCircle ring drawn around a centered value, and ProgressSteps segments that fill in sequence; indeterminate modes slide or spin, every variant exposes role="progressbar" with value text, and reduced motion swaps movement for an opacity pulse.

Preview

Progress preview width

Install

Add it with the shadcn CLI, or copy the source manually.

$ bunx --bun shadcn add @karaui/progress
@karaui not found? Add it to components.json
{
  "registries": {
    "@karaui": "https://karaui.kamisama-v0.my.id/r/{name}.json"
  }
}

@karaui is in shadcn's public registry directory, so the latest CLI needs no setup. On an older CLI, merge this into the existing file once and every @karaui/… install resolves.

API Reference

Progress

size?
"sm" | "md" | "lg"
md
indicatorClassName?
string

Classes for the fill (e.g. `bg-emerald-500`).

—
trackClassName?
string

Classes for the track.

—
value?
number | null

Current value. Omit (or pass `null`) together with `indeterminate`.

—
max?
number

Upper bound. Defaults to 100.

100
indeterminate?
boolean

Unknown-duration mode: a sliding segment (bar) or a spinning arc (circle).

false
label?
ReactNode

Visible label. When it is not a string, also pass `aria-label`.

—
showValue?
boolean

Show the rolling percentage.

false
getValueText?
((percent: number, value: number, max: number) => string)

Screen-reader value text. Defaults to "42%".

—
aria-label?
string
—
className?
string
—

ProgressCircle

size?
number

Diameter in px.

64
thickness?
number

Stroke width in px.

—
children?
ReactNode

Replace the centered percentage with custom content.

—
indicatorClassName?
string

Classes for the progress arc (stroke via `text-*`).

—
value?
number | null

Current value. Omit (or pass `null`) together with `indeterminate`.

—
max?
number

Upper bound. Defaults to 100.

100
indeterminate?
boolean

Unknown-duration mode: a sliding segment (bar) or a spinning arc (circle).

false
label?
ReactNode

Visible label. When it is not a string, also pass `aria-label`.

—
showValue?
boolean

Show the rolling percentage.

true
getValueText?
((percent: number, value: number, max: number) => string)

Screen-reader value text. Defaults to "42%".

—
aria-label?
string
—
className?
string
—

ProgressSteps

steps
number | ProgressStep[]

Number of segments, or labelled steps (labels render under segments).

—
value
number

Completed steps. Fractions partially fill the next segment, e.g. `2.5` fills two segments and half of the third.

—
size?
"sm" | "md" | "lg"
md
hideLabels?
boolean

Hide the step labels even when `steps` carries them.

false
aria-label?
string
Progress
indicatorClassName?
string
—
className?
string
—

Updated