Badge
StableA short, non-interactive status label like Draft, Published or Failed. The words carry the meaning; the tone reinforces it.
When to use
Use it for
- The status of one item in a table row, a list or a card header.
- subtle (default) in lists and tables where many badges sit together; solid for the single status that must win a glance (Breaking, Build failed).
- Tone by meaning: success done or healthy, warning needs attention, danger failed or blocked, info new or changed, neutral no judgement.
Not for
- Anything clickable or removable: use Tag.
- A sentence or an explanation: use an inline Alert.
- Counts on icons: use the number in text next to the label.
Do and don't
Every example is rendered with the real component, so it always matches what ships.
The text says the status, the tone backs it up
Someone who cannot tell green from red still reads Published and Failed.
Subtle in rows, solid for the exception
A table full of solid badges shouts. Keep solid for the one thing that must stand out.
Color as the only signal
A dot without words fails WCAG 1.4.1 and means nothing to a screen reader.
A tone that contradicts the words
Danger for New borrows urgency the user did not ask for.
Accessibility
- Static text read in reading order. No role, not focusable.
- Subtle tones use feedback text on feedback bg (4.5:1); solid tones use text.on-solid on feedback solid (4.5:1). Checked by the token build in every brand and theme.
- The dot and icon are decorative; the text carries the status.
- If a status changes while the user watches (Running to Failed), announce it with a live region; the badge itself is silent.
Anatomy and tokens
Read from packages/react/src/components/Badge/Badge.module.css at build time. Every value is a token: open one to see its
alias chain in both themes.
- Container
.badge - Size md
.md - Size sm
.sm - Leading dot
.dot - Subtle appearance (default)
.subtle.neutral - Subtle appearance (default)
.subtle.success - Subtle appearance (default)
.subtle.warning - Subtle appearance (default)
.subtle.danger - Subtle appearance (default)
.subtle.info - Solid appearance
.solid - Solid appearance
.solid.neutral - Solid appearance
.solid.success - Solid appearance
.solid.warning - Solid appearance
.solid.danger - Solid appearance
.solid.info
Props
Parsed from the TypeScript types in packages/react/src/components/Badge/Badge.tsx, so this table cannot drift from the
code.
It also accepts every native <span> attribute.
| Prop | Type | Default | Description |
|---|---|---|---|
tone | 'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'neutral' | Meaning of the status. The text must say it too: tone only reinforces. |
appearance | 'subtle' | 'solid' | 'subtle' | `subtle` (tinted, default) for dense lists and tables; `solid` for the one status that must win a glance. |
size | 'sm' | 'md' | 'md' | No description in the code yet. |
dot | boolean | false | Leading dot in the tone color. Ignored when an icon is set. |
icon | LucideIcon | none | Leading Lucide icon, for example CircleCheck for success. |
Playground
Change the props and see the real Badge update. Controls are generated from the TypeScript props; nothing here changes the system.
<Badge>Draft</Badge>Workbench
For contributors: every state with the accessibility panel, in the component workbench (Storybook). The stories double as visual test fixtures; the guidance on this page is the user documentation (open Badge in Storybook) .
Embed Storybook stories here (4)
Loads from https://bridge-storybook.floriangouloubi.com (set STORYBOOK_URL at build time). If Storybook is not running, the frames stay
empty.
Subtle
Solid
WithDot
AllStates
Changelog
- New
Data display: Card restyled as a flat plate with an `interactive` option and padding sizes; Badge gains `appearance` (subtle, now the default, or solid), a dot, icons and sizes (existing solid badges must pass `appearance="solid"` to keep their look); new Avatar and AvatarGroup, Table (sortable headers with aria-sort, selectable rows, sticky header, focusable scroll region, useTableSort), Accordion, Tag (removable, toggleable), Divider and Kbd. Adds avatar, tag, kbd, divider and accordion component tokens.
Unreleased (current version 0.1.0, no release tagged yet) , Oct 17, 2026
- Fix
Add usage guidance files for Button, Input, Badge and Card, plus the list of color pairs to check for contrast. They feed the new documentation site; no visual or API change.
Unreleased (current version 0.1.0, no release tagged yet) , Oct 17, 2026
- New
Initial foundation: DTCG 2025.10 primitives and light/dark semantic tokens built to CSS variables, plus Button, Input, Badge and Card consuming tokens only.
Unreleased (current version 0.1.0, no release tagged yet) , Oct 17, 2026
- Internal
Regenerate gallery 2 with the Merged badge (figma-plugin)
Unreleased (current version 0.1.0, no release tagged yet) , Oct 16, 2026