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.4 release
The stability promise. From here on, no breaking changes within the 1.x line. The full CHANGELOG documents everything.
- Environment Scenes, split in two: a scene is a place and owns the palette; an atmosphere is a composable stack of conditions, each at its own intensity, owning the particles and the colour wash.
setAtmosphere(),getAtmosphere(),listAtmospheres(). - 23 weather conditions + 6 kinds of ambient air on 8 new FX primitives, one global 180-particle budget across the whole stack, and intensity that genuinely reaches 0.
- New subpath
crusher-ui-kit/runtime/contrast: pure, DOM-free WCAG maths (contrastRatio,composite,fitOverlays,fitInk) so a consumer can prove its own text survives any wash it puts over the page. - Muted ink raised: light
#475569, dark#a3b0c2. Both modes now tolerate roughly a 21% overlay instead of 1%, and the atmosphere gate holds muted text to a full 4.5. - Two new CI gates:
check:atmospheresweeps every veil against the kit's own text at 861 points per mode, andcheck:runtime-typescovers the catalogs, unstyled primitives and conditions that would render nothing. - Stability contract unchanged: semver-stable 1.x, no breaking changes within the line. A 2.0 requires alpha + ADR + migration guide + dogfooding first.
What this powers today.
Personal site (minimal dialect). Astro static.
Creative portfolio (neumorph dialect). Astro static.
This site, framework demo + release-gate review surface.
The hub, via the static tool-shell contract. The 37 tool pages behind it now own their own CSS by design, one committed identity each.
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.
Two slots, not one. A scene is a place and owns the palette; an atmosphere is a stack of conditions that compose, each at its own strength, so blossom can still drift through a dust storm. 23 weather conditions, 6 kinds of ambient air, one particle budget across all of them. Opt-in, prefers-reduced-motion safe.
Bright, airy, high-noon clarity
Intensity reaches 0: a clear day means no rain at all, not a light drizzle. Weather and ambient chips toggle, so they stack. prefers-reduced-motion drops the motion live, keeping the colour.
The studio above drives setScene() and setAtmosphere(). Everything they do is also reachable from markup: <crusher-scene> mirrors its attributes into the runtime, so a static page or a server-rendered template can declare its weather with no script of its own. The element below is real, and these buttons do nothing but set and remove attributes on it. Note the last two: an explicit name="" clears, because that is a stated intent, while an element that declares nothing asserts nothing and leaves the scene alone.
<crusher-scene></crusher-scene>
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.