Skeleton
The shape of what's coming, with one soft band of light sweeping across, and a swap that hands over to the real content without a pop.
Used forDashboardsLists and tablesProfilesFeeds
Install with the shadcn CLI
Templates
Need the whole page?
43 Next.js landing pages, each designed from scratch. Try any of them live; one is $39, all of them $99, and 5 are free.
Where it’s used
Dashboards
Cards and charts while data loads.
Lists and tables
Rows that keep their place.
Profiles
An avatar and two lines of text.
Feeds
Posts that arrive without shifting the page.
What it handles for you
The worst part of a skeleton is the moment it is replaced; this one owns that moment.
One sweep
A light band crosses each shape in 1.6s.
Hand-over
SkeletonSwap crossfades to content through a blur (300ms).
No jump
The box eases between the skeleton's height and the content's.
Shapes
line, circle and block with any size.
Overview
Skeletons usually pulse out of step and then vanish in one frame when the content lands, so the page jumps. Here one band of light sweeps across the shapes, and SkeletonSwap fades them out as the content rises out of a 4px blur in their place while the box eases to the content's height.
States
- waiting
- Muted shapes with a sweep (1.6s loop).
- arriving
- Content rises 4px out of a 4px blur (300–420ms); height eases (360ms).
Usage
Props
| Prop | Type | Description |
|---|---|---|
| shape | "line" | "circle" | "block"default "line" | Skeleton shape. |
| width / height | number | string | Size. |
| SkeletonSwap | { loading, fallback, children, label } | Holds the fallback, then hands over. |
Accessibility and motion
- Skeleton shapes are aria-hidden; SkeletonSwap announces its label and sets aria-busy.
- Reduced motion: no sweep; the content fades in.
Requirements
React 19, Tailwind CSS v4 and shadcn/ui theme variables (any style, light and dark). Icons from lucide-react.
The CLI also installs ui-interaction-motion.
Source
Registry item: /r/skeleton.json


