Components that move with intent.

Accessible React components with motion designed into every interaction. Copy them into your app, then own every line. Built on Radix, Tailwind CSS and Motion.

Get started
$npx @plumsydev/plum-ui init

New project

main

One URL per pull request

Cookie-free, privacy friendly

Requests

Live

this billing period

Team

RBLMAKJD+2
plum.dev/join/x8f2k

Two-factor

Enter the code from your authenticator app.

Overview

  • RY

    Ryan promoted 4f2c91a to production

    Ready2m
  • LÉ

    Léa opened feat: billing page

    Preview18m
  • AL

    Alex rolled back api to 9c1e0d4

    Rollback1h

Appearance

Everything above is live. Change the accent, the radius or the mode — then click around.

components
inputs, overlays, data, motion
live examples
every one interactive
CSS file
tokens, dark mode, easings
lock-in
the code lives in your repo

Why Plum

The polish you'd add yourself, if you had the time.

Every component is designed, animated and tested so you can focus on your product.

button.tsx
dialog.tsx
tabs.tsx

You own the code

No package to fight. Every component lands in your repo as a readable file you can bend to your needs.

MonthlyYearly

Motion with intent

Springs for things you touch, expo curves for things that appear. Interruptible, fast, never in the way.

Tab↑↓Esc

Accessible to the core

Radix handles focus, keyboard and ARIA. Reduced motion is respected everywhere, CSS and JS alike.

Upgrade
--brand: 330°

Themed in one line

One CSS file of OKLCH tokens. Swap the brand hue and every component follows, in light and dark.

Gallery

Every piece, alive.

Hover a row to slow it down, then play with anything you see.

Operational
badge
⌘K
kbd
animated-number
Generating preview…
text-shimmer
RBLMAKJD
avatar
button
tooltip

Details

Go on, touch something.

Small interactions are where interfaces earn trust. Each one here is tuned by hand.

CheckboxThe check draws itself
SwitchThe thumb stretches on press
ButtonLoading grows in place
Copy buttonIcons swap with a spring
Toggle groupThe indicator follows you
SliderDrag it, the value follows

Install

One command.
Zero lock-in.

The plum-ui CLI drops the source into your project, rewrites imports to your aliases, installs what's missing with your package manager and pulls in the components it builds on.

  • Works with Next.js, Vite, React Router and Astro
  • Zero-dependency CLI, works with npm, pnpm, yarn and bun
  • TypeScript, React 19, Tailwind v4
~/my-app
❯

Build something that feels good to use.

Free and open source. Copy what you need, leave the rest.