---
type: doc
title: Badge
description: Displays a badge or a component that looks like a badge.
---

> Fulldev UI for Astro. The `@fulldev` registry in `components.json` points at `https://ui.full.dev/r/styles/{style}/{name}.json`; see [installation](/astro/docs/installation.md).

```astro title="src/components/examples/badge/badge-demo.astro"
---
import { Badge } from "@/components/ui/badge"
---

<div class="flex w-full flex-wrap justify-center gap-2">
  <Badge>Badge</Badge>
  <Badge variant="secondary">Secondary</Badge>
  <Badge variant="destructive">Destructive</Badge>
  <Badge variant="outline">Outline</Badge>
</div>
```

## Installation

```bash
npx shadcn@latest add @fulldev/badge
```

## Usage

```ts
import { Badge } from "@/components/ui/badge"
```

```astro
<Badge variant="default">Badge</Badge>
```

`Badge` renders a `span`. It is strict polymorphic: pass `as` to render another
element and use that element's attributes, such as `<Badge as="a" href="/docs">`
or `<Badge as="button" type="button">`. `badgeVariants` gives the same classes
to a custom element.

## Variants

Use the `variant` prop to change the variant of the badge.

```astro title="src/components/examples/badge/badge-variants.astro"
---
import { Badge } from "@/components/ui/badge"
---

<div class="flex flex-wrap gap-2">
  <Badge>Default</Badge>
  <Badge variant="secondary">Secondary</Badge>
  <Badge variant="destructive">Destructive</Badge>
  <Badge variant="outline">Outline</Badge>
  <Badge variant="ghost">Ghost</Badge>
</div>
```

## With Icon

Add `data-icon="inline-start"` or `data-icon="inline-end"` to the icon for the
correct spacing.

```astro title="src/components/examples/badge/badge-icon.astro"
---
import BadgeCheck from "@lucide/astro/icons/badge-check"
import BookmarkIcon from "@lucide/astro/icons/bookmark"

import { Badge } from "@/components/ui/badge"
---

<div class="flex flex-wrap gap-2">
  <Badge variant="secondary">
    <BadgeCheck data-icon="inline-start" />
    Verified
  </Badge>
  <Badge variant="outline">
    Bookmark
    <BookmarkIcon data-icon="inline-end" />
  </Badge>
</div>
```

## With Spinner

Render a `Spinner` inside the badge with `data-icon="inline-start"` or
`data-icon="inline-end"`.

```astro title="src/components/examples/badge/badge-spinner.astro"
---
import { Badge } from "@/components/ui/badge"
import { Spinner } from "@/components/ui/spinner"
---

<div class="flex flex-wrap gap-2">
  <Badge variant="destructive">
    <Spinner data-icon="inline-start" />
    Deleting
  </Badge>
  <Badge variant="secondary">
    Generating
    <Spinner data-icon="inline-end" />
  </Badge>
</div>
```

## Link

Use `as="a"` with `href` to render the badge as a link.

```astro title="src/components/examples/badge/badge-link.astro"
---
import ArrowUpRightIcon from "@lucide/astro/icons/arrow-up-right"

import { Badge } from "@/components/ui/badge"
---

<Badge as="a" href="#link">
  Open Link <ArrowUpRightIcon data-icon="inline-end" />
</Badge>
```

## Custom Colors

Add classes such as `bg-green-50 dark:bg-green-800` to customize the colors.

```astro title="src/components/examples/badge/badge-colors.astro"
---
import { Badge } from "@/components/ui/badge"
---

<div class="flex flex-wrap gap-2">
  <Badge class="bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300">
    Blue
  </Badge>
  <Badge class="bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300">
    Green
  </Badge>
  <Badge class="bg-sky-50 text-sky-700 dark:bg-sky-950 dark:text-sky-300">
    Sky
  </Badge>
  <Badge class="bg-purple-50 text-purple-700 dark:bg-purple-950 dark:text-purple-300">
    Purple
  </Badge>
  <Badge class="bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300">
    Red
  </Badge>
</div>
```

## RTL

```astro title="src/components/examples/badge/badge-rtl.astro"
---
import BadgeCheck from "@lucide/astro/icons/badge-check"
import BookmarkIcon from "@lucide/astro/icons/bookmark"

import { Badge } from "@/components/ui/badge"

const translations = {
  en: {
    dir: "ltr",
    values: {
      badge: "Badge",
      secondary: "Secondary",
      destructive: "Destructive",
      outline: "Outline",
      verified: "Verified",
      bookmark: "Bookmark",
    },
  },
  ar: {
    dir: "rtl",
    values: {
      badge: "شارة",
      secondary: "ثانوي",
      destructive: "مدمر",
      outline: "مخطط",
      verified: "متحقق",
      bookmark: "إشارة مرجعية",
    },
  },
  he: {
    dir: "rtl",
    values: {
      badge: "תג",
      secondary: "משני",
      destructive: "הרסני",
      outline: "קווי מתאר",
      verified: "מאומת",
      bookmark: "סימנייה",
    },
  },
}

const { dir, values: t } = translations.ar
---

<div class="flex w-full flex-wrap justify-center gap-2" dir={dir}>
  <Badge>{t.badge}</Badge>
  <Badge variant="secondary">{t.secondary}</Badge>
  <Badge variant="destructive">{t.destructive}</Badge>
  <Badge variant="outline">{t.outline}</Badge>
  <Badge variant="secondary">
    <BadgeCheck data-icon="inline-start" />
    {t.verified}
  </Badge>
  <Badge variant="outline">
    {t.bookmark}
    <BookmarkIcon data-icon="inline-end" />
  </Badge>
</div>
```

## API Reference

Source: [`src/components/ui/badge`](https://github.com/fulldotdev/ui/tree/main/src/components/ui/badge)

| Prop      | Type                                                                          | Default     |
| --------- | ----------------------------------------------------------------------------- | ----------- |
| `variant` | `"default" \| "secondary" \| "destructive" \| "outline" \| "ghost" \| "link"` | `"default"` |
| `as`      | HTML tag                                                                      | `"span"`    |

`Badge` writes its variant to `data-variant`.

## Install what this page shows

```bash
npx shadcn@latest add @fulldev/badge-examples
```
