The design system publishes a shadcn-compatible registry. Apps already on Tailwind v4 + shadcn/ui install components straight off Vercel — no copy-paste, no fork. The shapes are KokonutUI (MIT); the color is not. Every item is bridged to the two-token contract, so it recolors with data-theme and data-mode like any other surface.
cn() class composer
type-writer, attract-button) are installable
but held off the grid (reflow + decorative-hover noise).
Every item installs the same way — the standard shadcn CLI, pointed at the item's r/<name>.json manifest on Pages. The CLI resolves registryDependencies on its own: the utils lib, the hooks, and shadcn primitives such as button / input / card / textarea.
$ npx shadcn@latest add https://design.subconscious.ai/r/toolbar.json
Prerequisite — the app's shadcn variables must already resolve to the contract pair. Do Option A first (copy contract.css + shadcn.css) so --background, --foreground, --primary, --border point at --backgroundColor / --color. Registry components carry no color of their own — they render in whatever the contract resolves. Full recipe: ADOPTING.md §Option D.
r/<name>.json manifest.Names link to the live manifest published verbatim by Vercel. The add column is the exact command — swap the red leaf for any other name.
npx shadcn@latest add …/r/particle-button.jsonnpx shadcn@latest add …/r/slide-text-button.jsonnpx shadcn@latest add …/r/ai-input-search.jsonnpx shadcn@latest add …/r/attract-button.jsonnpx shadcn@latest add …/r/sliced-text.jsonnpx shadcn@latest add …/r/use-auto-resize-textarea.jsonReact-as-islands. The bundle below scans for [data-kokonut] placeholders and renders each into the page DOM. No iframe; no per-page Vite app. Add a placeholder + the script tag and a kokonut component shows up where it belongs. See #443 for the migration sweep.
The sixteen components are adapted from KokonutUI, used under the MIT license. Their shape and motion are preserved verbatim; only color is remapped to the contract tokens. The registry itself is build tooling plus content — registry.json + scripts/build-registry.mjs emit the r/*.json manifests. It never touches contract.css, derived.css, or _base.css, so the editorial doctrine and its CI gates stay independent of it. tests/registry-tokens.test.mjs gates that registry components stay bridged — no raw Tailwind palette classes, no framework imports.