Changelog
The release history for @sprtn/ui. Mirrored from the root CHANGELOG.md via VitePress's @include directive — edit the source file, not this page.
All notable changes to this project are documented here. The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
1.3.2 — 2026-05-09
Added
- Responsive foundations (RR1+RR2). Mobile-first responsive shape system: nine canonical shapes (
fullscreen-modal,bottom-sheet,horizontal-scroll,ellipsis-collapse,disclosure-toggle,stack,wrap,hover-fallback,static), three tier breakpoints (sm/md/lgat 640/768/1024px),responsivemeta field on every interactive component,npx brut doctorcodes for missing/invalid shapes, and a Playwright visual harness at 320/375/640/768/1024/1440px. Critical surfaces (dialog, popover, menu, tabs, topnav, tooltip, crumbs) ship the new shapes.
Documentation
- Configuration guide. New VitePress page documenting
brut.config.jsoptions (prefix, components, theme, tokens.override, tokens.extend, variants), plus an audit-driven cleanup of stale references across the docs site. - VitePress chrome on BRUT tokens. Docs site chrome now sources
--paper/--ink/--accent-*from the kit and is locked to light mode for visual consistency.
1.3.1 — 2026-05-09
Added
brut initscaffolds.mcp.json. Runningnpx brut initnow creates bothbrut.config.jsand.mcp.jsonin one command. Idempotent — merges into an existing.mcp.jsonwithout overwriting other server entries.- Layered test pipeline. Vitest unit tests, Playwright smoke and behavior tests, axe-core accessibility audits, size-limit bundle checks, and visual regression snapshots — all wired through
pnpm test*scripts.
Removed
table-toolbar,table-filter,table-columnssub-components. These three were application-level concerns (toolbar layout, search filtering, column visibility) rather than UI primitives. The coretablecomponent is unchanged.
Fixed
- Token overrides work in dev mode.
brut.config.jstoken overrides previously only applied duringvite build. The override CSS injection now runs in thetransformhook, sovite devrespects config too. - CI reads pnpm version from
package.json. Thepnpm/action-setupstep no longer hard-codes a version string.
1.2.0 — 2026-05-07
Added
- One-command contributor onboarding.
pnpm bootstrapruns the Node-version check, buildsdist/(sodist/components.jsonexists for the MCP server), and runsnpx brut doctorfor a clean baseline. Implementation inscripts/bootstrap.js. - Post-install reminder.
pnpm installnow nudges first-time contributors towardpnpm bootstrapvia thepreparelifecycle hook (scripts/post-install-notice.js). No-ops in CI and after the first successful build.
Documentation
- README "Contributing" surfaces the
pnpm bootstrapone-liner so new contributors hit it on the main entry path. - CONTRIBUTING "Verify before you push" uses
pnpm buildfor consistency with the rest of the page.
1.1.0 — 2026-05-06
Added
- MCP utility & suggestion tools.
@sprtn/mcpshipslist_utilities,suggest_component,list_tokens,update_token, andadd_token, plus richer static metadata for components that don't emit their own.meta.js. Backed by two new modules in@sprtn/ui:src/config/static-meta.jsandsrc/config/utilities-meta.js, both consumed by the manifest emitter. - Manifest enrichment.
dist/components.jsonnow includes utility-class metadata and an expanded static surface for non-interactive components.dist/manifest-schema.jsonupdated to match. - Contributing guide. New
CONTRIBUTING.mdplus issue templates under.github/ISSUE_TEMPLATE/(bug report, component request, feature request, config).
Changed
- README rewritten for human-first install. Three install paths (
<script>,npm,npx brut init), an integration map, and a quick "first build" walkthrough. The script-tag / zero-build adoption story remains the recommended on-ramp. - Vite plugin (
src/config/vite-plugin.js) wires the new static and utility metadata into the manifest output.
Documentation
- New integration guides under
docs-site/integrations/: Astro, Next.js, Nuxt, plain HTML, SvelteKit, Vite. - New foundations pages under
docs-site/foundations/: fonts, iconography, visual, voice.
1.0.1 — 2026-05-05
Fixed
npx brut buildno longer fails withCannot resolve entry module src/main.jsin a freshly initialized consumer project. The CLI'sbuildcommand was resolving the Vite library entry fromprocess.cwd()instead of the installed@sprtn/uipackage, so projects that contained only abrut.config.js(the sole filebrut initscaffolds) had no entry to bundle. The entry now resolves from the package directory.
1.0.0 — 2026-05-05
The first stable release. The package name moves from brut to @sprtn/ui to align with @sprtn/mcp. The runtime contract — drop brut.css and brut.js into a page, write .brut-* classes — is unchanged.
Added
- Build system migrated to Vite (M3).
bash build.shis now a thin shim overvite build.pnpm devprovides HMR for the preview pages. - 3-layer token system (M1, M2). Tokens split into
src/tokens/01-primitives.css,02-semantic.css,03-intent.cssso themes override only what they need. - Configuration via
brut.config.js(M6). A Vite plugin reads project config, supports class-prefix renaming and per-component opt-out, and emits an aligned manifest. npx brutCLI (M6).init,add,theme,migrate,doctor, andbuildsubcommands.doctorenforces the kit's hard constraints as executable checks rather than prose.- Manifest + schema (M7).
dist/components.jsonenumerates every component, its modifiers, events, hidden-input contract, and copy-pasteable examples. Backed bydist/manifest-schema.json(JSON Schema 2020-12). @sprtn/mcpserver (M7). MCP tools (list_components,get_component,search_examples,validate_markup) consume the manifest so AI agents can scaffold pages without crawling source.- Sidecar metadata files (M7). Each interactive component now has a
<name>.meta.jsdescribing its surface, validated by the Vite plugin. - Carousel + pagination JS (M7). Closes the JS-parity gap for the two components that previously needed runtime support but lacked it.
- VitePress documentation site (M8). New
docs-site/package — built from Markdown, themed with the kit's own CSS, deployed to GitHub Pages.preview/*.htmlis retained as canonical fixtures and is iframed by per-component pages. - CDN distribution documented (M8). Pinnable URLs on jsDelivr and unpkg for both
dist/brut.cssanddist/brut.js.
Changed
- Package name:
brut→@sprtn/ui. Imports becomeimport '@sprtn/ui/css'andimport '@sprtn/ui'. Theexportsmap and bin entry are unchanged. @sprtn/mcppeerDependency updated to@sprtn/ui ^1.0.0.
Removed
- The legacy hand-built
site/directory has been replaced bydocs-site/.
0.1.0 — 2026-05-03
Initial release. Vanilla HTML+CSS+JS UI kit. Two flat files, zero dependencies.
Added
- 150+ components across Forms, Interactive, Layout, Display, Typography, and Tables.
- Form controls:
input,textarea,select,checkbox,radio,switch,stepper,range,range-dual,otp,tag-input,file,dropzone,rating,combobox,multiselect,password,date,time,color,search. - Interactive components:
accordion,dialog,drawer,menu,popover,tabs,toast,tooltip,sidebar. - Layout primitives:
stack,cluster,bar,grid,split,section,container,field,fieldset,topnav,footer. - Display components:
badge,alert,card,tag,avatar,avatar-group,skeleton,spinner,empty,breadcrumbs,pagination,rows. - Typography: full type scale from
display-1throughcaption, pluseyebrow,kicker,overline,code,pre,kbd,mark,quote,prose. - Tables:
table,table-wrap,table-toolbar,table-filter,table-columnswith sticky head and sticky column support. - 80+ CSS variables for color, typography, spacing, shadows, borders, and motion.
- Hard-edge shadow system: 6 sizes from
--shadow-xs(2px) to--shadow-2xl(16px), never blurred. - 6 pop colors — pink, lime, blue, orange, purple, mint — plus semantic signal colors.
- Snap motion tokens:
--dur-fast80ms,--dur-base140ms,--ease-snapcubic-bezier. - Three font families: Archivo Black (display), Space Grotesk (UI), JetBrains Mono (code).
- 4px base spacing grid from
--sp-1(4px) to--sp-20(80px). - JS runtime: 32 interactive components auto-initialized via
data-brut. All dispatchbrut:change/brut:completeevents, mirror state to a hidden input, support keyboard navigation, and initialize idempotently.