Radial Meter

Pro

One ratio against a limit, drawn as a ring or a gauge with the number at its heart. Thresholds recolour the fill and add a labelled chip, and up to three concentric rings track goals side by side.

68%Storage used

68.4 GB of 100 GB

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add chart

Usage#

RadialMeter ships in the Chart folder. Pass a value and, when the limit is not 100, a max; the centre shows the share of the range as a percent unless you pass a valueFormatter. It is the radial counterpart of Meter: same meaning, same role="meter", a round shape for a KPI tile or a hero figure. Use it instead of a two-slice pie whenever the chart is a single percentage.

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Radial Meter or Meter#

Both report how much of something there is against a known limit, and both announce as a meter. Meter is a bar, the better fit in a row, a table or a settings list, where several readings line up and compare by length. A radial meter carries one number in a compact square, the better fit for a dashboard tile or a single headline reading.

Gauge and thresholds#

variant="gauge" opens the ring into a 240° arc and crops the empty space below it. thresholds mark where a reading becomes a warning and a critical one (higher is worse, both inclusive): a notch breaks the track at each, and past one the fill takes the status hue and a labelled chip appears below, so the state never rides on colour alone. Shuffle to watch the fill ease between readings.

42%Node 1 CPU
78%Node 2 CPU
Warning
94%Node 3 CPU
Critical

Concentric rings#

segments draws up to three rings, outermost first, with a gap that grows with the size (2px minimum), each measured against its own max: an activity goal, a budget per team. The centre still shows value, here the average of the three. Two or more series always want a legend, so pair the rings with one; the meter already gives assistive tech a list of every ring and its reading.

  • Move: 70%
  • Exercise: 80%
  • Stand: 75%

In a stat#

A small ring beside an absolute figure in a Stat: the ring says how full, the value says how much. A numeric size (56px here) with a thinner thickness fits a header row, and shared thresholds flag the resources running out.

CPU
63%
63%
8 vCPU, 5 min avg
Memory
78%
Warning
12.4 GB
of 16 GB
Disk
92%
Critical
471 GB
of 512 GB
Bandwidth
24%
1.2 TB
of 5 TB this month

Accessibility#

A single reading is a role="meter" with aria-valuenow, aria-valuemin and aria-valuemax, named by label (or your aria-label). Its aria-valuetext is the formatted value plus the status, so a screen reader hears “94%, critical”; pass your own to say more. With segments the meter becomes a labelled group described by a visually hidden list of every ring. The SVG is hidden from assistive tech. The fill draws in once on mount and eases between values, and lands at once under prefers-reduced-motion.

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

API reference#

RadialMeter

A role="meter" (or, with segments, a labelled group) wrapping one measured SVG and the centre text. Forwards all native <div> props; className is merged last.

PropTypeDefaultDescription
value*number-The reading, clamped to [min, max]. A non-finite value reads as min.
minnumber0The low end of the range.
maxnumber100The high end of the range, the limit the value is measured against.
variant"ring" | "gauge""ring"ring is a full 360° circle; gauge a 240° arc open at the bottom, cropped to its height.
size"sm" | "md" | "lg" | number"md"sm 80px, md 128px, lg 176px wide, or any width in px; a number scales the stroke and picks the closest type size.
thicknessnumber-Stroke width in px. Defaults to 9% of the diameter (7.5% per ring with segments); concentric rings cap it so the centre keeps at least 40% of the diameter.
color"chart-1" | "chart-2" | ... | "chart-8""chart-1"The fill's hue while the reading is under every threshold.
thresholds{ warning?: number; critical?: number }-Higher is worse. At or past a threshold the fill takes the warning or critical hue and a labelled chip appears under the meter; a notch marks where each zone begins.
segmentsRadialMeterSegment[]-Up to three concentric rings, outermost first: { label, value, max?, color? }. Each ring has its own max (a goal); colours default to chart-1, chart-2, chart-3. Thresholds do not apply.
labelstring-The caption under the number, and the accessible name unless aria-label or aria-labelledby is passed. The number and caption are sized to the hole inside the rings; a caption that does not fit is hidden visually but stays in the accessibility tree.
valueFormatter(value: number) => string-Formats the centre number and aria-valuetext; defaults to the share of the range as a whole percent.
childrenReactNode-Replaces the number and caption in the centre.
Data attributeDescription
data-variant"ring" or "gauge".
data-status"normal", "warning" or "critical"; absent with segments. Also on the status chip.
data-fractionOn each radial-meter-indicator: the share of its range it fills, 0 to 1.

FAQ#

When the reading stands alone: a dashboard tile, a storage card, a headline figure. Meter is a bar, the better choice when several readings sit in a list and compare by length. Both are role="meter" and mean the same thing.