RoadieRoadie
  • Home
  • Brand
  • Foundations
  • Content
  • Tokens
  • Components
  • Charts
  • Widgets
  • Appearance
HomeBrandFoundations
Appearance

Home

  • Installation
  • Building with AI
  • Philosophy
  • Vue integration
  • Linting
  • Changelog

Changelog

Docs updated
19 Oct 2026

Every release, newest first. GitHub releases lists each published version.

Status

How settled a component's API is.

Alpha
Can break in a minor release. Pin the version.
Beta
Ready to use. A minor release can still break it.
Stable
Breaks only in a major release.
Deprecated
Being removed. Its page names the replacement.

25 Oct 2026

Updates

1 change.

  • Components 2.17.1

Changes

  • Changed

    Update @tanstack/react-virtual to 3.14.22, which Records uses to window long lists of records.

Full release notes: Updates

24 Oct 2026

Grouped tables, totals, and stacked areas

Insight pages can group and total their tables, chart part of a whole over time, compare events by days out or on the event clock, and set a dashboard's period by dragging across a chart.

  • Components 2.17.0
  • Core 2.12.0
  • Charts 0.3.0
  • Widgets 3.7.1
  • Lint plugin 0.2.0
  • StackedArea

    A chart for part of a whole over time, such as scans by gate, with a share mode, a today marker, and annotations.

  • Grouped tables

    DataTable groups rows by one or more columns, with a total for each group, and RecordTable gains a totals row.

    8,412

  • Range selection

    Drag across a line, bar, or stacked area chart to select dates, or set a dashboard's period from a card.

  • Event comparisons

    Line charts line events up by days out or on the event's own clock, where a night runs to 6am.

  • @oztix/roadie-lint-plugin

    Breaking

    The ESLint plugin is now @oztix/roadie-lint-plugin and runs in oxlint too, with a preset that catches tests that can't fail.

Also in this release

  • New

    Add size (sm, md, lg) to Checkbox, CheckboxGroup, and RadioGroup, and trailing to Checkbox and RadioGroup.Item for a count or value at the end of the row. Checkbox

  • New

    DataCard and Chart take controls: switches for what the card's body shows, such as a chart's Cumulative, Incremental and Percentage modes. DataCard

  • New

    Add groupBy and defaultExpanded to DataTable. DataTable

  • New

    Add totals to RecordTable and useRecords: a row of totals under the headings, over every record the search and filters match. RecordTable

  • New

    Show the total of a number column that comes first in DataTable. DataTable

  • New

    Add selectsPeriod to the line, bar, and stacked-area plots of a dashboard description, so a drag across that card, or Shift with an arrow key and then Enter, sets the dashboard's period. Dashboard design

25 more in Grouped tables, totals, and stacked areas
  • New

    Add xFormat to LineChart and the dashboard line plot, with a daysOut format for comparing events by days to the event. Dashboard

  • New

    Add an eventTime x format to LineChart and the dashboard line plot, for comparing events on their own clock.

  • New

    Add toElasticsearch on @oztix/roadie-core/records/elasticsearch, which turns a records request into Elasticsearch query DSL (query, sort, from, and size) that means the same as matchesRecordQuery. Records model

  • New

    Add mode, today and annotations to StackedArea and the dashboard stacked-area plot.

  • New

    Add onRangeSelect to LineChart, BarChart, and StackedArea, so a drag across dated x, or Shift with an arrow key and then Enter, selects a range. LineChart

  • New

    Add canonical-class, which fails a Tailwind class not in its canonical form, such as p-[16px], and fixes it to its canonical form, such as p-4.

  • New

    Add the testing preset, which catches tests that can't be trusted: roadie/no-css-class-in-jsdom fails a calc(), container query, or breakpoint class in toHaveClass, roadie/no-css-source-in-jsdom fails a test that reads CSS source, roadie/no-layout-fake-in-jsdom fails a faked layout read, such as getBoundingClientRect, or a faked viewport media query, roadie/no-cva-output-assertion fails an assertion on the class string a variants function returns, and roadie/no-fixed-sleep fails a fixed wait, such as setTimeout inside a promise or page.waitForTimeout.

  • New

    Add meta.docs.url to each rule, linking it to its section of the linting guide, so an editor can open the guide from a reported rule ID.

  • Changed

    Update chart time ticks, tooltips, tables and spoken points to the date and time foundations. DateTime

  • Changed

    Update CartContents to stable, so a breaking change to it only comes in a major version. CartContents

  • Changed

    Update the README to lead with oxlint.

  • Fixed

    Fix an open Accordion item growing past its container when it holds wide content, such as a code block, so it no longer pushes a phone page sideways. Accordion

  • Fixed

    RecordTable and RecordGrid in a fill box centre their empty and error states in the space under the header, instead of showing them at the top.

  • Fixed

    Fix a ticked or indeterminate Checkbox that's invalid, which now fills with danger instead of the accent, so the error still shows. Checkbox

  • Fixed

    Fix pressing a later pinned DataTable cell in a linked or grouped row, which now follows the row's link or toggles its group like any other cell. DataTable

  • Fixed

    A List row with long text no longer widens the list past its container on a narrow screen; the title truncates and the trailing slot stays in view. List

  • Fixed

    Fix an is-interactive-within surface taking the hover, press and focus ring of a nested surface's target. Card

  • Fixed

    Fix the rows in a QueryField or Records.Search list jumping as the highlight moves. Query field

  • Fixed

    RadioGroup now dims a disabled group or item and ignores presses on its row, like Checkbox. Radio group

  • Fixed

    RecordTable puts the totals label in the title column, or with no title in the first column without a sum that isn't an image, as DataTable does, so the label no longer covers a summed column's total, and in the title column it no longer hides with a column's priority. DataTable

  • Fixed

    Fix a scrolling ToggleGroup jumping back to its pressed item when it resized while keyboard focus was on another item, which hid the focused item. Toggle group

  • Fixed

    BarChart with onRangeSelect now shades the selected bars whole, from the first bar's left edge to the last bar's right edge, instead of from centre to centre. BarChart

  • Fixed

    Clicking a chart no longer draws a focus ring around it in Chrome.

  • Fixed

    LineChart's today dot now sits on the highlighted series, as the forecast cone does, instead of always on the first series.

  • Fixed

    LineChart and StackedArea keep an annotation label clear of the today label.

Full release notes: Grouped tables, totals, and stacked areas

20 Oct 2026

Editor, records, and date pickers

The first release of Roadie Editor, plus record tables and grids, date pickers, and a dark mode with clearer surfaces and borders.

  • Components 2.16.0
  • Core 2.11.0
  • Charts 0.2.0
  • Editor 0.1.0
  • Widgets 3.7.0
  • Lint plugin 0.1.1
  • Editor

    A rich-text field that saves JSON, never HTML, with a renderer that runs on a server, in the new @oztix/roadie-editor.

  • Records model

    Search, filter, sort, and page through records in a table or a grid, with saved views.

    MelbourneThis weekend
  • Date pickers

    Calendar, DateField, TimeField, DatePicker, and DateRangePicker, with typed date phrases.

    Fri 27 Nov 2026
  • Dashboard periods

    Dashboards take a period and a comparison, and tables gain sorting, row links, totals, and status columns.

  • Dark mode contrast

    Dark surfaces, borders, text, and chart colours now meet their APCA contrast targets.

  • Toolbar

    A row of buttons, toggles, links, and menus that takes one Tab stop.

  • Calendar

    A month or week grid for choosing a date, several dates, or a range.

  • Link

    A text link that routes through your app’s router and underlines to match its emphasis

    Read theevent FAQ
  • Date field, Time field, and Date picker

    Typed date and time fields built on Calendar and the date phrases in @oztix/roadie-core/datetime.

    Fri 27 Nov 2026
  • Date range picker

    A button showing a date range that opens presets, typed start and end dates, and a range Calendar in a Popover, or below 48rem in a bottom Drawer.

    Last 30 days
  • Kbd

    A keyboard key or shortcut drawn as a keycap.

    ⌘K
  • Pattern

    The Oztix swirl pattern.

  • Query field

    A search field that turns what you type into filter chips.

  • RecordGrid

    Records as a grid of cards to search, filter, sort, and page through.

  • RecordTable

    A table of records to search, filter, sort, and page through, built on the records model in @oztix/roadie-core/records.

  • Sortable

    Drag to reorder built on the browser's native drag and drop.

  • Lint plugin

    The package holds ESLint rules that catch Roadie mistakes in apps.

Also in this release

  • New

    Add brand intents named by hue.

  • New

    Combobox gains chip parts for multiple selection: Combobox.Value, Combobox.Chips, Combobox.Chip, and Combobox.ChipRemove, wrapping Base UI's, and Combobox.ChipLabel, which truncates a long value. Combobox

  • New

    Dashboards gain a period and a comparison.

  • New

    DataTable links rows with getRowHref. DataTable

  • New

    DataTable sorts in the browser with sortable. DataTable

  • New

    DataTable takes a totals row with totals, rendered in a new Table.Foot: strong text over a rule, its label in the first column as a row header. DataTable

79 more in Editor, records, and date pickers
  • New

    listItemVariants gains an interactive variant, true by default. List

  • New

    Logo takes every lockup through variant: normal (the default), mark, wordmark, tagline, and product. Logo

  • New

    Pane publishes --pane-sticky-bottom, the height of its Pane.Footer, so sticky content at the bottom of a pane can clear the footer. Pane

  • New

    Prose makes wide tables reachable and scrollable with the keyboard. Prose

  • New

    Tables take a status column kind.

  • New

    A nested ThemeProvider scopes its accent to its own subtree. Theming

  • New

    @oztix/roadie-core/theme exports DEFAULT_ACCENT_COLOR, so components, widgets, and apps share one default accent.

  • New

    Add each component's status to roadie.manifest.json even when another page documents it, such as CheckboxGroup on the Checkbox page or Records on Records model, and add docs and status to core's records subpaths. Checkbox

  • New

    Add selection utilities, so a set of choices takes its label colours from the system rather than from each component.

  • New

    Add colour variables that name the brand scales by hue, to match the brand intents.

  • New

    Add isUnsafeHref to @oztix/roadie-core/utils.

  • New

    Add link-normal, link-strong, and link-subtle, the text link styles Link uses, animated on hover and focus-visible with the motion tokens. Link

  • New

    Add the .prose class, which typesets raw HTML from a CMS, Markdown, or MDX: headings, paragraphs, lists, tables, code, quotes, rules, figures, and keys.

  • New

    Add date ranges and typed date phrases to @oztix/roadie-core/datetime.

  • New

    Add is-focusable, the focus ring of is-interactive with no pointer cursor, press, or disabled state, for an element that takes focus but isn't clicked, such as a scroll region or a tabIndex={-1} landing target.

  • New

    paletteScores() from @oztix/roadie-core/dataviz measures low-contrast slots with APCA.

  • New

    The portfolio example dashboard has a period, the past 30 days compared with the previous period, so DashboardView shows a period toolbar above it. Dashboard design

  • Changed

    Pressing Enter after typing in an Autocomplete or Combobox now takes the first suggestion, without moving to it with the arrows first. Autocomplete

  • Changed

    useFieldControlError(message) is now public in @oztix/roadie-components/field. Field

  • Changed

    Two components move onto Roadie's motion tokens, and each looks a little different:

  • Changed

    Prose now renders the core .prose class instead of its own list of descendant classes. Prose

  • Changed

    Each package now ships roadie.manifest.json, a machine-readable catalogue for coding agents and tools.

  • Changed

    Select-style triggers now use a visible border instead of the raised look. Select

  • Changed

    Update the Select, Combobox, and Autocomplete popups, the QueryField operator bar, the Popover arrow, and the Tooltip arrow to use --intent-bg-floating, so in dark mode they match the lifted fill of other floating surfaces. Select

  • Changed

    Every focus ring now has the same shape: 4px wide with no gap, from the --focus-ring-width, --focus-ring-opacity, and --focus-ring-opacity-dark tokens.

  • Changed

    Widgets now ship @oztix/roadie-widgets/roadie.manifest.json, with the same shape as the other packages' manifests. CartDrawer

  • Changed

    getContrastColor from @oztix/roadie-core/colors now picks white or black text by APCA instead of the WCAG 2 contrast ratio, following decision 0010. Colors

  • Changed

    Dark mode chart colours now meet APCA Lc 45 against the page, the minimum for non-text UI in decision 0010.

  • Changed

    Dark mode delta text now meets APCA Lc 60 on a data card, the tier decision 0010 sets for delta text. Delta

  • Changed

    Update dark mode so raised and floating surfaces, fields, and neutral borders stand out more, since shadows barely show on a dark page.

  • Changed

    validatePalette now checks every pair of categorical slots for normal vision, not just neighbours, and fails any pair under ΔE 8 as allPairsNormal.

  • Changed

    Shadows and the loading shimmer now tint by the nearest intent, as the Elevation and Skeleton docs describe.

  • Changed

    Update --ts-chart-tooltip-background to --intent-bg-floating, so a tooltip drawn from it matches ChartTooltip and other floating surfaces in dark mode. ChartTooltip

  • Fixed

    Tapping the active tab of a collapsed Navigator bar on its own route now scrolls the page back to the top in browsers with the Navigation API, such as Chrome. Navigator

  • Fixed

    Buttons now follow their parent's alignment. Button

  • Fixed

    CalendarTile no longer puts its month or weekday in capitals, because the writing rule keeps all caps for acronyms. CalendarTile

  • Fixed

    Warn in development when a Card has no Card.Content. Card

  • Fixed

    A Carousel with autoPlay now moves to the next slide once the delay has passed. Carousel

  • Fixed

    An Autocomplete or Combobox input inside a Field keeps the Field.Label as its accessible name while its list is open. Autocomplete

  • Fixed

    Carousel runs on Embla 9.0.0-rc04. Carousel

  • Fixed

    Link components check for unsafe href protocols with isUnsafeHref from @oztix/roadie-core/utils, so they also refuse an unsafe protocol hidden with a tab, line break, or control character.

  • Fixed

    A DataTable whose rows link keeps its title column visible. DataTable

  • Fixed

    A link with download, such as <Button href='/files/lineup.pdf' download>, now renders a plain <a> instead of the provider's Link. Button

  • Fixed

    Large pages in Chromium no longer restyle every element when something small changes, such as opening a menu, ticking a row, hovering a list row, or typing in a search. Navigator

  • Fixed

    Example data uses invented venue, event and promoter names from the contributing guide's vetted list, so no example reads as a real Oztix client.

  • Fixed

    Menu radio and checkbox items keep their shortcuts lined up when one is checked.

  • Fixed

    Dialog's backdrop, Card's image, NumberField, Steps, and Switch time their transitions with Roadie's motion tokens in place of the Tailwind values they matched, so they follow a token change.

  • Fixed

    On a phone, Navigator no longer pulls its panes back while a navigation is pending for someone who prefers reduced motion. Navigator

  • Fixed

    Navigator's pending glow draws its spinning square small and scales it up.

  • Fixed

    Navigator no longer logs React's "Each child in a list should have a unique key" warning when a route's child streams in. Navigator

  • Fixed

    DateTime no longer reads the clock while rendering on the server, so it prerenders under Next's cacheComponents without a Suspense boundary, including as a Suspense fallback. DateTime

  • Fixed

    Pane.Footer has a little more room above its content and casts a soft shadow up over the body. Pane

  • Fixed

    A Pane now remembers its scroll for the history entry you're on, even after a push that keeps the same Navigator value, such as a change to the query alone. Pane

  • Fixed

    Autocomplete and Combobox now list the closest matches first as you type, so the highlighted first option, and Enter, take the likeliest one. Autocomplete

  • Fixed

    Switch renders a native <button>, so a bottom Drawer's swipe no longer swallows a tap on it, and its label's for now points at the switch itself. Switch

  • Fixed

    A horizontal ToggleGroup that runs out of room now scrolls sideways, as Tabs does, instead of squashing its items until the labels overflow. Toggle group

  • Fixed

    Autocomplete and Combobox options can be chosen with a tap on an iPhone. Autocomplete

  • Fixed

    cn() treats ease-spring-lively and every Roadie animate-* utility (animate-fade-in, -scale-in, -pop-in, -shake, -nudge, -pop, and -pop-tap) as one group each, so a later easing or animation class replaces an earlier one instead of both staying.

  • Fixed

    A raised or floating surface inside a field group, such as a toolbar in an editor, keeps its rim light while the field is hovered, focused, or invalid.

  • Fixed

    isUnsafeHref, and so every Roadie link component, now catches unsafe links hidden with a tab, line break, or control character, such as java\tscript: or a leading null character.

  • Fixed

    Requires zod 4.6.7, which fixes a denial-of-service issue in 4.6.5.

  • Fixed

    Date formatting reuses its Intl.DateTimeFormat instances, and formatValue reuses its Intl.NumberFormat instances.

  • Fixed

    text-subtle now meets APCA Lc 75 for body text on every intent, in light and dark mode, on the neutral surfaces and on the intent's own, including its subtle fill.

  • Fixed

    The token manifest lists the color-mix() strong fills that brand-secondary, success, and warning render, in both modes, instead of the plain steps meant only for browsers without color-mix().

  • Fixed

    The token manifest gives the chart ink tokens (--chart-grid, --chart-axis, --chart-label, --chart-value, and --chart-gap) a light value as well as a dark one, and lists --chart-highlight's oklch() value in light mode, with the hex as its fallback.

  • Fixed

    emphasis-overlay and emphasis-overlay-subtle now take a fixed white label, like their fixed dark fill.

  • Fixed

    em, i, and cite inside .prose (and so Prose) now show in Intermission's italic face. Prose

  • Fixed

    The reduced-motion reset now sets animation-delay and transition-delay to 0s on every element and its ::before and ::after, as well as shortening durations.

  • Fixed

    text-subtle on the neutral intent now meets APCA Lc 75 for body text.

  • Fixed

    A chart with no data now shows an EmptyState with an icon: small inside a Chart card and medium on its own. Empty state

  • Fixed

    Keep long category names inside the card on RankedBars, horizontal StackedBars and Funnel. RankedBars

  • Fixed

    Charts run on @tanstack/charts and @tanstack/react-charts 1.1.

  • Fixed

    LineChart's end label for the highlighted series, such as "Forecast 96%" on a pace chart, now uses the subtle text colour instead of --chart-highlight, so it meets body text contrast (APCA Lc 75) in light and dark.

  • Fixed

    The StackedBars examples label September "Sept", the house date format.

  • Fixed

    buildBrowseHref, and so CartDrawer's default "Browse events" target, now returns the collection route with the id in the path, /collection/{collectionId}, instead of /collection/?id={collectionId}. CartDrawer

  • Fixed

    Requires focus-trap 8.2.3, which keeps an input's caret and selection when a trap activates in an iframe.

  • Fixed

    The manifest gives CartDrawer and CartContents their usage code as an example, and describes CartExpiryDialogs. CartDrawer

  • Fixed

    The motion peer range now accepts ^14.0.0 alongside 12 and 13.

  • Fixed

    The class rules now also read tv() from tailwind-variants, and a const that a class attribute or class function names, one level deep, when it holds a string, array, or object.

Full release notes: Editor, records, and date pickers
Previous page← LintingNext pageOverview →