Install in any stack.
Three delivery modes, pick what fits. The package is semver-stable at 1.0; pin to ^1.0.0 and trust no breaking changes inside 1.x.
npm
Bundler apps (Vite, Astro, Next.js, etc.). Tokens + components + runtime via package exports.
npm install crusher-ui-kit
CDN / Static HTML
No build step. Drop the standalone bundle + a theme stylesheet onto any page.
<link rel="stylesheet" href="https://unpkg.com/crusher-ui-kit/dist/styles/tokens.css">
<link rel="stylesheet" href="https://unpkg.com/crusher-ui-kit/dist/themes/professional.css">
<script type="module" src="https://unpkg.com/crusher-ui-kit/dist/crusher-ui.standalone.esm.js"></script>
Static tool shell
Pre-baked light/dark/density-aware shell for no-build utility tools.
<link rel="stylesheet" href="https://unpkg.com/crusher-ui-kit/dist/static/tool-shell.css">
<script type="module" src="https://unpkg.com/crusher-ui-kit/dist/static/tool-shell.js"></script>
Why crusher-ui-kit?
Three principles. Every API choice falls out of them.
Token first
Every design value, color, spacing, radius, shadow, motion, originates from a token in design/tokens/. Components never define raw values. Themes override tokens, not components.
Dialect-driven
Eight visual identities (glass, brutal, neobrutal, neumorph, minimal, futuristic, bento, professional) ship as token overlays. Swap the active dialect via data-theme and every component re-renders. Same API surface; different aesthetic.
Runtime-controlled
Visual state lives on the document, not in components. data-mode (light / dark), data-density (compact / cozy / comfortable), data-theme (dialect). Components react via CSS variables. No React lock-in. Works in plain HTML.
What's in the 1.0 release
The stability promise. From here on, no breaking changes within the 1.x line. The full CHANGELOG documents everything.
- Stability contract: semver-stable 1.x. A 2.0 requires alpha + ADR + migration guide + dogfooded on consumer sites before becoming
latest. - New dialect
professional: neutral B2B trust-signaling theme. Blue-600 primary, opaque surfaces, Inter typography, shadcn-default radii. Sits alongside the 7 portfolio dialects. - shadcn-compat alias layer:
shadcn-compat.cssmaps--background/--foreground/--primary/ etc. onto the framework's semantic layer. Migrate from shadcn without rewriting color logic. - SaaS-dashboard component set:
crusher-tablegained pagination + custom-cell render hook; new molecules:crusher-connection-status,crusher-avatar-menu,crusher-plan-card,crusher-invoice-list,crusher-payment-method-card. - Form atoms:
crusher-currency-inputwith locale-aware Intl.NumberFormat,crusher-file-uploadwith drag-drop + validation,crusher-sparklinefor inline trend display. - Migration guide:
docs/23-migrating-from-shadcn.mdcovers token swap + component-by-component swap + react-hook-form + zod composition + Tailwind v3/v4 interop + SSR/hydration notes.
What this powers today.
Personal site (minimal dialect). Astro static.
Creative portfolio (neumorph dialect). Astro static.
This site, framework demo + release-gate review surface.
tools-hub + 30 utility tools via the static tool-shell contract.
One framework, eight visual identities.
Tap a card to apply its theme across the whole page. Every section below, including the chrome itself, re-renders. The new professional dialect is the trust-signaling B2B neutral, sitting alongside the 7 portfolio dialects.
Living, cinematic worlds. Not skins, atmospheres.
A scene layers real ambient motion over any dialect: rain that streaks the viewport, snow that drifts, leaves over a forest floor, a dust of stars in deep space. Opt-in, prefers-reduced-motion safe, and the same primitives life-os uses to feel alive. Pick a world; the stage and the page behind it both move.
Bright, airy, high-noon clarity
Scenes are an opt-in package. They never replace a dialect; they sit behind your components. prefers-reduced-motion disables the motion.
Every component, every state, try without leaving the page.
Each card below is both a marketing beat and a live QA fixture, interactive demo on top, state inspector below. The same page powers framework releases, downstream-site reviews, and per-component regression checks across all 8 dialects.
Chart it, without shipping a chart library.
A dashboard-grade chart and a KPI tile, token-driven, dark/light aware, no dependencies. For the analytics pages your products and client work actually need. When you outgrow these (tooltips, zoom, multi-series), the sparkline's advice holds: reach for Recharts or ECharts.
Shape it live. Every dial moves every component.
Drag the radius, pick a brand color, switch the dialect and mode. The preview grid and the whole page react instantly. When you land on a look, copy the link, it carries every setting.
Review the whole framework from one page.
This site is the canonical coverage surface for Crusher UI Kit. Use it to scan every public element, verify theme behavior, test runtime controls, and catch regressions before packaging or integrating the framework into other products.
Atoms
Low-level controls, feedback, and inline utility surfaces.
Forms
Label, field, hint, and error composition contract.
Molecules
Layout, overlay, selection, and intermediate interaction patterns.
Organisms
Shells, navigation, timelines, tables, and page-level surfaces.
Framework Reach
One system, multiple product shapes
- Static HTML via standalone build and theme CSS.
- Bundler apps via package root, runtime helpers, and exported themes.
- Shared layout primitives for portfolio, SaaS, dashboard, and AI surfaces.
Review Workflow
Use this page as the release gate
- Scan the landing section in light and dark mode for overall balance.
- Check atoms and overlays for spacing, hover, disabled, and empty states.
- Finish with runtime controls, toasts, and table flows before packaging.
What To Watch
Theme regressions show up first in shared surfaces
- Menubar, toolbars, filter bars, chips, and badges.
- Focus rings, contrast, and dense-mode spacing.
- Busy, empty, and validation states that are easy to forget.