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 seven 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), react-bulma-components (the other Bulma wrapper), 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.
Capabilitybestaxr-bulmaMantineMUIChakra UIshadcn/uiReact-Bootstrap
Buttons & actions
ButtonButtonButtonButtonButtonButtonButton
Button groupButtonsButton.GroupButtonGroupGroupButtonGroupButtonGroup
Icon buttonButtonActionIconIconButtonIconButtonButtonnone
Close / delete buttonDeleteCloseButtonIconButtonCloseButtonButtonCloseButton
Copy buttonnonenoneCopyButtonnoneClipboardnonenone
File-trigger buttonnonenoneFileButtonnoneFileUploadnonenone
Toggle buttonnonenoneChipToggleButtonnoneToggleToggleButton
Segmented / toggle groupnonenoneSegmentedControlToggleButtonGroupSegmentGroupToggleGroupToggleButtonGroup
Split buttonnonenoneMenuButtonGroupMenuDropdownMenuSplitButton
Floating action buttonnonenonenoneFabnonenonenone
Speed dialnonenonenoneSpeedDialnonenonenone
Link-styled buttonLinkButtonButtonButtonButtonButtonButton
Inputs & form controls
Text inputInputTextInputTextFieldInputInputForm.Control
TextareaTextAreaTextareaTextFieldTextareaTextareaForm.Control
Number input (steppers)NumberinputnoneNumberInputnoneNumberInputnonenone
Password inputnonenonePasswordInputnonenonenonenone
CheckboxCheckboxCheckboxCheckboxCheckboxCheckboxForm.Check
Checkbox groupCheckboxesnoneCheckbox.GroupFormGroupCheckbox.Groupnonenone
RadioRadioRadioRadioRadioGroupRadioGroupForm.Check
Radio groupRadiosnoneRadio.GroupRadioGroupRadioGroupRadioGroupnone
SwitchSwitchnoneSwitchSwitchSwitchSwitchForm.Check
SelectSelectSelectSelectSelectSelectForm.Select
Multi-selectSelectnoneMultiSelectSelectSelectnonenone
AutocompleteAutocompletenoneAutocompleteAutocompleteComboboxComboboxnone
Combobox (headless)nonenoneComboboxnoneComboboxComboboxnone
Tag / token inputTaginputnoneTagsInputAutocompleteComboboxnonenone
Pills input (multi-value)nonenonePillsInputnonenonenonenone
PIN / OTP inputnonenonePinInputnonePinInputInputOTPnone
JSON inputnonenoneJsonInputnonenonenonenone
SliderSlidernoneSliderSliderSliderSliderForm.Range
Range slider (dual thumb)SlidernoneRangeSliderSliderSliderSlidernone
Angle slidernonenoneAngleSlidernonenonenonenone
RatingRatenoneRatingRatingRatingGroupnonenone
Color inputnonenoneColorInputnoneColorPickernonenone
Color picker (palette)nonenoneColorPickernoneColorPickernonenone
File inputFileFileInputButton + inputFileUploadnoneForm.Control
FieldsetnonenoneFieldsetFormControlFieldsetFieldnone
Field (label+control+error)FieldInput.WrapperFormControlFieldFieldForm.Group
Input addons / adornmentsControlInputInputAdornmentInputAddonInputGroupInputGroup
Floating labelnonenonenoneTextFieldnonenoneFloatingLabel
Date & time
Date inputDateInputnoneDateInputDateFieldnoneDatePickernone
Date picker (popover)DateInputnoneDatePickerInputDatePickernoneDatePickernone
Date range pickernonenoneDatePickerInputDateRangePickernoneDatePickernone
Date-time pickerDateTimeInputnoneDateTimePickerDateTimePickernonenonenone
Time input / pickerTimeInputnoneTimePickerTimePickernonenonenone
Calendar (inline)nonenoneCalendarDateCalendarnoneCalendarnone
Month pickernonenoneMonthPickerDatePickernonenonenone
Year pickernonenoneYearPickerDatePickernonenonenone
Navigation
Navbar / app barNavbarAppShellAppBarnonenoneNavbar
App shell (layout frame)nonenoneAppShellnonenonenonenone
BreadcrumbBreadcrumbBreadcrumbsBreadcrumbsBreadcrumbBreadcrumbBreadcrumb
Menu (vertical nav)MenuNavLinkMenuListnoneSidebarNav
Dropdown menu (actions)DropdownMenuMenuMenuDropdownMenuDropdown
PaginationPaginationPaginationPaginationPaginationPaginationPagination
Stepper / stepsStepsnoneStepperStepperStepsnonenone
TabsTabsTabsTabsTabsTabsTabs
Bottom navigationnonenonenoneBottomNavigationnonenonenone
Burger / hamburgernoneBurgernonenonenoneNavbar.Toggle
Table of contentsnonenoneTableOfContentsnonenonenonenone
Command palette / spotlightnonenoneSpotlightnonenoneCommandnone
Route progress barnonenoneNavigationProgressnonenonenonenone
Layout & grid
ContainerContainerContainerContainerContainernoneContainer
Grid — flex 12-colColumnsGridGridSimpleGridnoneRow / Col
Grid — CSS gridGridnoneSimpleGridBoxGridnonenone
Grid cellCellSimpleGridGridGridItemnoneCol
Stack (vertical)BlocknoneStackStackStacknoneStack
Group (horizontal)nonenoneGroupStackGroupnoneStack
FlexnonenoneFlexBoxFlexnonenone
CenternonenoneCenternoneCenternonenone
SpacerBlocknoneSpacenoneSpacernonenone
Aspect ratioImagenoneAspectRationoneAspectRatioAspectRatioRatio
Scroll area (custom bars)nonenoneScrollAreanonenoneScrollAreanone
Splitter (resizable)nonenoneSplitternonenoneResizablenone
Affix (sticky)nonenoneAffixnonenonenonenone
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
AvatarAvatarnoneAvatarAvatarAvatarAvatarnone
Avatar groupAvatarsnoneAvatar.GroupAvatarGroupAvatar.GroupAvatarnone
Badge (corner indicator)BadgenoneIndicatorBadgeFloatnonenone
Tag / labelTagBadgeChipTagBadgeBadge
Chip (deletable / interactive)TagChipChipTagnonenone
CardCardCardCardCardCardCard
Table (static)TableTableTableTableTableTable
Data grid (sort/filter/page)nonenonenoneDataGridnoneDataTablenone
Description / data listnonenoneDataListnoneDataListnonenone
List (styled)UnorderedListListListListnoneListGroup
Tree viewnonenoneTreeTreeViewnonenonenone
Tree selectnonenoneTreeSelectnonenonenonenone
TimelinenonenoneTimelineTimelineTimelinenonenone
Kbd (keyboard key)nonenoneKbdnoneKbdKbdnone
Number formatternonenoneNumberFormatternoneFormatNumbernonenone
ImageImageImageImageListImagenoneImage
Image list / gallerynonenoneSimpleGridImageListnonenonenone
Background imagenonenoneBackgroundImagenonenonenonenone
FigureFigurenonenonenonenonenoneFigure
IconIconThemeIconIconIconnonenone
Theme icon (colored container)nonenoneThemeIconnonenonenonenone
CarouselCarouselnoneCarouselnonenoneCarouselCarousel
Chartsnonenone@mantine/charts@mui/x-chartsnoneChartnone
Spoiler (clamp / expand)nonenoneSpoilernonenonenonenone
Masonry layoutnonenonenoneMasonrynonenonenone
Typography
Text / bodyParagraphTextTypographyTextTypographynone
Heading / titleTitleTitleTypographyHeadingTypographynone
SubtitleSubTitleTitleTypographyHeadingnonenone
Inline codeCodenoneCodenoneCodenonenone
Code block (syntax highlight)PrenoneCodeHighlightnoneCodenonenone
BlockquotenonenoneBlockquotenoneBlockquoteTypographynone
Highlight / mark textnonenoneHighlightnoneHighlightnonenone
Rich-HTML style wrapperContentTypographyStylesProvidernoneProseTypographynone
DividerDividernoneDividerDividerSeparatorSeparatornone
Inline semantic (em/strong/span)Emphasis/Strong/SpannoneTextTypographyTextnonenone
Feedback & status
Alert / message boxNotificationAlertAlertAlertAlertAlert
Toast / snackbarToastnoneNotificationsSnackbarToasterSonnerToast
Progress (linear)ProgressProgressLinearProgressProgressProgressProgressBar
Spinner (standalone)LoadingnoneLoaderCircularProgressSpinnerSpinnerSpinner
Loading overlayLoadingnoneLoadingOverlayBackdropnonenonenone
Ring / circular progressnonenoneRingProgressCircularProgressProgressCirclenonenone
Semi-circle progressnonenoneSemiCircleProgressnonenonenonenone
GaugenonenoneSemiCircleProgressGaugenonenonenone
SkeletonSkeletonnoneSkeletonSkeletonSkeletonSkeletonPlaceholder
Empty statenonenoneEmptyStatenoneEmptyStateEmptynone
Overlays
ModalModalModalModalDialogDialogModal
Confirm / alert dialogDialognonemodalsDialogDialogAlertDialognone
Drawer / off-canvasSidebarnoneDrawerDrawerDrawerDrawerOffcanvas
Swipeable drawernonenonenoneSwipeableDrawernoneDrawernone
PopovernonenonePopoverPopoverPopoverPopoverPopover
Hover cardnonenoneHoverCardnoneHoverCardHoverCardnone
TooltipTooltipnoneTooltipTooltipTooltipTooltipTooltip
Backdrop / scrimnonenoneOverlayBackdropnonenonenone
Disclosure
Accordion (grouped)nonenoneAccordionAccordionAccordionAccordionAccordion
Collapse (single)CollapsenoneCollapseCollapseCollapsibleCollapsibleCollapse
Panel (heading + body)Panelnonenonenonenonenone
Rich input & special
Dropzone (drag-drop upload)nonenoneDropzonenoneFileUploadnonenone
Rich text editornonenoneRichTextEditornonenonenonenone
Transfer listnonenonenoneTransferListnonenonenone
Utilities & infrastructure
Theme / providerThemenoneMantineProviderThemeProviderChakraProviderThemeProviderThemeProvider
Global config providerConfigProvidernoneMantineProvidernoneChakraProvidernonenone
CSS reset / baselinenonenonenoneCssBaselinenonenonenone
PortalnonenonePortalPortalPortalnonenone
Focus trapnonenoneFocusTrapTrapFocusnonenonenone
Click-away listenernonenonenoneClickAwayListenernonenonenone
Transition primitivesRevealnoneTransitionFade / Grow / SlidePresencenoneFade
Scroll-reveal (on-scroll)Revealnonenonenonenonenonenone
Visually hidden (a11y)nonenoneVisuallyHiddenvisuallyHiddenVisuallyHiddennonenone
No-SSR guardnonenonenoneNoSsrClientOnlynonenone
classNames utilityclassNamesnoneclsxclsxcxcnnone
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​

bestax is a superset of react-bulma-components

Within the Bulma world there isn’t much contest left. react-bulma-components covers Bulma-core only and has been inactive since ~2021. bestax matches essentially all of it (bar Bulma’s Tile) and adds roughly 50 more components — date/time pickers, autocomplete, rating, tag input, slider, switch, Carousel, Steps, Avatar, Badge, Toast, Tooltip, Skeleton, Sidebar, Dialog, and Reveal.

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.