Skip to main content

The State of React: October 2026

· 15 min read
Alex Smith
Software Engineer
The State of React, October 2026, drawn as a synthwave radio-show cover: a glowing cyan React atom orbits a striped setting sun, equalizer bars rise along a pink horizon over a neon grid floor, THE STATE OF sits in gold above REACT in cyan and white, LIVE SET reads in the top left corner, EP. 003 in the top right, and a caption along the bottom reads October 2026, React component libraries, compared

Two kinds of change landed in the table this month. Some of it shipped, mostly from Mantine and from bestax. More of it is me fixing cells the September edition had wrong, and this time the table marks those apart.

Snapshot: October 2026

This edition reflects each library as of October 13, 2026 and covers everything since the August and September edition. The full matrix lives on its own comparison page, and the latest edition of The State of React always has the freshest data.

If you haven't read one of these before, The State of React is a dated, side-by-side look at the mainstream React component libraries, capability by capability, with every cell linking to that library's own docs. I maintain bestax, a React component library for Bulma v1, so I've got a horse in this race. That's why every cell links out: you shouldn't have to take my word for any of it.

In the ring: bestax (Bulma v1), react-bulma-components (the other Bulma wrapper), Mantine, MUI, Chakra UI, shadcn/ui, and React-Bootstrap.

What Shipped Since September​

Mantine​

Mantine shipped the most again, nearly all of it in one release.

  • 9.7.0 (October 5) added four components:
    • Toggle, a button that stays pressed.
    • Toolbar, a row of controls you move through with the arrow keys, with toggle groups and dividers inside.
    • Tour, a step-by-step onboarding walkthrough that spotlights each part of the page.
    • JsonViewer, a collapsible JSON tree in @mantine/code-highlight.
  • The same release has some opt-in extras: image upload in RichTextEditor, resizable AppShell sections, a light variant for Checkbox and Radio, and notifications.promise(), which shows a loading notification and updates it when the promise settles.
  • Two defaults changed, so they're worth a look before you upgrade. Tooltip now hides when its target leaves the page or scrolls out of view (hideDetached={false} brings the old behavior back, and Jest or Vitest needs env="test" on MantineProvider). HoverCard now opens on keyboard focus and closes on Escape, and it no longer opens on a tap.
  • 9.7.1 (October 6) and 9.7.2 (October 11) are fixes.

MUI​

Another polish stretch for Material UI, and steady work on MUI X.

  • Material UI v9.5 (October 9): Autocomplete can work with options that carry a plain value, like an ID, through a new opt-in getOptionValue prop. The package now ships its own docs as Markdown, and the site has a new accessibility conformance report with a table of known gaps. It calls itself a self-assessed draft that covers part of the library so far.
  • v10.0.0-alpha.0 (October 12) is out on npm's next tag. Its one breaking change so far is a higher default elevation on the Autocomplete popup, and I haven't seen a date for a stable v10.
  • MUI X: the September edition missed v9.14 from September 17, whose Scheduler time grid now opens at 7 AM unless you set initialScrollTime. v9.15 (October 6) added an opt-in height prop that sizes the Data Grid without a wrapper, an onCancel callback on the pickers, and Home, End, and Page Up/Down keys in Charts, whose keyboard navigation is on by default. The Scheduler is still in beta, and Chat is still in alpha.

Chakra UI​

No release this stretch. 3.37.0 from August 28, the one that added DateInput, is still the latest. A patch is waiting in an open release PR, with bug and accessibility fixes and a better v2-to-v3 codemod, but no new components.

On v4, a maintainer said on October 1 there's no date yet, guessing "later this year or early next year." It waits on a stable v6 of Ark UI, the headless library underneath Chakra, and Ark's v6 prereleases have only just started.

shadcn/ui​

No new components, and no changelog entries since the cn package in September. The CLI got four patch releases, 4.21.1 through 4.21.4 (October 1 to 7). The first one moved the engine behind the CLI into its own package, @shadcn/registry, which other tools can now depend on. Nothing changes if you just use the CLI.

React-Bootstrap​

Still quiet. The latest stable release is 2.10.10 from May 2025, and the newest v3 beta, beta.5, is from September 2025. The last commit to the main branch is still this April's.

A small correction to the September edition here: it said v3 had been in beta since September 2025. The first v3 beta came out in May 2025. September 2025 is when the latest one did.

react-bulma-components​

No change. The last release is still 4.1.0 from February 2022, built for Bulma 0.9, and the last commit is still from January 2024.

bestax​

This is the one I work on. The September edition listed five gaps in my own column: a popover, a hover card, an accordion, a date range picker, and a data grid. Four of those shipped.

  • @allxsmith/bestax-bulma went from 5.16 to 5.31, with seven new components:
  • Three things the library had inside are exported for your own overlays: Portal, useFocusTrap, and ClientOnly. ConfigProvider can also set where portaled content goes.
  • Bulma's gap, position, overflow, radius, and aspect-ratio helpers are props on every component now.
  • The docs have recipes for a split button, a password reveal, and a copy button, and the table counts them as ◐.
  • A lot of fit and finish, most of it accessibility:
    • Tabs follow the WAI-ARIA keyboard pattern, Tooltip can be hovered, dismissed with Escape, and opened with a tap, and Dropdown has typeahead.
    • A batch of ARIA structure fixes in Rate, Icon, Autocomplete, Dropdown, and the time wheels.
    • Pagination can render its own page links from total, current, and onPageChange.
  • One fix I should own: until 5.27.1, an app that imported only Button still bundled nearly the whole library. The ESM build now ships one file per module, so a bundler drops what you don't import.
  • The tools kept going too:
    • bestax-mcp is listed in the official MCP Registry as of October 3, and it now releases with every bestax-bulma release, so its index keeps up.
    • bestax-migrate kept growing for apps written in plain Bulma class markup. Grids, menus, pagination, panels, tabs, images, the parts inside a modal, a file input inside a field, and the new helper classes all convert now.
    • The ESLint plugin checks the new gap props. Its opt-in rule for raw Bulma markup, which landed the same day as the last edition, flags markup a bestax component could replace, so it doesn't creep back in after a migration.

What the September Table Got Wrong​

Right after the September edition went out, I audited every column against each library's current docs, and the table had a lot wrong: 130 cells. Most of it ran one way. A library that offered something through a prop, a mode, or a docs example often got a dash instead of ◐, so 114 of those fixes went up. Releases have since overtaken two of them, both in my own column (Toggle button by ToggleButton, Accordion by Collapses), so the table below shows 128 as corrections.

How does a table get 130 cells wrong? I never wrote down what earns a mark, so I applied it differently from one column to the next. The rules are on the comparison page now. The gist, library by library:

  • shadcn/ui moved the most. A lot of what it does comes from composing its own pieces, and the September table mostly counted only dedicated components. It also had DatePicker and DataTable as dedicated, and they're compositions.
  • Chakra UI had exports I'd missed, like Toggle, FocusTrap, Sticky, and Em, plus the ◐ cells its docs examples earn.
  • MUI's month and year calendars are dedicated components, while its Transfer List is a docs demo and its focus trap is only documented as part of Modal.
  • Mantine's range picker is a mode of DatePickerInput, Grid.Col counts as a grid cell, and a plain grid isn't an image gallery.
  • React-Bootstrap's ThemeProvider sets class prefixes rather than a theme, and its textarea, color, and file inputs are modes of Form.Control.
  • react-bulma-components has no Delete export but does have a Loader.
  • bestax, my own column, was undersold too. Taginput is a pills input, DateInput's inline mode is a calendar, and the flex, visibility, and overlay helpers count for Flex, Center, Visually hidden, and Backdrop.

The first fix has the full list, and a second pass settled the cells I wasn't sure about.

One row got a new name, too. Box (polymorphic primitive) is now Styling primitive (unstyled, any tag). Bulma's Box is a padded, shadowed surface, so bestax's Box sits on the Paper row, and a row called Box with a dash under bestax read like a mistake. It's a rename, and no marks moved with it, so it isn't in the table below.

The audit and its second pass also added thirteen rows for capabilities the matrix had no place for. Those are matrix additions, not things that shipped this month.

What Changed in the Table​

The table below shows only the rows that moved since September. Highlighted cells changed because something shipped: Mantine's Toggle, and fifteen cells in bestax's column. A dashed cell is a correction from the section above. Rows marked new are the matrix additions: a toolbar, selectable cards, an event calendar, links, a context menu, a menubar, color swatches, a marquee, floating panels, an anchored positioning primitive, chat, a locale or direction provider, and a skip link. Two of them do carry something from this month: Mantine's Toolbar and bestax's ContextMenu.

Hover any cell for the component name, or click it to open that component's docs.

What changed from September 26, 2026 to October 13, 2026Every other row held steady. Compare the full matrix.
✓ Dedicated component◐ Via prop / composition– NoneHighlighted cells changed (before → after). Dashed ones are corrections: the last edition had them wrong. The rest of each row is shown for context.
Capabilitybestaxr-bulmaMantineMUIChakrashadcnR-Bootstrap
Buttons & actions
Toolbarnew
Close / delete button
Copy buttonnonenonenone
File-trigger buttonnonenone
Toggle button
Segmented / toggle group
Split buttonnone
Floating action buttonnonenonenonenonenone
Action bar (bulk actions)nonenonenonenone
Inputs & form controls
Textarea
Number input (steppers)nonenonenone
Password inputnonenonenone
Checkbox groupnonenone
Radio
Selectable card (checkbox / radio)newnonenonenone
Multi-select
Combobox (headless)nonenonenone
Pills input (multi-value)nonenone
Color inputnonenonenonenone
File input
Fieldsetnonenone
Field (label+control+error)
Floating labelnonenonenone
Date & time
Date inputnonenone
Date picker (popover)nonenone
Date range pickernonenone
Date-time pickernonenone
Time input / pickernonenone
Calendar (inline)nonenone
Month pickernonenonenone
Year pickernonenonenone
Event calendar / schedulernewnonenonenonenonenone
Navigation
Navbar / app barnone
App shell (layout frame)nonenonenonenone
Link / anchornewnone
Menu (vertical nav)
Context menu (right-click)newnonenone
Menubar (desktop app menu)newnonenonenonenone
Bottom navigationnonenonenone
Burger / hamburgernone
Command palette / spotlightnonenonenonenone
Layout & grid
Grid cellnone
Stack (vertical)none
Group (horizontal)none
Flexnonenone
Centernonenonenone
Spacernonenonenone
Aspect rationone
Affix (sticky)nonenonenone
Level (space-between bar)nonenone
Media objectnonenonenone
Data display
Avatar groupnonenone
Badge (corner indicator)nonenone
Chip (deletable / interactive)none
Data grid (sort/filter/page)nonenonenonenone
Description / data listnonenonenonenone
List (styled)
Tree viewnonenonenone
Image list / gallerynonenoneMantine SimpleGrid: was via prop or composition, now no equivalent (a correction: the last edition had it wrong)nonenonenone
Lightbox (media viewer)nonenonenonenonenone
Background imagenonenonenonenone
Figurenonenonenonenone
Theme icon (colored container)nonenonenone
Color swatchnewnonenonenonenonenone
Marquee / tickernewnonenonenonenonenone
Spoiler (clamp / expand)nonenonenone
Typography
Heading / titlenone
Inline codenonenonenone
Blockquotenonenone
Highlight / mark textnonenonenonenone
Inline semantic (em/strong/span)nonenone
Feedback & status
Spinner (standalone)
Loading overlaynonenonenone
Semi-circle progressnonenonenonenonenone
Overlays
Confirm / alert dialognone
Swipeable drawernonenonenonenonenone
Popovernone
Hover cardnonenone
Backdrop / scrimnonenonenonenone
Floating / draggable panelnewnonenonenonenonenone
Anchored positioning primitivenewnonenonenonenonenone
Disclosure
Accordion (grouped)none
Rich input & special
Dropzone (drag-drop upload)nonenonenonenonenone
Rich text editornonenonenonenonenone
Transfer listnonenonenonenone
Chat / conversation UInewnonenonenonenonenone
Utilities & infrastructure
Theme / providernoneReact-Bootstrap ThemeProvider: was dedicated component, now no equivalent (a correction: the last edition had it wrong)
Global config providernonenone
Locale / direction providernewnonenone
CSS reset / baselinenonenonenone
Portalnonenonenone
Focus trapnonenonenone
Click-away listenernonenonenonenonenone
Transition primitivesnonenone
Scroll-reveal (on-scroll)nonenonenonenonenone
Visually hidden (a11y)none
Skip link (a11y)newnonenonenonenonenonenone
No-SSR guardnonenonenone
classNames utilitynoneMantine clsx: was via prop or composition, now no equivalent (a correction: the last edition had it wrong)MUI clsx: was via prop or composition, now no equivalent (a correction: the last edition had it wrong)Chakra UI cx: was via prop or composition, now no equivalent (a correction: the last edition had it wrong)none

The reasons for each correction are in #766 and #843.

What the Matrix Says​

bestax is a superset of react-bulma-components

Within the Bulma world there isn't much of a contest. react-bulma-components covers Bulma core only and hasn't shipped since February 2022. bestax covers everything it does except Bulma's old Tile and an unstyled Element primitive, and adds 55 more rows of the full matrix: date, range, and time inputs, autocomplete, rating, tag input, slider, switch, Carousel, Steps, Avatar, Badge, Toast, Tooltip, Popover, HoverCard, ContextMenu, Skeleton, Sidebar, and Reveal, among others.

A few honest takeaways across the wider field:

  • Mantine still has the widest first-party catalog, and it's still the one moving fastest: a toggle, a toolbar, a guided tour, and a JSON viewer in one release.
  • MUI still owns heavy data and app-frame surfaces through its X packages: Data Grid, Charts, Tree View, and Date Pickers, plus FAB and Speed Dial. This stretch was polish, and v10 has started as an alpha.
  • Chakra UI didn't release this time. It's still the closest peer to bestax's prop-driven styling model, and it still has no dedicated data grid.
  • React-Bootstrap is still the smallest set: a faithful Bootstrap wrapper with no date or time pickers, rating, autocomplete, stepper, or tag input.
  • bestax covers the mainstream set and adds the Bulma layout pieces most libraries leave to composition: Hero, Level, Media, Section, and Panel. The gaps worth knowing about now: no data grid, tree view, command palette, color picker, charts, dropzone, or rich text editor. The order I'm working through them in is public.
shadcn/ui plays by different rules

shadcn/ui looks broad because it's a copy-paste registry, not an npm dependency. Its behavior comes from Base UI, Radix, or React Aria, plus cmdk, TanStack Table, and react-day-picker. You own the code it drops into your project. That's powerful, and it's a different maintenance model from everything else here.

Corrections Welcome​

I compile this by hand from each library's source and docs, and this edition is mostly me fixing my own table. That's the point of doing it in the open. A fix lands on the comparison page first, and the next edition marks it as a correction.

Spot something off?

Please open an issue. Corrections make the next edition better.

One Last Track​

The series is named after A State of Trance, Armin van Buuren's weekly radio show, so each edition ends with what Armin and Gryffin, my two favorite DJs, have been up to.

  • Armin van Buuren closed his Monday residency at UNVRS in Ibiza on October 5 with a five-hour set. The radio show aired episode 1298 on October 8, with a guest mix from Paul Oakenfold, so 1300 is two episodes away. That same day, at a surprise pop-up in Los Angeles, he announced the first two-day A State of Trance festival in the US, in LA on June 11 and 12, 2027. And "Nirvana," his first full collaboration with Funk Tribu, came out October 9.
  • Gryffin is between releases, and ELEMENTS I, the album "World Away" comes from, still doesn't have a date I can find. His Ten Years of Music. One Night. shows hit Brooklyn on October 17 and Los Angeles on October 24, and the run finishes at Red Rocks on November 13, his fifth headline there. "This venue and this place always made sense to save for last," he said.

The cover's back to LIVE SET, since this one's a single month.

See you in the next one.