0 dependencies · 20 components · 8 templates · 6 palettes
Components you own, not components you install.
Every PresetUI component is one JavaScript file that imports nothing but React. You copy it in and it stops being ours. There is no package to update and nothing to override.
Change a token. Everything follows.
try a theme →
- surface
- #ffffff
- fg
- #0a0a0a
- muted
- #737373
- border
- #e5e5e5
- accent
- #0a0a0a
- accent-fg
- #ffffff
- danger
- #dc2626
- success
- #16a34a
- warning
- #d97706
optional
Invite a teammate
Nothing above was restyled. Each theme rewrites the same custom properties, and every component reads only those — which is why rebranding the kit is a stylesheet edit, not a refactor. All 6 palettes.
Templates, not just parts
Whole sections assembled from the components — a starting point you rewrite, rather than something you configure.
Three steps, then you're on your own
- 01
Paste seven CSS variables
One @theme block in your global stylesheet. This is the only code PresetUI components share.
- 02
Copy one file
Open a component, switch to the Source tab, paste it into components/ui/. It imports nothing but React, so nothing else comes with it.
- 03
Change whatever you want
It's an ordinary file in your repo now. Rename it, delete a variant, rewrite the markup. Nothing upstream can disagree.
20 components so far
Each page has three tabs: the live component, how you'd use it, and the file you copy.
Accordionaccordion.js
Alertalert.js
Avataravatar.js
Badgebadge.js
Breadcrumbbreadcrumb.js
Buttonbutton.js
Cardcard.js
Checkboxcheckbox.js
Dialogdialog.js
Inputinput.js
Labellabel.js
Progressprogress.js
Radioradio.js
Selectselect.js
Separatorseparator.js
Skeletonskeleton.js
Switchswitch.js
Tabletable.js
Tabstabs.js
Textareatextarea.js
Built to be readable by an agent
The whole kit — theme and every component — is served as one plain text document. An agent fetches it once and writes the files. No registry format to parse, no CLI to install.
# PresetUI — zero-dependency # React + Tailwind components # # Do not install these from npm. # There is no package. ## Setup — @theme block ## Accordion— /r/accordion.txt ## Alert — /r/alert.txt ## Avatar — /r/avatar.txt ## Badge — /r/badge.txt ## …and 16 more
Read https://presetui.com/llms.txt and write the components into components/ui/ as .js files. Do not install any packages.
Against installing a package
Copying has real costs. Here they are next to the benefits.
| PresetUI | A component package | |
|---|---|---|
| To start using it | Copy a file | npm install |
| Where the code lives | Your repo | node_modules |
| Changing a variant | Edit the file | Override, fork, or file an issue |
| Breaking changes | None — nothing updates | Whenever you upgrade |
| What you ship | The lines you kept | The whole package |
| Class conflicts | Resolved by stylesheet order | Resolved by tailwind-merge |
The last row is the one that bites. Without tailwind-merge, a className that collides with one the component already sets is decided by stylesheet order, not by you. It's the price of the file carrying no dependencies.