Reveal
IntersectionObserver
00Departure· 23°33′S 46°38′W
React components, motion and effects you install as source code with the shadcn CLI, checked against Tailwind CSS 3.4 and 4. Take the code. Make it yours.
pnpm dlx shadcn@latest add @corsair-ui/buttonNo setup: the CLI finds it in the shadcn registry directory. Installation
Speed14 kn
01Foundation· Five waypoints
The everyday pieces every product rebuilds, made once and made carefully. Scroll the route: every stop is the real component, ready to click.
WPT 01 · Button
Six variants, three sizes and icon sizes, asChild for links, and a loading state that blocks the double click.
25°46′N 080°11′W
WPT 02 · Input
Inputs, groups with addons, labels and help text. Errors come from aria-invalid, so any form library can drive them.
23°08′N 082°21′W
Addons, focus rings and errors come with it.
WPT 03 · Badge
Neutral surfaces with the tone on a dot or the icon, so a page full of statuses still reads calmly.
18°28′N 066°07′W
WPT 04 · Card
Header, action, content and footer parts that compose instead of configure.
10°25′N 075°32′W
WPT 05 · Tooltip
Short labels on hover and on keyboard focus, with motion that stops when you ask it to.
12°03′S 077°02′W
02Forms· Assembly
Field for layout, FormField for react-hook-form, and inputs that all speak aria-invalid. Keep scrolling: each step adds the next piece.
Log 01 · Label and input
FormField lays out the label, the control and its help text, and wires the id and the ARIA attributes for you.
Log 02 · Choices
A Select for the port of call. Same field around it, same keyboard support as a native select.
Log 03 · Dates
The range picker opens a calendar in a popover, closes on the second pick and submits yyyy-mm-dd.
Log 04 · Validation
Submit it empty. Errors ease in under their field and are announced, and the fields point at them.
charter-form.tsx
<FormField
control={form.control}
name="captain"
label="Captain"
rules={{ required: "Every ship needs a captain." }}
render={({ field }) => <Input {...field} />}
/>
03Motion· Underway
Fewer, better animations: transforms and opacity, IntersectionObserver and CSS scroll-driven animations. No animation library, no scroll listeners.
Things arrive when you reach them, lean toward your hand when you reach for them and drift at their own pace as you pass. Ask your system for less motion and all of it holds still.
IntersectionObserver
One frame, no re-render
CSS only, 0 KB of JS
04Creative· Uncharted
For the moments that should feel special: light that follows the pointer, borders that travel, auroras and ink that draws itself. Every one of them rests off screen.
Aurora · Spotlight
Three radial gradients drifting on transforms, and a light that follows your cursor across the card and along its edge.
Signature
Ink that draws itself, stroke by stroke, when it comes into view.
Animated border
A light that sails the edge.
One rotating layer on the compositor, paused while it is off screen.
05Registry· Letters of marque
Corsair is a shadcn registry. One command writes real files into your project: no package to wrap, no black box to fight.
pnpm dlx shadcn@latest add @corsair-ui/themepnpm dlx shadcn@latest add @corsair-ui/date-picker01resolve@corsair-ui/
02resolve@corsair-ui/
03resolve@corsair-ui/
04resolve@corsair-ui/
05writelib/
06writecomponents/
07writecomponents/
08writecomponents/
09writecomponents/
10install@daypicker/
✓ 5 files you own · 7 packages · 0 black boxes
06Set sail
Start with the theme and a button. Take on the rest when you need it, and make every file your own.
pnpm dlx shadcn@latest add @corsair-ui/theme