Installation
Add sc1m components to your own project with the shadcn CLI.
Components are distributed through a shadcn-compatible registry. The CLI copies source into your codebase — you own the files, and you edit them directly.
Prerequisites
- React 19 and Tailwind CSS v4 wired into your build
(
@tailwindcss/viteor@tailwindcss/postcss), plus TypeScript. - A
@/*path alias pointing at your source root, in both places:tsconfig.json→"paths": { "@/*": ["./src/*"] }- your bundler — Vite needs
resolve: { alias: { "@": "/src" } }; Next.js readstsconfigpaths on its own.
Map the @sc1m namespace
Add the registry to your project's components.json:
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/index.css",
"baseColor": "neutral",
"cssVariables": true
},
"aliases": {
"components": "@/components",
"ui": "@/components/ui",
"lib": "@/lib",
"utils": "@/lib/cn",
"hooks": "@/hooks"
},
"registries": {
"@sc1m": "https://sc1m.vercel.app/r/{name}.json"
}
}Point tailwind.css at your global stylesheet — that is the file the token
layer gets merged into. Set "rsc": true in Next.js App Router projects.
Add a component
npx shadcn@latest add @sc1m/switchEvery component declares tokens and cn as registry dependencies by
absolute URL, so a single add also:
- merges the full token layer into your CSS — the
@theme inlinecontract, the default brand's:rootvalues,.darkoverrides, thedarkcustom variant, and thepopup-motionutility; - installs
src/lib/cn.ts; - installs the npm dependencies (
@base-ui/react,clsx,tailwind-merge).
Two consequences worth knowing: you cannot install a component without its tokens, and a bare name can never resolve against shadcn's own registry by accident.
App-level setup, once
Dark mode
Toggle the .dark class on <html>. This is next-themes compatible. Because
components consume semantic tokens, you write no dark: utilities yourself.
Stacking context
Wrap app content in a container with isolation: isolate, so Base UI's
portalled popups always render above it.
.root { isolation: isolate; }iOS Safari 26+
Keep position: relative on <body> for correct Base UI backdrop behaviour.
Brands
Additional brands define the same contract scoped under [data-brand="…"];
activate one by setting that attribute on <html>.
See Brands.
Browsing what's available
Every item is listed in registry.json,
or in the Components section of these docs.