Data display

Badge
v1.1.3
Ready for Production

Display status indicators, labels, and counts for categorization and information hierarchy in product interfaces.

Prefer AI-assisted development?

This documentation is available via the Catalyst MCP Server. Learn how to connect →

Catalyst Badge is a production-ready component built with Radix's Slot for flexible composition, built-in design tokens, and CVA variants — so you get a consistent way to show statuses, labels, and counts with zero config.

Preview
Badge

Installation

npm install @pmi/catalyst-badge
import { Badge } from '@pmi/catalyst-badge';

Variants

Badge supports three visual styles for different interface contexts:

Solid

Neutral

Neutral color for general-purpose labeling without specific semantic meaning

Preview
Neutral

Info

Info for semantic status communication

Preview
Info

Success

Success for semantic status communication

Preview
Success

Warning

Warning for semantic status communication

Preview
Warning

Danger

Danger for semantic status communication

Preview
Danger

Accent

Accent color for high-emphasis statuses

Preview
Accent

Off-black

The default Badge color — rendered when no color or variant prop is set (variant="solid" color="off-black"). Use for high-emphasis statuses that don't fit semantic categories.

Preview
Off Black

Soft

Neutral

Neutral color for general-purpose labeling without specific semantic meaning

Preview
Neutral

Info

Info for semantic status communication

Preview
Info

Success

Success for semantic status communication

Preview
Success

Warning

Warning for semantic status communication

Preview
Warning

Danger

Danger for semantic status communication

Preview
Danger

Accent

Accent color for high-emphasis statuses

Preview
Accent

Off-black

Off-black color for high-emphasis statuses that don't fit semantic categories

Preview
Off Black

Outline

Neutral

Neutral color for general-purpose labeling without specific semantic meaning

Preview
Neutral

Info

Info for semantic status communication

Preview
Info

Success

Success for semantic status communication

Preview
Success

Warning

Warning for semantic status communication

Preview
Warning

Danger

Danger for semantic status communication

Preview
Danger

Accent

Accent color for high-emphasis statuses

Preview
Accent

Off-black

Off-black color for high-emphasis statuses that don't fit semantic categories

Preview
Off Black

Sizes

Three size options are available, with the ability to apply custom overrides as needed

Preview
Small
Medium
Large

Common Patterns

With Icon

Preview
Warning

API Reference

Badge

Accepts all standard React div attributes (onClick, aria-*, etc.) and the unstyled prop for opting out of Catalyst styling.

Badge does not forward refs; it renders a div by default, or a Radix Slot when asChild is set.

Prop

Type

Badge has no compound subcomponents.

Accessibility

Keyboard Interactions

Badge is a non-interactive display element.

If you use asChild to render Badge as an interactive element (e.g. a <button> or <a>), standard browser keyboard behaviour applies to that element.

ARIA

  • Badge renders as a <div> by default (or whatever element you supply via asChild) — it carries no implicit ARIA role.
  • Use aria-label to give context when the badge content alone is not self-explanatory (e.g. a standalone count like "3" — prefer aria-label="3 unread notifications").
  • For purely decorative badges that duplicate visible text already present on the page, add aria-hidden="true" to avoid screen-reader repetition.
  • Catalyst does not add any ARIA attributes automatically; labelling responsibility belongs to the consuming team.

Choosing the Right Component

Use Badge to label, categorize, or show a count next to other content. Reach for a different primitive when:

If you need…Use instead
A dismissible tag the user can removeTag
A full-width status or feedback messageAlert
A short contextual message attached to a specific UI elementCallout

On this page