Components you own outright.
React components built on Base UI primitives and Tailwind CSS v4, with a shadcn-compatible variant API. The source is copied into your repository, so there is no runtime dependency to upgrade and nothing to override when a design changes.
Built on
- React
- Next.js
- TypeScript
- Tailwind CSS
- Base UI
- shadcn/ui
Quickstart
$ pnpm dlx shadcn@latest add https://faber-ui.vercel.app/r/button.jsonThe CLI resolves its own dependencies, installs the npm packages it needs, and copies the source into components/ui/. Every component is addressable the same way.
By the numbers
- Components
- 60
- documented and installable
- Themes
- 1,170
- 13 hues × 5 neutrals × 6 radii × 3 densities
- Semantic tokens
- 122
- resolved from an oklch ramp
- Runtime deps
- 0
- the source lives in your repo
Every tile below is the real component.
Not a screenshot, not a video. Toggle the switch, drag the slider. This page runs the same source the CLI copies into your repository.
Engineered to the point where you stop noticing it.
Every decision here is a token, a contract, or a deliberate omission. The pay-off is that a design change lands in one place, an agent can read the whole library without a browser, and nothing surprises you six months in.
Agents read this library the way they read your code.
Machine-addressable by design, not by scraper. Point a model at a path and it gets the real source, not rendered HTML.
/llms.txtindex/llms-full.txtwhole corpus/llms.mdx/docs/*any page as raw markdown/r/<name>.jsoninstallable by URL
The shadcn MCP server ships wired up in .vscode/mcp.json, so an agent in your editor installs a component without leaving the chat.
- 1,170 themes
- 13 brand hues, 5 neutrals, 6 radii and 3 densities compose from data-* attributes on the root element. No rebuild, no per-component overrides.
- Bidirectional
- 147 logical-property utilities and 40 direction-aware variants. Nothing hardcodes left or right, so RTL mirrors without a second stylesheet.
- Motion under contract
- Components never hardcode a millisecond. Reduced-motion collapses distance and overshoot while keeping the opacity that aids comprehension.
- Accessible by inheritance
- Focus management, roles and keyboard behaviour come from Base UI primitives rather than being reimplemented per component.
- Perceptual colour
- 122 semantic tokens resolve from an oklch ramp, so contrast holds at every brand, neutral and density combination.
All components
60- Accordion
- Alert
- AlertDialog
- AspectRatio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- ButtonGroup
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- ContextMenu
- Dialog
- Direction
- Drawer
- DropdownMenu
- Empty
- Field
- HoverCard
- Input
- InputGroup
- InputOTP
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- NativeSelect
- Navigation Menu
- Pagination
- Popover
- Progress
- RadioGroup
- Resizable
- ScrollArea
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toggle
- ToggleGroup
- Tooltip