Docs / CLI
ui.artbloom
No global install and no lock-in: it runs from npx, writes plain files, and never adds itself to your dependencies.
Commands
npx ui.artbloom add <name...>Fetch one or more pieces and write their files into the project. Names are the install names shown on every item page. Anything too big to inline — a template's images, models, audio — is streamed to disk alongside them.
npx ui.artbloom list [--kind <kind>]Print the catalogue: name, kind, and one-line description. Filter with templates or animations.
npx ui.artbloom info <name>Show exactly which files a piece would write, which of them your project already has, the npm packages it needs, and the size of the assets it would download. Writes nothing.
npx ui.artbloom initWrite a ui.artbloom.json so you stop passing paths on every call. Optional — the CLI guesses sensible defaults without it.
Flags
All of these apply to add.
-y, --yes- Answer every prompt with the default. For CI.
-o, --overwrite- Replace files that already exist. Off by default — a clash is an error.
-c, --cwd <path>- Project root. Defaults to the current directory.
--css <path>- Stylesheet that receives keyframes. Default: the global stylesheet it finds, usually app/globals.css.
--ui <path>- Where component files land. Default: components/ui.
--registry <url>- Read from a different registry origin. For self-hosting or a fork.
--dry-run- Print the plan and exit. Nothing is written, nothing is installed.
--no-deps- Skip the npm install step. You handle the packages yourself.
-s, --silent- No output except errors.
Exit codes
0— everything asked for was written.1— the run did not finish. An unknown name, a file clash without--overwrite, an unreachable registry, or a refused prompt is caught while the install is still being planned, so the project is left exactly as it was. A package manager that fails, or a missing stylesheet, exits1too: the files that already landed stay on disk, and the CLI prints the command that finishes the job.
Self-hosting
--registry points at any origin that serves the same JSON shape. That is the whole integration surface — see the item schema and the registry notes.
$ npx ui.artbloom add marquee
marquee animation by @artbloom
Seamless infinite scroller, horizontal or vertical,
with edge fades and pause-on-hover.
will write
components/ui/marquee.tsx
lib/utils.ts
will append 2 keyframes to app/globals.css
will install clsx@2.1.1, tailwind-merge@3.6.0
? Proceed? (Y/n) y
✓ wrote 2 files
✓ updated app/globals.css
✓ installed 2 packages
done in 4.2s
https://ui.artbloom.tech/artbloom/animations/marquee{
"registry": "https://ui.artbloom.tech",
"alias": "@",
"paths": {
"ui": "components/ui",
"pages": "app",
"hooks": "hooks",
"css": "app/globals.css"
}
}