Empty
Display a placeholder when there is no data or content to show. Commonly used inside tables, lists, or pages that have no results.
When to use
An Empty state tells the reader a region has no data, no results, or no access to show.
- Prefer
Skeletonwhile the region is still loading. - Prefer
Alertwhen a message sits beside content that still exists. - Compose
Empty.Rootinside aWellwhen the state needs an inset panel.
No endpoints yet
Create your first endpoint to get started.
Error page
A full-page error state with a retry action.
Oops, something went wrong.
Please try again in a few minutes.
No filter results
A common pattern for empty states when a filter or search yields no results.
No results matched your filter.
Check your spelling. It's possible what you're looking for no longer exists.
Within a data table
Inside a DataTable, host Empty in DataTable.EmptyRow. The row already spans every column (auto colSpan) and Empty.Root centers itself, so you don't hand-roll a <td> or any centering. Branch on whether a filter is active to choose between the "no data yet" and "no results" copy. See the DataTable empty-states recipe for the full two-state pattern.
Minimal
Use only the sub-components you need.
Nothing here
Composition
Compose the parts of an Empty state together to build your own:
Polymorphism
Empty.Root, Empty.Title, Empty.Description, and Empty.Actions accept asChild. When true the part renders its single child instead of its default element, forwarding class names, data-* attributes, and ref.
Reach for it when the empty state is a semantic landmark (Empty.Root asChild around a <section>), or when Empty.Title needs a heading level that fits the page outline rather than the default. Empty.Actions asChild is useful when the action row should be a <form> or a navigation element.
Empty.Icon is the documented exception: it takes its element through the svg prop and clones it, so polymorphism already goes through that prop rather than asChild.
API Reference
Empty.Root
The root container for an empty state. Centers content horizontally with consistent vertical padding and max-width.
All props from div, plus:
Empty.Icon
Renders a large icon for the empty state. Pass a single SVG icon element via the svg prop. The icon is sized to size-10 and is decorative by default: it renders aria-hidden unless the SVG carries aria-label, aria-labelledby, role, or an explicit aria-hidden. The title carries the meaning.
All props from svg, plus:
Empty.Title
The heading text for the empty state. Renders as an h3 by default. Use asChild to render as a different heading level.
All props from h3, plus:
Empty.Description
Supporting descriptive text rendered below the title. Renders as a div with vertical spacing so multiple paragraphs can be placed inside.
All props from div, plus:
Empty.Actions
A flex container for action buttons or links.
All props from div, plus: