Dialogs open from their button
Dialogs and the command palette grow out of the button you clicked and go back into it. Sheets slide in while the page steps back. Toasts fly from the button that made them.
Search Keyframery's docs
Dialogs grow from the button you clicked. Tabs slide instead of snapping. Lists, numbers and loading states move instead of jumping. Your components don't change.
shadcn/uias it ships
Team
3 of 10 seats used
Ana Ruiz
ana@acme.com
Ben Okafor
ben@acme.com
Chloé Martin
chloe@acme.com
Invite a teammate
They'll get an email with a link to join Acme.
shadcn/uiwith Keyframery
Team
3 of 10 seats used
Ana Ruiz
ana@acme.com
Ben Okafor
ben@acme.com
Chloé Martin
chloe@acme.com
Invite a teammate
They'll get an email with a link to join Acme.
Same app, same clicks. Only one of them has <Cuts /> in its layout.
Works with
A screen can only change in six ways. The first two are automatic once <Cuts /> is in your layout. The other four take one small component each.
Dialogs and the command palette grow out of the button you clicked and go back into it. Sheets slide in while the page steps back. Toasts fly from the button that made them.
The indicator moves first and the new panel follows a beat later, while the height eases to fit.
The card grows into its detail view, on the same page or on a new route, and shrinks back when you return.
<MatchCut>DocsA sent message flies out of the Send button. Removed rows fold away. Reordered rows glide to their new place.
<ListCut>Docs1,284
Prices, counts and totals change digit by digit instead of flickering.
<ValueCut>DocsSkeletons dissolve into the real content. If the data arrives within 300 ms, no skeleton shows at all.
<LoadCut>DocsKeyframery doesn't replace or wrap your components. It finds shadcn's own parts on the page and gives them motion. Remove the line and you're back to stock shadcn.
Read the installation guideAdd it with the shadcn CLI
The first line registers Keyframery in your components.json, once. After that every helper installs by name, like npx shadcn add @keyframery/list-cut. The second copies <Cuts />, its stylesheet and a small engine into your project: about 7 KB gzipped, with no extra dependencies.
Render <Cuts /> once, in your root layout
app/layout.tsx
import { Cuts } from "@/components/keyframery/cuts"
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
<Cuts />
</body>
</html>
)
}Using a coding agent?
Copy a short prompt for Claude Code, Cursor or any other agent. It installs Keyframery, renders <Cuts />, and wraps the lists, numbers, skeletons and cards in your app.
In Claude Code, the plugin does the same, and reads the docs through the Keyframery MCP server:
/plugin marketplace add keyframery/keyframery /plugin install keyframery@keyframery
Six app screens made of stock shadcn/ui components. Click anything. Switch Keyframery off to compare, or slow every cut down to watch it closely.
Revenue
$61,480
Visitors
16,240
Ada Kaur
ada@studio.dev
4 tracks, 14 min
Invoice 1044, Northwind Studio
$1,300.00
No payment yet. Charging uses the card on file, Visa ending 4242.
Actions for invoice 1044
Speed, easing, travel and blur are CSS variables in your globals.css, next to your colours. Set them for the whole app or for one section. The Theme page writes them for you.
:root { --kf-pace: 1.0; }Install it, render <Cuts /> in your layout, then open any dialog in your app.