Skip to main content

A State of React Libs — July 2026

· 3 min read
Alex Smith
Software Engineer
A State of React Libs — July 2026: React component libraries, compared

Picking a React component library is one of the bigger architectural calls in a project, and the honest answer to “which one” depends entirely on what you’re building. We maintain bestax, a component library for Bulma v1, so we spend a lot of time studying the field. This post maps it out fairly and in the open: every user-facing capability across six React libraries, with each cell linking straight to that library’s own documentation so you can check our work.

It’s a point-in-time capture — the first edition of something we plan to refresh regularly. Call it A State of React Libs (with apologies to Armin).

Snapshot — July 2026

The table below reflects each library as of July 27, 2026. Component catalogs move fast; for the newest edition, see the latest A State of React Libs.

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

Read a column top-to-bottom for one library’s catalog; read a row across to see who ships what. ✓ is a dedicated component, ◐ is available via a prop or by composition, and a muted dash means no first-party equivalent. Click any ✓ or ◐ to open that component’s docs.

Data as of July 27, 2026A newer edition may exist — see the latest “A State of React Libs”.
✓ Dedicated component◐ Via prop / composition– NoneEvery ✓/◐ links to that library’s own docs.
CapabilitybestaxMantineMUIChakra UIshadcn/uiReact-Bootstrap
Buttons & actions
ButtonButtonButtonButtonButtonButtonButton
Button groupButtonsButton.GroupButtonGroupGroupButtonGroupButtonGroup
Icon buttonButtonActionIconIconButtonIconButtonButtonnone
Close / delete buttonDeleteCloseButtonIconButtonCloseButtonButtonCloseButton
Copy buttonnoneCopyButtonnoneClipboardnonenone
File-trigger buttonnoneFileButtonnoneFileUploadnonenone
Toggle buttonnoneChipToggleButtonnoneToggleToggleButton
Segmented / toggle groupnoneSegmentedControlToggleButtonGroupSegmentGroupToggleGroupToggleButtonGroup
Split buttonnoneMenuButtonGroupMenuDropdownMenuSplitButton
Floating action buttonnonenoneFabnonenonenone
Speed dialnonenoneSpeedDialnonenonenone
Link-styled buttonLinkButtonButtonButtonButtonButtonButton
Inputs & form controls
Text inputInputTextInputTextFieldInputInputForm.Control
TextareaTextAreaTextareaTextFieldTextareaTextareaForm.Control
Number input (steppers)NumberinputNumberInputnoneNumberInputnonenone
Password inputnonePasswordInputnonenonenonenone
CheckboxCheckboxCheckboxCheckboxCheckboxCheckboxForm.Check
Checkbox groupCheckboxesCheckbox.GroupFormGroupCheckbox.Groupnonenone
RadioRadioRadioRadioRadioGroupRadioGroupForm.Check
Radio groupRadiosRadio.GroupRadioGroupRadioGroupRadioGroupnone
SwitchSwitchSwitchSwitchSwitchSwitchForm.Check
SelectSelectSelectSelectSelectSelectForm.Select
Multi-selectSelectMultiSelectSelectSelectnonenone
AutocompleteAutocompleteAutocompleteAutocompleteComboboxComboboxnone
Combobox (headless)noneComboboxnoneComboboxComboboxnone
Tag / token inputTaginputTagsInputAutocompleteComboboxnonenone
Pills input (multi-value)nonePillsInputnonenonenonenone
PIN / OTP inputnonePinInputnonePinInputInputOTPnone
JSON inputnoneJsonInputnonenonenonenone
SliderSliderSliderSliderSliderSliderForm.Range
Range slider (dual thumb)SliderRangeSliderSliderSliderSlidernone
Angle slidernoneAngleSlidernonenonenonenone
RatingRateRatingRatingRatingGroupnonenone
Color inputnoneColorInputnoneColorPickernonenone
Color picker (palette)noneColorPickernoneColorPickernonenone
File inputFileFileInputButton + inputFileUploadnoneForm.Control
FieldsetnoneFieldsetFormControlFieldsetFieldnone
Field (label+control+error)FieldInput.WrapperFormControlFieldFieldForm.Group
Input addons / adornmentsControlInputInputAdornmentInputAddonInputGroupInputGroup
Floating labelnonenoneTextFieldnonenoneFloatingLabel
Date & time
Date inputDateInputDateInputDateFieldnoneDatePickernone
Date picker (popover)DateInputDatePickerInputDatePickernoneDatePickernone
Date range pickernoneDatePickerInputDateRangePickernoneDatePickernone
Date-time pickerDateTimeInputDateTimePickerDateTimePickernonenonenone
Time input / pickerTimeInputTimePickerTimePickernonenonenone
Calendar (inline)noneCalendarDateCalendarnoneCalendarnone
Month pickernoneMonthPickerDatePickernonenonenone
Year pickernoneYearPickerDatePickernonenonenone
Navigation
Navbar / app barNavbarAppShellAppBarnonenoneNavbar
App shell (layout frame)noneAppShellnonenonenonenone
BreadcrumbBreadcrumbBreadcrumbsBreadcrumbsBreadcrumbBreadcrumbBreadcrumb
Menu (vertical nav)MenuNavLinkMenuListnoneSidebarNav
Dropdown menu (actions)DropdownMenuMenuMenuDropdownMenuDropdown
PaginationPaginationPaginationPaginationPaginationPaginationPagination
Stepper / stepsStepsStepperStepperStepsnonenone
TabsTabsTabsTabsTabsTabsTabs
Bottom navigationnonenoneBottomNavigationnonenonenone
Burger / hamburgernoneBurgernonenonenoneNavbar.Toggle
Table of contentsnoneTableOfContentsnonenonenonenone
Command palette / spotlightnoneSpotlightnonenoneCommandnone
Route progress barnoneNavigationProgressnonenonenonenone
Layout & grid
ContainerContainerContainerContainerContainernoneContainer
Grid — flex 12-colColumnsGridGridSimpleGridnoneRow / Col
Grid — CSS gridGridSimpleGridBoxGridnonenone
Grid cellCellSimpleGridGridGridItemnoneCol
Stack (vertical)BlockStackStackStacknoneStack
Group (horizontal)noneGroupStackGroupnoneStack
FlexnoneFlexBoxFlexnonenone
CenternoneCenternoneCenternonenone
SpacerBlockSpacenoneSpacernonenone
Aspect ratioImageAspectRationoneAspectRatioAspectRatioRatio
Scroll area (custom bars)noneScrollAreanonenoneScrollAreanone
Splitter (resizable)noneSplitternonenoneResizablenone
Affix (sticky)noneAffixnonenonenonenone
SectionSectionnonenonenonenonenone
Hero / bannerHerononenonenonenonenone
Level (space-between bar)LevelGroupnoneGroupnonenone
Media objectMedianonenonenonenonenone
Tile (Bulma grid tile)noneSimpleGridGridGridnonenone
FooterFooterAppShellnonenonenonenone
Box (polymorphic primitive)noneBoxBoxBoxnonenone
Paper / elevated surfaceBoxPaperPaperBoxCardCard
Data display
AvatarAvatarAvatarAvatarAvatarAvatarnone
Avatar groupAvatarsAvatar.GroupAvatarGroupAvatar.GroupAvatarnone
Badge (corner indicator)BadgeIndicatorBadgeFloatnonenone
Tag / labelTagBadgeChipTagBadgeBadge
Chip (deletable / interactive)TagChipChipTagnonenone
CardCardCardCardCardCardCard
Table (static)TableTableTableTableTableTable
Data grid (sort/filter/page)nonenoneDataGridnoneDataTablenone
Description / data listnoneDataListnoneDataListnonenone
List (styled)UnorderedListListListListnoneListGroup
Tree viewnoneTreeTreeViewnonenonenone
Tree selectnoneTreeSelectnonenonenonenone
TimelinenoneTimelineTimelineTimelinenonenone
Kbd (keyboard key)noneKbdnoneKbdKbdnone
Number formatternoneNumberFormatternoneFormatNumbernonenone
ImageImageImageImageListImagenoneImage
Image list / gallerynoneSimpleGridImageListnonenonenone
Background imagenoneBackgroundImagenonenonenonenone
FigureFigurenonenonenonenoneFigure
IconIconThemeIconIconIconnonenone
Theme icon (colored container)noneThemeIconnonenonenonenone
CarouselCarouselCarouselnonenoneCarouselCarousel
Chartsnone@mantine/charts@mui/x-chartsnoneChartnone
Spoiler (clamp / expand)noneSpoilernonenonenonenone
Masonry layoutnonenoneMasonrynonenonenone
Typography
Text / bodyParagraphTextTypographyTextTypographynone
Heading / titleTitleTitleTypographyHeadingTypographynone
SubtitleSubTitleTitleTypographyHeadingnonenone
Inline codeCodeCodenoneCodenonenone
Code block (syntax highlight)PreCodeHighlightnoneCodenonenone
BlockquotenoneBlockquotenoneBlockquoteTypographynone
Highlight / mark textnoneHighlightnoneHighlightnonenone
Rich-HTML style wrapperContentTypographyStylesProvidernoneProseTypographynone
DividerDividerDividerDividerSeparatorSeparatornone
Inline semantic (em/strong/span)Emphasis/Strong/SpanTextTypographyTextnonenone
Feedback & status
Alert / message boxNotificationAlertAlertAlertAlertAlert
Toast / snackbarToastNotificationsSnackbarToasterSonnerToast
Progress (linear)ProgressProgressLinearProgressProgressProgressProgressBar
Spinner (standalone)LoadingLoaderCircularProgressSpinnerSpinnerSpinner
Loading overlayLoadingLoadingOverlayBackdropnonenonenone
Ring / circular progressnoneRingProgressCircularProgressProgressCirclenonenone
Semi-circle progressnoneSemiCircleProgressnonenonenonenone
GaugenoneSemiCircleProgressGaugenonenonenone
SkeletonSkeletonSkeletonSkeletonSkeletonSkeletonPlaceholder
Empty statenoneEmptyStatenoneEmptyStateEmptynone
Overlays
ModalModalModalModalDialogDialogModal
Confirm / alert dialogDialogmodalsDialogDialogAlertDialognone
Drawer / off-canvasSidebarDrawerDrawerDrawerDrawerOffcanvas
Swipeable drawernonenoneSwipeableDrawernoneDrawernone
PopovernonePopoverPopoverPopoverPopoverPopover
Hover cardnoneHoverCardnoneHoverCardHoverCardnone
TooltipTooltipTooltipTooltipTooltipTooltipTooltip
Backdrop / scrimnoneOverlayBackdropnonenonenone
Disclosure
Accordion (grouped)noneAccordionAccordionAccordionAccordionAccordion
Collapse (single)CollapseCollapseCollapseCollapsibleCollapsibleCollapse
Panel (heading + body)Panelnonenonenonenonenone
Rich input & special
Dropzone (drag-drop upload)noneDropzonenoneFileUploadnonenone
Rich text editornoneRichTextEditornonenonenonenone
Transfer listnonenoneTransferListnonenonenone
Utilities & infrastructure
Theme / providerThemeMantineProviderThemeProviderChakraProviderThemeProviderThemeProvider
Global config providerConfigProviderMantineProvidernoneChakraProvidernonenone
CSS reset / baselinenonenoneCssBaselinenonenonenone
PortalnonePortalPortalPortalnonenone
Focus trapnoneFocusTrapTrapFocusnonenonenone
Click-away listenernonenoneClickAwayListenernonenonenone
Transition primitivesRevealTransitionFade / Grow / SlidePresencenoneFade
Scroll-reveal (on-scroll)Revealnonenonenonenonenone
Visually hidden (a11y)noneVisuallyHiddenvisuallyHiddenVisuallyHiddennonenone
No-SSR guardnonenoneNoSsrClientOnlynonenone
classNames utilityclassNamesclsxclsxcxcnnone
How this was compiled — method & caveats
  • Rows are capabilities, not raw exports — sub-parts are folded into their parent and internal utilities dropped, so a column approximates each library’s user-facing catalog.
  • ◐ means the capability exists via a prop or by composing primitives, not as a dedicated named component; it is treated as “absent” when judging what a library uniquely ships.
  • Official companion packages count as first-party (Mantine @mantine/*, MUI @mui/lab & @mui/x-*). shadcn/ui is a copy-paste registry powered by Radix, cmdk, TanStack Table, and react-day-picker — not an npm dependency.
  • Matched by purpose, not name (e.g. bestax Badge → Mantine Indicator / MUI Badge). Competitor links are best-effort; a few resolve to a library’s component index rather than an exact page.

What the matrix says​

Where bestax lands

bestax matches the components you reach for every day and adds a Bulma-idiomatic layout kit — Hero, Level, Media, Section, Panel — that most libraries leave to composition, plus a full form suite (date/time pickers, rating, tag input, autocomplete, stepped number input) that React-Bootstrap has no answer for.

A few honest takeaways across the wider field:

  • Mantine has the widest first-party catalog — rich inputs (color, PIN, JSON), plus Spotlight, ScrollArea, HoverCard, and a full app-shell layout system.
  • MUI owns heavy data and app-frame surfaces through its X packages: Data Grid, Charts, Tree View, and Date Pickers, plus FAB, Speed Dial, and Transfer List.
  • Chakra UI is the closest peer to bestax’s prop-driven styling model and is deep on form controls — but ships no date pickers, charts, carousel, or data grid.
  • React-Bootstrap is the smallest set: a faithful Bootstrap wrapper with no date/time pickers, rating, autocomplete, stepper, or tag input.
  • bestax covers the mainstream set and adds Bulma-idiomatic layout — Hero, Level, Media, Section, Panel — that most libraries leave to composition.
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 Radix UI, cmdk, TanStack Table, and react-day-picker. You own the code it drops into your project — powerful, but a different maintenance model than the others here.

Corrections welcome​

We compiled this by hand from each library’s component source and documentation, so it will have edges — a mislabelled cell, a capability we scoped wrong, or a competitor link that’s drifted. It’s meant to be honest, not perfect.

Spot something off?

Please open an issue — corrections make the next edition better.

See you in the next one.