Badges
Badges label content with a status, category, or count: read-only metadata that tells the user what something is, not a control that asks them to act.
Badges
Badges label content with a status, category, or count: read-only metadata that tells the user what something is, not a control that asks them to act.
Demo
Change the props and copy the result.
The family
Reach for the plain Badge for most labels. The rest of the family exists for the metadata it carries: a status dot, an icon, a country flag, an image, a dismiss button, an icon-only chip, and the announcement-style BadgeGroup. Each name links to its variants below. There is no states section, because a badge has none to force: everything here is static except the dismiss button on BadgeWithButton, whose hover and focus treatments are live in its gallery.
| Component | Description | Import from |
|---|---|---|
| Badge | The plain text badge in pill, color, and modern types. | @/components/base/badges/badges |
| BadgeWithDot | A badge with a leading status dot. | @/components/base/badges/badges |
| BadgeWithIcon | A badge with a leading or trailing icon. | @/components/base/badges/badges |
| BadgeWithFlag | A badge with a leading country flag. | @/components/base/badges/badges |
| BadgeWithImage | A badge with a leading circular image. | @/components/base/badges/badges |
| BadgeWithButton | A badge with a trailing dismiss button, the family’s only interactive element. | @/components/base/badges/badges |
| BadgeIcon | An icon-only badge chip, with no label. | @/components/base/badges/badges |
| BadgeGroup | An announcement-style badge nested inside a wider pill with addon text. | @/components/base/badges/badge-groups |
Badge
The plain text badge: use it wherever content needs a status, category, or count beside it. Pick the type for the shape, the color for the meaning, and the size for the surface’s density. The full space follows in 3 sections, one per type, with the color axis read from the kit’s exported filledColors object: 11 colors across the top, the 3 sizes down the left.
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| gray | |
|---|---|
| sm | Draft |
| md | Draft |
| lg | Draft |
The modern type is gray by design
color prop’s type narrows to match, so the modern section above is a single gray column: no other combination compiles. The dot and icon variants below are the exception: their modern chip stays neutral while the addon takes the color.Addon variants
Each member adds one piece of metadata to the same chip, and each runs the same three sections as the plain badge above: colors across the top, the 3 sizes down the left, one section per type. The dot and icon variants keep every color in their modern section, because that treatment keeps the chip neutral and tints only the addon; the flag, image, dismiss, and icon-only members follow the plain badge and take modern in gray alone, so their modern section is the single gray column.
BadgeWithDot
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
BadgeWithIcon
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| md | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| lg | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| md | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| lg | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| md | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
| lg | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |
BadgeWithFlag
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | |||||||||||
| md | |||||||||||
| lg |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | |||||||||||
| md | |||||||||||
| lg |
| gray | |
|---|---|
| sm | |
| md | |
| lg |
The flag artwork loads from the network
img pointing at untitledui.com, not an asset in this repo, so the badge renders empty offline or behind a blocking proxy. Self-host the SVGs if that matters to your product.BadgeWithImage
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | |||||||||||
| md | |||||||||||
| lg |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | |||||||||||
| md | |||||||||||
| lg |
| gray | |
|---|---|
| sm | |
| md | |
| lg |
BadgeWithButton
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| md | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| lg | Draft | New | Failed | Pending | Active | Label | Label | Label | Label | Label | Label |
| gray | |
|---|---|
| sm | Draft |
| md | Draft |
| lg | Draft |
The one interactive element in the family
button, with its own hover and focus treatments, live above. It needs a buttonLabel every time; details are on the Code tab under Accessibility.BadgeIcon
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | |||||||||||
| md | |||||||||||
| lg |
| gray | brand | error | warning | success | sky | blue | indigo | purple | pink | orange | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sm | |||||||||||
| md | |||||||||||
| lg |
| gray | |
|---|---|
| sm | |
| md | |
| lg |
An icon-only badge says nothing to a screen reader
BadgeGroup
An announcement chip: a small badge nested inside a wider pill, for release banners and hero eyebrows. Its full space follows in 2 sections, one per theme: 5 colors down the left, the 2 aligns across the top, and both sizes in every cell, each color carrying the message the Figma sheet writes for it. It is also the one member with hover styling and a pointer cursor, yet it renders no interactive element, so wrap it in a real link or button when it should go somewhere.
| leading | trailing | |
|---|---|---|
| brand | New featureWe’ve just released a new feature New featureWe’ve just released a new feature | We’ve just released a new featureNew feature We’ve just released a new featureNew feature |
| warning | WarningJust to let you know this might be a problem WarningJust to let you know this might be a problem | Just to let you know this might be a problemWarning Just to let you know this might be a problemWarning |
| error | ErrorThere was a problem with that action ErrorThere was a problem with that action | There was a problem with that actionFix now There was a problem with that actionFix now |
| gray | Version 4.0We’ve just released a new feature Version 4.0We’ve just released a new feature | We’ve just released a new featureVersion 4.0 We’ve just released a new featureVersion 4.0 |
| success | SuccessYou’ve updated your profile and details SuccessYou’ve updated your profile and details | You’ve updated your profile and detailsSuccess You’ve updated your profile and detailsSuccess |
| leading | trailing | |
|---|---|---|
| brand | New featureWe’ve just released a new feature New featureWe’ve just released a new feature | We’ve just released a new featureNew feature We’ve just released a new featureNew feature |
| warning | WarningJust to let you know this might be a problem WarningJust to let you know this might be a problem | Just to let you know this might be a problemWarning Just to let you know this might be a problemWarning |
| error | ErrorThere was a problem with that action ErrorThere was a problem with that action | There was a problem with that actionFix now There was a problem with that actionFix now |
| gray | Version 4.0We’ve just released a new feature Version 4.0We’ve just released a new feature | We’ve just released a new featureVersion 4.0 We’ve just released a new featureVersion 4.0 |
| success | SuccessYou’ve updated your profile and details SuccessYou’ve updated your profile and details | You’ve updated your profile and detailsSuccess You’ve updated your profile and detailsSuccess |