Shimmer

Text that is being written or loaded, shown with a slow sheen.

Generating response…

Reading 4 files…

Indexing the workspace…
Response generated.
Fig. 1 Status lines in progress, with a sheen passing across them. Finish to see the settled text.

When to use it

Use Shimmer on the text of a status that’s in progress, such as “Thinking” or “Searching the docs.” The words stay readable while the sheen says work continues.

With reduced motion, the sheen stops and the text stays.

Spinner

Working on it.

Syncing 3 projects…

Buttons and panels waiting briefly.

ShimmerThis page

Text on its way.

Generating response…

Reading 4 files…

Indexing the workspace…
Response generated.

Streaming answers and status lines.

Fig. 2 Two ways to show waiting. Pick by what is on its way.

How it behaves

Shimmer renders a span by default; use render to apply it to another element. Set active={false} when the work finishes to show the text normally.

The highlight derives from the text color, so it works on muted, foreground, or brand text, and brightens in dark mode. Reduced motion turns the sweep off.

Tune it with the theme's utility classes: shimmer-duration-1000 for speed, shimmer-spread-* for the band width, shimmer-angle-* for the tilt, and shimmer-once for a single sweep when a result arrives.

Use it for live status only, such as thinking, generating, or syncing. Pair it with Spinner when the row also needs an icon, and keep the text meaningful on its own.

Build it

Add it with the shadcn CLI:

Terminal

A complete example. Change the values to fit your product:

shimmer-example.tsx

The full source is yours to edit once installed:

shimmer.tsx