Skip to content
Kinetixui

Changelog

New components, platform support, token updates, CLI improvements, accessibility fixes, and breaking changes across KinetixUI. Each entry is distilled from the Changesets-generated per-package changelogs; the exhaustive, commit-level record is linked at the bottom.

Latest v0.23.3 · Patch · Sep 28, 2026

KinetixUI is pre-1.0. A minor version may change an API while the component and token contracts stabilise. Any change that needs action from you is listed under Breaking changes, with a migration note where there is one. This page is the release train for @kinetixui/tokens, @kinetixui/ui and @kinetixui/cli, which always share a version; the indicators on each release show which ones actually changed. @kinetixui/angular is released on its own cadence and has its own version — see Angular.

0.23.3

LatestPatch

preset swiftui finishes what 0.23.2 started: a Create design's corner radii and shadow ladder now reach the generated Swift file instead of stopping at the web. Alongside it, and on its own version line, the first connected-device module — @kinetixui/iot 0.1.0, Experimental. New

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed

0.23.2

Patch

SwiftUI gains real corner-radius and elevation theming: KinetixRadii and KinetixElevations sit beside KinetixColors, and the components read them. The npm packages move for one reason — the CLI stops telling you that native radius has nowhere to go. NewFixed

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed

0.23.1

Patch

A patch for one thing: the CLI told you native theme output did not exist yet. It has since 0.23.0 — the command that is CSS-only is theme build, and the messages now say that instead. Fixed

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed

0.23.0

Minor

A Create preset becomes a real theme file — web CSS, SwiftUI, Compose or Flutter — from one shared engine. Eleven components reach Stable, every component's React API is documented, and Angular arrives as a preview implementation, versioned here but not yet on npm.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI changed
  • BreakingFour Beta APIs corrected before 1.0 — ColorPicker and MarkdownEditor could only be used controlled and used onChange against the convention every other value control follows. TreeView's selection had no defaultSelected, so an uncontrolled tree could never show one. JsonViewer's hideCopy was a negative boolean. See the migration note above. Read more →
  • AccessibilityA generated theme's buttons stay readable while hovered and pressed — The action foreground was chosen against the resting fill and never re-checked against action-hover / action-pressed, so a generated theme could put a button label at 3.37:1 — below AA — the moment it was pressed. The foreground is now scored across all three fills and the state movement scales back when the label cannot follow. Contrast is also measured on the colour a platform actually receives, not the one the engine computed, because integer-HSL output cost up to 0.37 of a ratio. Read more →
  • AccessibilityA Tag's dismiss control is named after its tag — On SwiftUI, Compose, Flutter and Angular the remove button announced only "Remove", so a screen reader user hearing it out of context could not tell which tag it belonged to.
  • Newkinetixui preset — read a Create design, and turn it into a theme — preset decode prints what a KX1_ code contains and preset url prints its share link. preset css, preset swiftui, preset compose and preset flutter resolve it into a real artifact: a :root / .dark override block, or a light/dark colour pair for the platform's own theme type. All four run one shared engine over one resolved theme, so a design means the same thing everywhere — the CLI's output is asserted byte-identical to the workspace's Copy CSS. Read more →
  • NewThe three native packages accept a custom palette — SwiftUI's KinetixTheme(light:dark:), Compose's KinetixTheme(light = …, dark = …) and Flutter's KinetixTheme.custom install an exported theme while still following the system appearance. Flutter's Material and Cupertino adapters gain fromColors. Every existing call — KinetixTheme { }, KinetixTheme(child:), KinetixMaterialTheme.light() — behaves exactly as before, and Compose's original JVM entry point is preserved for apps already compiled against it. Read more →
  • NewEvery component's React API is on its docs page — Props, types and defaults, generated from the source rather than written twice. Read more →
  • New@kinetixui/angular — a preview implementation — 31 components, built AOT with strict template checking in CI. Preview: the API may still change, and it is not at parity with the React set. It is not on npm in this release — it is versioned and CI-validated in the repository, and there is no install command to give yet. Read more →
  • NewImplementation verification, kept separate from package maturity — What each platform's implementation has actually been verified to do — build, interaction, accessibility, RTL — derived from the test files themselves rather than declared. A manifest claim the evidence does not support now fails CI. Read more →
  • ImprovedEleven audited components graduate to Stable — Each one audited against its React source, its docs page and its tests before the lifecycle moved — the manifest refuses a maturity the evidence does not support. Read more →

Known limitations

  • The native exporters write colours and nothing else. SwiftUI, Compose and Flutter all read radius from generated constants and have no runtime elevation theme, so a design's radius and surface treatment apply on the web and nowhere else — each generated file says so in its own header.
  • Compose's KinetixColors has no field for input, ring or tertiary-foreground, so a preset overriding either of the first two reaches the web, SwiftUI and Flutter but not Compose. SwiftUI and Flutter carry the whole contract.
  • There is no Android XML exporter, and no single command that exports every platform at once.
  • The native libraries are not versioned with these npm packages. @kinetixui/angular is a preview implementation and is not published to npm in this release: 31 of 98 components, and its own lifecycle is separate from the React set's.
Breaking changes
  • ColorPicker and MarkdownEditor (Beta): onChange is now onValueChange, and value is no longer required — both accept value? / defaultValue? / onValueChange?.
  • JsonViewer (Beta): hideCopy is now copyable, defaulting to true.
  • @kinetixui/angular (preview): kxInput no longer matches <textarea>; use kxTextarea.
Migration

Rename onChange to onValueChange on ColorPicker and MarkdownEditor; a controlled component is otherwise unchanged. Replace hideCopy on JsonViewer with copyable={false}. In Angular, change <textarea kxInput> to <textarea kxTextarea>. Nothing in the Stable set changed — these are pre-1.0 Beta corrections, made now rather than carried to 1.0 behind an alias.

Tag on GitHub

0.22.1

Patch

kinetixui parity now explains why its list is shorter than the component total on the site. Improved

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed

0.22.0

Minor

The spatial grid is documented and extended, radius gets role aliases, and the native ports gain the same spacing and radius constants.

  • Packages
  • UI changed
  • Tokens changed
  • CLI unchanged
  • AccessibilityAlertTitle no longer hardcodes an h5 — A component cannot know where it sits in the page's outline, so the fixed level skipped heading levels under any h2 (WCAG 1.3.1). role="alert" on Alert still carries the semantics. Read more →
  • AccessibilityNative accessibility fixes for the core controls — Flutter's Button, Checkbox, Switch, Toggle and Tabs now announce their role and state (only 2 of its 97 widget files declared any semantics), its Switch mirrors under RTL, and its NavigationBar no longer overflows at large text. Compose's Tabs now announce the Tab role and the selected state. Both are covered by new interaction, semantics and RTL tests. Read more →
  • NewThe spatial scale is an 8-unit grid with a 4-unit half-step, and reaches 128 — New spacing.10, 12, 16, 20, 24 and 32 (40, 48, 64, 80, 96, 128 — the numbering stays n × 4), radius.xxl (24), duration.instant and the easing.enter, easing.exit and easing.emphasized curves. Nothing existing was renamed or changed. Read more →
  • NewRadius role aliases: field, control, container, surface — Sizes say how round; roles say what is round, so a theme can reshape every field or every card by overriding one token. On the web each is a live reference (--radius-control: var(--radius-md)) and the Tailwind preset gains rounded-field, rounded-control, rounded-container and rounded-surface. Additive; components move to the roles incrementally. Read more →
  • NewSwiftUI, Compose and Flutter get KinetixSpacing and KinetixRadius — Spacing and radius previously reached only the web and Android; the SwiftUI and Flutter components hardcoded their numbers. Both scales are now generated for all three native libraries from the same source. Read more →
  • ImprovedGuardrails: the grid and the site's own pages — pnpm check:grid keeps the spacing tokens on the 4-unit grid and stops the component library gaining new off-grid arbitrary pixel values. A new CI scan runs axe and a horizontal-overflow check over 18 site pages in light and dark at phone, tablet and desktop width, and the findings it surfaced (a phone-width overflow on /blocks, /charts, /docs and /docs/tokens, plus contrast and naming issues) are fixed.

Known limitations

  • The new tokens (spacing 10–32, radius.xxl, duration.instant, easing.enter / exit / emphasized, and the radius roles) are defined and generated for every platform, but components do not use them yet — they adopt them one at a time.
  • The native libraries are not versioned with these npm packages; their accessibility fixes in this period cover the five core controls only. The other components on each platform are still compile-checked only.
Breaking changes
  • AlertTitle is now a div and its ref type is HTMLDivElement (it was HTMLParagraphElement). This is a TypeScript-only change for code that typed a ref to it; the rendered output changes from <h5> to <div>.
Migration

If you typed a ref to AlertTitle, change useRef<HTMLParagraphElement> to useRef<HTMLDivElement>. If you relied on it being a heading, pass role="heading" and aria-level={n} to AlertTitle.

Tag on GitHub

0.21.0

Minor

DataGrid selects whole columns and rows, and scrolls while you drag-select.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • AccessibilityThe mobile menu on this site is a real modal dialog — The site's mobile navigation now traps Tab, makes the page behind it inert, closes on Esc and returns focus to its button. It is the documentation site, not a package change. Read more →
  • NewDataGrid: select whole columns and rows — With selectable, Ctrl/Cmd+click a column header (or press Ctrl+Space on it) to select the whole column while keeping any other ranges; Shift+click a second header extends across columns. A plain header click still sorts. Shift+Space on a cell selects its row. Fully selected column headers set aria-selected and take the accent fill, and onSelectionChange reports these like any other range. Read more →
  • NewDataGrid: auto-scroll while drag-selecting — Hold the button at or past the top, bottom, left or right edge of the grid and it scrolls toward the pointer (faster the further out you go) and keeps extending the range. Releasing stops it, and the last cell reached becomes the active one so Shift+arrows continue from it. The growable area excludes the sticky header and pinned columns. Read more →

Known limitations

  • DataGrid has no row-header gutter, so whole rows are selected from the keyboard (Shift+Space) rather than by clicking a row header. After Shift+Space, Shift+arrows shrinks the selection back to the focused column instead of growing whole rows.
  • Drag auto-scroll is skipped horizontally under RTL; vertical auto-scroll works in both directions of reading.
  • The SwiftUI, Compose and Flutter DataGrid selection behaviour is unchanged; these are web (@kinetixui/ui) changes.
Breaking changes None.

Tag on GitHub

0.20.1

Patch

The light warning focus ring now clears WCAG 1.4.11, and CI checks every focus ring.

  • Packages
  • UI unchanged
  • Tokens changed
  • CLI unchanged
  • AccessibilityLight warning focus ring meets 3:1 — --shadow-focus-warning used the Figma orange #f97907 (2.70:1 against the page), which failed WCAG 1.4.11 as a focus indicator. It now uses amber.800 (#7f5b21, 5.8:1), matching the light --warning colour. Dark is unchanged. Read more →
  • Improvedcheck:contrast covers every focus ring — The edge of every --shadow-focus* ring is now checked against the page in both themes, so a regression fails CI.
Breaking changes None.

Tag on GitHub

0.20.0

Minor

DataGrid drag-select and separate selection ranges; the native Buttons show hover and pressed states.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • NewDataGrid: drag-select and separate ranges — With selectable, drag across cells to select a rectangle. Ctrl/Cmd+click (or Ctrl+Space from the keyboard) keeps the current range and starts another; Shift+click and Shift+arrows extend the newest one. Ctrl/Cmd+C copies every range as tab-separated text with a blank line between ranges. onSelectionChange now also reports ranges (all of them); rows and columns still describe the newest. Read more →
  • ImprovedSwiftUI, Compose and Flutter: the primary Button shows hover and pressed states — It uses the explicit actionHover and actionPressed tokens, mirroring React's hover and active fills. The SwiftUI Button used a plain style with no press feedback at all. This is in the native libraries, which are not versioned with these npm packages, and it supersedes the 0.19.0 note that native hover and pressed states were not done. Read more →
  • FixedDataGridSelection is exported from the package — The type behind onSelectionChange shipped in 0.19.0 but was not exported, so consumers could not name it. It is now exported along with the new DataGridRange. Read more →

Known limitations

  • DataGrid does not auto-scroll while you drag past the edge (scroll with the wheel while dragging, or extend with Shift+click), and it has no whole-row or whole-column header selection.
  • Native hover and pressed states are wired for the primary Button only; other native components keep the platform's own interaction feedback.
Breaking changes None.

Tag on GitHub

0.19.0

Minor

DataGrid range selection with copy, opt-in.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • AccessibilityComponent docs no longer claim Radix provides all keyboard behaviour — The generated component pages now say that hand-built widgets (DataGrid, TreeView, ColorPicker, MultiSelect, Tour, KanbanBoard) have their own documented interaction models, and show bg-action. Read more →
  • NewDataGrid: opt-in range selection and copy — Set selectable. Shift+arrows or Shift+click extend a rectangle from the anchor cell (even after it has scrolled out of the virtualized window), Ctrl/Cmd+A selects all, Ctrl/Cmd+C copies it as tab-separated text and Esc clears it. The grid gets aria-multiselectable, every cell aria-selected, a live region announces the count, and onSelectionChange reports the rows and columns. Re-sorting clears the selection. Grids without selectable are unchanged. Read more →
  • ImprovedSwiftUI, Compose and Flutter components read the role tokens — About 80 native component files use action / actionForeground for fills and focus for rings, and the Button Link variant uses link. Nothing changes by default. This is in the native libraries (not versioned with these npm packages), and supersedes the 0.18.0 note that native components did not read action yet. Read more →

Known limitations

  • DataGrid selection is a single rectangle: no disjoint Ctrl+click selection and no drag-select.
  • Copy uses each column's value() and writes tab-separated text.
  • The SwiftUI, Compose and Flutter components now read action, link and focus, but their hover and pressed states still use platform defaults rather than actionHover / actionPressed.
Breaking changes None.

Tag on GitHub

0.18.0

Minor

Role tokens (action, link, focus, brand), a keyboard-navigable DataGrid, and the accessibility baseline closed out.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed
  • AccessibilityDataGrid follows the ARIA grid keyboard pattern — One tab stop; arrow keys move between cells (the header row included, mirrored under RTL); Home / End, Ctrl+Home / Ctrl+End and PageUp / PageDown; virtualized rows scroll into view. Alt+←/→ reorders a column and Shift+←/→ resizes it from its header, announced in a live region. Rows and cells carry aria-rowindex / aria-colindex, and the grid aria-rowcount / aria-colcount, so screen readers report the right position in a virtualized grid. Read more →
  • AccessibilityEvery story is axe-clean, in light and dark, in a real browser — Fixed: Banner used the site-header landmark role; a pressable List row was a button standing in for a listitem; DiffViewer rows had no cells and JsonViewer's nested items no group; FileUpload's dropzone was a role="button" containing a real button; ScrollArea and VirtualList scroll regions were not keyboard-focusable; ColorPicker's hex field was unlabeled; MultiSelect now removes the last chip on Backspace. Read more →
  • AccessibilityForced colors and reduced motion — InputOTP's active slot and the Chart SVG kept no focus outline in forced-colors mode (a box-shadow ring is stripped there). Skeleton, the chart loading placeholder and MessageBubble's typing dots now stop under prefers-reduced-motion, and Spinner slows to one turn per three seconds instead of stopping, so it still reads as "working". Read more →
  • NewRole tokens: action, link, focus and brand — primary was doing four jobs: the button fill, the link colour, the focus ring and, for many brands, the brand colour. action (+ action-foreground), link and focus now default to primary / ring, and brand is a separate identity colour. A theme that only sets --primary keeps working; override a role on its own to split it off. Explicit action-hover and action-pressed values are included for the native ports, and a CI check asserts they equal the web's 90% / 85% derivation. Read more →
  • NewNew colours in the SwiftUI, Compose and Flutter tokens — action, actionHover, actionPressed, brand, link and focus are in the compiled colour sets of all three native libraries. Read more →
  • Improvedtheme create / theme build and the web theme-builder accept the new tokens — They are optional overrides: unset, they resolve to primary and ring. action and brand get contrast reporting and an auto-derived foreground. Read more →
  • FixedFab's Primary hover no longer inverts in dark mode — It used the same hard-coded hover (--color-blue-600) that Button dropped earlier because it does not follow the theme and inverts in dark mode; it now uses the same action-derived states as Button. Read more →

Known limitations

  • SwiftUI, Compose and Flutter receive the new colours as tokens (action, actionHover, actionPressed, brand, link, focus), but their components do not read action yet.
  • DataGrid has no multi-cell selection.
Breaking changes
  • Components now use bg-action / text-action-foreground / text-link instead of primary, so components copied into your project need the matching @kinetixui/ui/tailwind.config preset — it defines the new colours. Update the package when you re-add components with the CLI. With the default theme nothing looks different.
  • DataGrid: every editable cell and sortable header used to be its own tab stop. The grid is now one tab stop; move between cells with the arrow keys.
  • Markup changes that can affect tests or selectors: a pressable ListItem is now a listitem containing a button (was a button in place of the listitem); FileUpload's dropzone is a plain drop surface (the Browse button is the one control, and it is no longer a role="button" containing a button); Banner no longer has role="banner"; Slider and ColorPicker put aria-label on the thumb rather than the root; MarkdownEditor puts aria-label on its textarea.
Migration

Update @kinetixui/ui (and @kinetixui/tokens) together, and re-add any component you copied so its classes match the new preset. If your theme sets --primary, nothing else changes: action, link and focus default to primary and ring. To split them, override --action, --link, --focus or --brand on their own. If a test or selector targets one of the markup changes above (the role on a pressable ListItem, the FileUpload dropzone, a Banner, or the label on a Slider), update it to the new element.

Tag on GitHub

0.17.0

Minor

Accessibility hardening for the hand-built widgets, contrast fixes, and a richer inspect.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed
  • AccessibilityTour, MultiSelect, DataGrid and sliders work from the keyboard — Tour now has an accessible name, moves focus into its card, traps Tab and restores focus on close. MultiSelect can be opened and an option chosen without a mouse. DataGrid sortable headers and editable cells are reachable with Tab (Enter / Space / F2 / Esc). Slider and ColorPicker put their accessible name on the thumb — the element that actually has role="slider". Read more →
  • AccessibilityContrast fixes on tinted and pressed surfaces — Banner and Inform information text was 4.15:1 on its own tint; it now uses a new text-info-on-container utility (--semantic-on-info-container). Button Primary pressed is 4.54:1 (was 4.11) and Secondary pressed is a solid fill (was 3.97). All clear WCAG AA in both themes. Read more →
  • Newkinetixui inspect shows parts and props — It now prints a component's first release and status, and each part (the component and its sub-components) with the props it declares itself. Specs exist for every component — previously only the 18 that define a cva() variant matrix. Read more →
  • ImprovedComponents use the type-scale aliases — Button, Badge, Tag, Kbd, Input, Select, NativeSelect, Textarea and Modal use text-label-* / text-body-md / text-title-dialog instead of re-deriving them from Tailwind literals. No visual change. cn() now knows the type scale so a text-label-* class no longer swallows a text colour. Read more →

Known limitations

  • DataGrid still has no arrow-key movement between cells, and its column reorder and resize are pointer-only.
Breaking changes None.

Tag on GitHub

0.16.1

Patch

CLI reliability and security hardening for the commands added since 0.13.

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed
  • SecurityTheme names are validated before they touch the filesystem — kinetixui theme create ../../../tmp/evil could read or write outside kinetixui-themes/. Theme names now go through the same charset validation as every other user-supplied identifier. Upgrade if you run the CLI on untrusted input. Read more →
  • Improvedlint spacing pattern hardened — Negative arbitrary values (-top-[10px], -inset-[6px]) are now an explicit part of the pattern. The old pattern already caught them, so this is a hardening, not a fix for a missed case. Read more →
  • Fixedinspect survives a malformed kinetixui.json — It prints a warning on the Installed line and carries on, instead of aborting with a raw JSON.parse error — matching how doctor already behaved. Read more →
  • Fixeddoctor checks the utils alias — The alias points at a file, not a directory like the other three, so it was silently skipped. It now gets its own extension-aware existence check. Read more →
  • Fixedlint no longer scans a nested ui directory twice — Directories are de-duplicated by containment before any recursive walk starts. Read more →
Breaking changes None.

Tag on GitHub

0.16.0

Minor

Design-system linting: kinetixui lint.

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed
  • Newkinetixui lint [path] — Scans for hardcoded hex colours and arbitrary spacing values in Tailwind utilities and inline styles that should be semantic tokens. With no path it scans your components and ui aliases. Reports file:line with a suggestion, skips comments, and only fires in real Tailwind/style contexts (not anchor links or URL fragments). Exits non-zero on any hit unless --no-fail is passed, so it is CI-safe. Read more →

Known limitations

  • Does not detect unknown or deprecated tokens (needs a live token list).
  • Does not check accessibility (needs a real a11y engine) or cross-platform inconsistencies (doesn't apply to a single-platform project).
Breaking changes None.

Tag on GitHub

0.15.0

Minor

Theme tooling: theme create and theme build.

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed
  • Newkinetixui theme create <name> and theme build <name> — Scaffold a token override file (kinetixui-themes/<name>.csv) and compile it to a drop-in CSS :root override block plus a WCAG AA contrast report. It ports the same hex / HSL / contrast maths as the /theme-builder web tool, so both produce identical output for the same input. Read more →

Known limitations

  • CSS output only. Native (SwiftUI / Compose / Flutter) theme compilation is not included.
Breaking changes None.

Tag on GitHub

0.14.0

Minor

Cross-platform inspection from the CLI: kinetixui parity.

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed
  • Newkinetixui parity [components...] — A table of which native platforms carry each component, with a status tag for anything beta or deprecated. It reads the same registry index (platform-parity.json / component-status.json) that powers the docs site, so the two cannot drift. Read more →
Breaking changes None.

Tag on GitHub

0.13.0

Minor

Inspect, Doctor, interaction tokens and the first RTL support.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed
  • Newkinetixui inspect and kinetixui doctor — inspect <name> shows a registry item's description, dependencies, files, whether it is installed, and — for the ~20 components with a variant matrix — its variant axes. doctor checks kinetixui.json, its aliases, the Tailwind CSS target and registry reachability, and exits non-zero on failure so it is CI-safe. Read more →
  • NewInteraction tokens — target.minimum (44px), target.default (40px), focus.width (1px), focus.offset (2px), press.opacity (0.8) and drag.threshold (4): behavioural values alongside motion and opacity. focus.width now backs every shadow.focus* token (compiled CSS unchanged) and drag.threshold drives KanbanBoard's activation distance — which gives @kinetixui/ui a new runtime dependency on @kinetixui/tokens. Read more →
  • NewRTL support: KinetixDirectionProvider — A thin wrapper over @radix-ui/react-direction, plus logical-property CSS in InputGroup, Select, NativeSelect, Dialog, Sheet, Drawer, DropdownMenu, Alert and AppBar. Radix portals default to ltr regardless of the page's dir, so converting classes alone left every portaled component mispositioned under dir="rtl"; wrap your app in the provider to fix that. Read more →

Internationalisation

Known limitations

  • RTL is slice 1: most components are not yet converted. scripts/check-rtl.mjs tracks the rest and fails CI if a converted file regresses or a new component ships with physical-direction classes.
  • Only two interaction tokens are wired to a component so far (focus.width and drag.threshold).
Breaking changes None.

Tag on GitHub

0.12.0

Minor

Twelve advanced components, the largest component release so far.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • NewTwelve new components — Grouped below. Where Radix has no primitive the widget is hand-built: ColorPicker's 2D square, TreeView, and KanbanBoard's drag and drop (on @dnd-kit).

Data & developer tools

Productivity

Communication

Selection & input

Navigation & guidance

Known limitations

  • All twelve are currently marked beta. Platform badges show today's coverage: KanbanBoard and Tour are React-only by design.
Breaking changes None.

Tag on GitHub

0.11.0

Minor

ComparisonSlider, Marquee and PageHeader.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • NewComparisonSlider — A drag handle wiping between two stacked layers (before/after image, a redesign preview), built on Radix Slider for the drag, keyboard and ARIA behaviour.
  • NewMarquee — An auto-scrolling horizontal ticker that pauses on hover and respects prefers-reduced-motion.
  • NewPageHeader — Title, optional breadcrumb, description, action cluster and optional tabs row, closed off with a bottom border.

Layout & display

Breaking changes None.

Tag on GitHub

0.10.0

Minor

Banner, DescriptionList, SegmentedControl and Timeline.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • NewBanner — A full-bleed, page-level notice (info / promo / maintenance), optionally dismissible with an action. Distinct from Alert (in-flow, static).
  • NewDescriptionList — <dl> term / detail rows in the site's spec-sheet skin.
  • NewSegmentedControl — An iOS-style single-select strip — a documented preset over ToggleGroup type="single".
  • NewTimeline — Ordered events down a rail; alternating lays content either side of a centred rail.

Layout & display

Breaking changes None.

Tag on GitHub

0.9.0

Minor

ButtonGroup and NativeSelect.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • NewButtonGroup and NativeSelect — ButtonGroup / ButtonGroupSeparator / ButtonGroupText, and NativeSelect / NativeSelectOption / NativeSelectOptGroup — closing gaps flagged in an audit against shadcn/ui's component matrix. NativeSelect is React-only by design (KinetixSelect already wraps each platform's own native picker).

Actions & input

Breaking changes None.

Tag on GitHub

0.8.0

Minor

Empty and Kbd.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • NewEmpty — A composable placeholder for zero-result states (empty table, empty search, fresh workspace).
  • NewKbd and KbdGroup — A single keyboard key glyph, plus a wrapper for shortcut combos. Ships on all four platforms.

Feedback & display

Breaking changes None.

Tag on GitHub

0.7.0

Minor

Motion, opacity and z-index tokens; asChild on Badge and Tag.

  • Packages
  • UI changed
  • Tokens changed
  • CLI unchanged
  • NewMotion, opacity and z-index tokens — Three new DTCG primitives — duration / easing, opacity and z-index — grounded in the values already hard-coded across the component library (duration-200/300/500/1000, ease-linear / ease-in-out, the opacity-0/50/70/100 usages, the z-10…z-50 layers). Read more →
  • ImprovedBadge and Tag support asChild — Both can render as a single wrapped element (<Badge asChild><a href="/new">New</a></Badge>) instead of always forcing a <div> / <span>.
Breaking changes None.

Tag on GitHub

0.6.5

Patch

CLI reports its real version. Fixed

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed

0.6.4

Patch

React 19 toolchain and dependency upgrade.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • ImprovedUpgrade to React 19 and current Radix, recharts, react-day-picker, @tanstack/react-table, react-resizable-panels and zod — The peer range is still react >=18.
Breaking changes
  • Public props are unchanged, but Calendar, Chart, DataTable and ResizablePanel* were ported to react-day-picker v10, recharts v3, @tanstack/react-table v9 and react-resizable-panels v4. Anything that reaches past them into the underlying library's DOM, class names or data attributes (e.g. .day-range-start, data-panel-group-direction) may change.
Migration

If you style or query Calendar, Chart, DataTable or the Resizable components by the underlying library's class names or data attributes, re-check those selectors against the new libraries' output. Nothing changes if you only use the components' own props.

Tag on GitHub

0.6.3

Patch

Release plumbing: npm trusted publishing. Improved

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed

0.6.2

Patch

Release plumbing: provenance-preserving publish. Fixed

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed

0.6.1

Patch

Publishes carry npm provenance.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed
  • Securitynpm provenance attestation on every publish — You can verify each package was built from this repository by the release workflow.
Breaking changes None.

Tag on GitHub

0.6.0

Minor

New AppBar component — a web application top bar.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged
  • AppBar — AppBar + AppBarBrand / AppBarNav / AppBarLink / AppBarActions (and a useAppBar hook): a sticky bordered header with a brand slot, a row of primary nav links (active marks the current one, asChild forwards to a framework <Link>), and a trailing actions slot. Below the md breakpoint the nav collapses behind a menu toggle. NavigationBar stays the mobile back-button bar; AppBar is the desktop app shell. Ported to SwiftUI, Jetpack Compose and Flutter (native ports keep the nav visible and horizontally scrollable instead of a menu toggle).

Tag on GitHub

0.5.1

Patch

Security hardening for the CLI and the chart style injection.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI changed

0.5.0

Minor

Action-blue primary set per theme; component gallery and infographic overhaul.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed
  • New azure token ramp — --primary is a real action blue — The Figma navy read as near-black once pushed for contrast, so --primary / --ring / --accent-foreground now resolve to a dedicated 15-step azure ramp: #1d4ed8 on light, #60a5fa on dark, each chosen to clear WCAG AA on its own surface. Light and dark are two independent palettes. --secondary deepened to green.200 so a secondary control reads against the page.
  • Components gallery — every card previews its component — Portal components (dialog, sheet, menus, popover…) and near-empty ones (table, chart, image…) get a purpose-built static mock instead of a lone trigger button. Cards gain a hover lift, an accent edge, and a loading skeleton on navigation.
  • Infographic trimmed to the visual modules — Dropped the prose-heavy sections; the world map is now interactive — hover or focus a platform node to trace its link back to the token contract.
  • /colors — azure ramp listed first — Ramp notes corrected: blue is the navy surface family, azure backs the interactive tokens.

Tag on GitHub

0.4.3

Patch

Data-visualisation expansion.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed

0.4.2

Patch

Chart and focus-ring accessibility.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed

0.4.1

Patch

Destructive colour to WCAG AA; repository move.

  • Packages
  • UI changed
  • Tokens changed
  • CLI changed

0.4.0

Minor

Four-platform component parity.

  • Packages
  • UI unchanged
  • Tokens changed
  • CLI unchanged
  • SwiftUI and Flutter libraries — packages/ui-swiftui and packages/ui-flutter join Jetpack Compose — each a 1:1 port of ~68 components on the same token contract, CI-verified per platform. Standing non-ports: Form, NavigationMenu, Combobox.
  • Type scale wired on all four platforms — KinetixType.swift / KinetixType.kt / app_text.dart are generated from the typography composites and consumed by the native components.
  • The four-platform rule — A new /docs/contributing page: a component or block isn't done until it ships on all four platforms (or is a documented non-port).

Tag on GitHub

0.3.1

Patch

One shared version line.

  • Packages
  • UI changed
  • Tokens unchanged
  • CLI unchanged

0.3.0

Minor

CLI list + add --all; Jetpack Compose library.

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed
  • CLI list + add --all — npx @kinetixui/cli list prints every component in the registry; add --all installs all of them at once. Backed by a new registry index manifest (apps/web/public/r/registry.json).
  • Jetpack Compose library — packages/ui-compose — native Kinetix* composables on the token contract, one per React component, compiled in CI on every push.

Tag on GitHub

0.2.0

Minor

Rebrand to KinetixUI.

  • Packages
  • UI unchanged
  • Tokens unchanged
  • CLI changed
  • Strata → KinetixUI — New scope @kinetixui/*, new home kinetixui.com.
  • Input and Textarea — Generated 1:1 from the design source.
  • kinetixui.com — The Next.js App Router site, built on @kinetixui/ui.

Tag on GitHub

0.1.0

Initial

First public release.

  • Packages
  • UI changed
  • Tokens changed
  • CLI unchanged
  • @kinetixui/tokens — The token contract — CSS variables (light + dark), --shadow-* / --text-* composites, a typed tokens object, and native text styles.
  • @kinetixui/ui — React components on the token contract (CVA + Radix + Tailwind) plus the Tailwind preset. Also installable through the shadcn registry at kinetixui.com/r/*.json.
  • @kinetixui/cli — A first-party install tool — kinetixui init sets up kinetixui.json, @kinetixui/cli add <name> resolves registry dependencies and writes the source into your tree.
  • Token engine + portable registry — DTCG source compiled to web / iOS / Android / Flutter; every component serialised to a shadcn-compatible descriptor. Button generated 1:1 from the design source.

Tag on GitHub

Full commit-level history: @kinetixui/ui · @kinetixui/tokens · @kinetixui/cli

The SwiftUI, Compose and Flutter libraries are not versioned with the npm packages; the platform badges show today's coverage from the same data as /components.