bones

Skeleton loaders designed for React Server Components and streaming.

Streaming with Suspense

Wrap a component in <Bones> and pass a promise as data. The same component renders as skeletons while the data streams in, then swaps to content when it resolves.

Refresh the page to see the skeleton → content transition.

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Pokemon

Forced Skeletons

Wrap with BonesForce to force skeleton mode. Toggle to see the same loaded cards switch to skeletons.

Multi-Line Text

Use the lines() helper to create paragraph-sized placeholders. Each skeleton line is a real element with its own animation.

Understanding React Server Components

Server Components let you render components on the server, reducing the JavaScript sent to the client. This changes how we think about data fetching and component architecture.

Animations

Add data-bone-animate to any parent element. Set it on <body> for app-wide animation, or scope it to individual sections.

Static

Pokemon

Shimmer

Pokemon

Pulse

Pokemon

Theming

Customize skeleton colors with CSS custom properties. Override --bone-base and --bone-highlight on any container.

Warm

Pokemon

Cool

Pokemon

Dark

Pokemon