Your code,
not theirs.
The library way
read-only · vendor-controlled
node_modules/@ui-lib/
├ esm/
│ └ button.[hash].js
│ └ dialog.[hash].js
├ cjs/
├ types/
└ package.json v3.4.1
Wait for upstream PRs to land.
Fight defaults with overrides.
Lock-step every minor version bump.
vs
The drivn way
plain files · in your repo
src/components/ui/
├ button.tsx1.2 kB
├ dialog.tsx2.4 kB
├ command.tsx3.8 kB
└ data-table.tsx4.1 kB
Open the file. Change a line. Done.
Themed in your CSS. No overrides needed.
Zero runtime deps. Ever.
Built different.
By design.
component.tsx01 / 04
<Dialog>
<Dialog.Trigger asChild>
<Button>Open</Button>
</Dialog.Trigger>
<Dialog.Content>
<Dialog.Title>Edit profile</Dialog.Title>
</Dialog.Content>
</Dialog>The receipts.
Everything you get out of the box. Nothing hidden, nothing borrowed.
What ships with drivn

- Components live in your repo
- Zero runtime dependencies
- No third-party UI primitives — no Radix, no Headless UI, just React + Tailwind
- Dot notation API
- Smart dependency resolution
- MCP / AI scaffolding
- Tailwind-native theming
- Avg component size < 4kb
