# Radial Chart Progress

> A three-quarter arc tracking progress toward a goal, with the count shown in the center.

A shadcn/ui block from the [@esuiss](https://suiss.app/ui?utm_source=shadcn.exchange) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/esuiss/radial-chart-progress).

- Page, with a live preview: https://shadcn.exchange/r/esuiss/radial-chart-progress
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/esuiss/radial-chart-progress-light-f88678b8dd91dab1.png
- Registry item: https://suiss.app/ui/r/new-york-v4/radial-chart-progress.json
- Categories: charts, charts-radial
- Listed: 2026-10-20, source last changed 2026-10-20

## Install

```bash
npx shadcn@latest add https://shadcn.exchange/r/esuiss/radial-chart-progress.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `recharts`
- Registry items: `@esuiss/card`, `@esuiss/chart`

## Files

### `components/charts/radial-chart-progress.tsx`

```tsx
"use client"

import { PolarAngleAxis, RadialBar, RadialBarChart } from "recharts"

import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/components/ui/card"
import { type ChartConfig, ChartContainer } from "@/components/ui/chart"

const chartData = [{ name: "value", value: 64, fill: "var(--color-value)" }]

const chartConfig = {
  value: { label: "Reading", color: "var(--chart-4)" },
} satisfies ChartConfig

export function RadialChartProgress() {
  return (
    <Card variant="filled" size="sm">
      <CardHeader>
        <CardTitle>Goal progress</CardTitle>
        <CardDescription>A three-quarter arc</CardDescription>
      </CardHeader>
      <CardContent>
        <div className="relative">
          <ChartContainer
            config={chartConfig}
            className="aspect-auto h-52 w-full"
          >
            <RadialBarChart
              accessibilityLayer={false}
              data={chartData}
              innerRadius="72%"
              outerRadius="100%"
              startAngle={225}
              endAngle={-45}
              barSize={16}
            >
              <PolarAngleAxis
                type="number"
                domain={[0, 100]}
                tick={false}
                axisLine={false}
              />
              <RadialBar
                dataKey="value"
                cornerRadius={20}
                background={{
                  fill: "color-mix(in oklab, var(--color-value) 22%, transparent)",
                }}
              />
            </RadialBarChart>
          </ChartContainer>
          <div className="pointer-events-none absolute inset-0 justify-center flex flex-col items-center text-center">
            <span className="text-3xl font-semibold tracking-tight tabular-nums">
              16 / 25
            </span>
            <span className="text-xs text-muted-foreground">books · 2026</span>
          </div>
        </div>
      </CardContent>
    </Card>
  )
}
```
