@zero.sc/kit
v0.1.2
Published
Zero Kit CLI — copy a component into your app to own it, or take it as a package to keep it updated. Init, add, drift check, doctor.
Downloads
321
Maintainers
Readme
The problem this solves
There are two honest ways to use someone else's component, and they are not the same choice.
Install it and updates arrive for free, but the internals are not yours. The day you need the dropdown to close on a different event, you are writing a wrapper around behaviour you cannot see, or opening an issue and waiting.
Copy it and you own every line — including the bug fixed upstream last week that you will never hear about.
Most libraries pick one and pretend it is the only sensible option. This CLI makes both
available from the same source, and — more usefully — makes the second one maintainable. A
copied file keeps its hash, so diff can still tell you what changed upstream even though the
file is now yours.
Use it
npx zero-kit init # wire the stylesheet, choose package or copy mode
npx zero-kit add button card # the files land in your repo
npx zero-kit list # what is available
npx zero-kit diff # what changed upstream since you copied
npx zero-kit doctor # why is it not workingNothing to install first. The registry is bundled inside the package, so add works on a
plane.
What arrives
Asking for one component brings what it actually needs and nothing else.
$ npx zero-kit add accordion
components/accordion.tsx
components/collapsible.tsx ← required by accordion
hooks/use-controllable.ts ← required by collapsible
lib/cn.ts
Required: pnpm add clsx tailwind-mergeLocal imports are resolved and followed; external packages are reported rather than installed, because installing into someone's project without asking is not a convenience.
Modified files are never overwritten
Run add again after editing a file and the new version is written beside yours as
<file>.new. You merge it, or you don't.
This is the part most copy-based tools get wrong. Silently overwriting is a data-loss bug that presents as a helpful update, and it teaches people never to run the command twice.
The contract it keeps
- Every file carries a hash, verified on arrival. A truncated download or a tampered registry is a failure, not a subtly broken component.
- Licence headers survive the copy. The file that lands in your repo says where it came from.
- No runtime. After copying, this package is not a dependency of your app. Uninstall it and nothing breaks.
--dry-runbefore anything writes. Knowing what a command will do is not an advanced feature.- The registry is bundled. A CLI that needs the network to list what it already contains is a CLI that fails in CI.
Honest limits
- 32 of the 168 entries have no description.
listshows them by name and category only. The components work; the catalogue text is incomplete. - Copy mode is a fork, and forks drift.
difftells you that something changed upstream. It does not merge it for you. - Tailwind is assumed. The components are written against utility classes and the shell tokens. Copying one into a project without them produces unstyled markup.
- React 19 and the App Router. Client components carry
"use client"; that directive is meaningless elsewhere. initedits your global stylesheet. It adds one import line and says so, but it does touch a file you own.- This is 0.1.x. The registry format is the part most likely to change; copied files are unaffected when it does, since they are already yours.
Around it
| | |
|---|---|
| Docs and live gallery | kit.zero.sc |
| The same components, installed | @zero.sc/ui |
| Motion | @zero.sc/motion |
| A whole app instead | @zero.sc/create |
| Everything | @zero.sc |
License
MIT OR Zero License v1.0 — take whichever you prefer. Choosing MIT is enough; nothing further is required of you.
The Zero name, marks and logos are not covered — build anything you like with this code, just don't present it as a Zero product.
Copyright (c) 2026 Zero. Source Code begins at Zero.
