Introduction
What this library is, what it deliberately is not, and the three properties that follow from theming with CSS variables.
What it is
Kipui is 24 React components in one package. Install kipui, add two lines to your stylesheet, and import components by name. Upgrades are a version bump, and the whole library moves together rather than component by component.
Everything is built on React and Tailwind CSS and nothing else. There is no styling runtime, and no provider you have to wrap the app in before a component will render — the only global you may want is ToastProvider, and only if you use toasts.
How it works
Three properties follow from theming with CSS variables instead of a config file. They are the whole idea.
- The styling is legible. Every component is Tailwind classes reading from CSS variables. If you can read the class list you can change the design, and your existing tokens are what it resolves against.
- Re-theming is a handful of variables. Redeclare
--primaryand the rest after the theme import and every component follows. There is no theme object to construct and no provider to thread it through. - The props are flat and named.
variant,size,rounded,elevation— spelled the same on every component that has them, and typed, so the editor lists the options instead of you reading source.
What's inside
24 components in 5 groups, five palettes in light and dark, and one token set that drives all of it.
| Group | Count | Components |
|---|---|---|
| Forms | 8 | Button, Calendar, Checkbox, Input, Radio group, Select, Switch, Textarea |
| Data display | 6 | Avatar, Badge, Kbd, Separator, Skeleton, Table |
| Feedback | 5 | Alert, Dialog, Drawer, Toast, Tooltip |
| Navigation | 5 | Accordion, Breadcrumb, Dropdown, Pagination, Tabs |
What it is not
Being clear about the boundary saves you an afternoon. Kipui has no opinion about anything outside the component:
- Not a design system. It ships defaults, not a brand. The palettes are starting points you are expected to replace with your own values.
- Not a framework integration. Nothing imports a router, a data layer or a form library, so nothing here decides which of those you use.
- Not a service. Nothing is fetched at runtime and nothing phones home. The package on npm is the whole of it; this site only documents it.
One consequence worth knowing up front
node_modules, changing one means a prop or a className rather than an edit. Every component takes className last so your classes win, and the tokens are there for anything broader — but if you need to rewrite a component's internals, this is not the library for that.Where to go next
The rest of the guides in reading order, or jump straight to the reference.