Chakra UI: Style Props, Theming, vs shadcn and MUI

Chakra UI is a React component system with style props and tokens. See v3 theming, why Emotion still runs, and when shadcn or MUI is the better 2026 pick.

Updated 9 min read
Chakra UI homepage

Chakra UI is a React component system: accessible, themeable UI whose signature is CSS as props. Segun Adebayo published the repo on 17 August 2019; @chakra-ui/react is at 3.37.0 with 1.8 million weekly downloads. This page is the React library, not yoga.

The 2026 product-UI choice is Chakra, MUI, or shadcn/ui. Chakra still fits teams that want an installed library, design tokens, and no Tailwind.

Chakra UI homepage
Chakra UI homepage screenshot.

Key Takeaways

  • Chakra UI is an installed React component system. You style with props and tokens instead of Tailwind class strings.
  • Style props are the product: p={6} and _hover={{ bg: "gray.100" }} compile to CSS at runtime through Emotion.
  • Version 3 copied Panda CSS theming APIs (createSystem, tokens, recipes) but did not switch to zero-runtime Panda. That work is an open v4 RFC.
  • Pick Chakra when the team has no designer and no Tailwind. Pick shadcn when you want owned source on a greenfield Next app. Pick MUI when you need MUI X data grids.
  • A v2 app does not "upgrade" to v3. The official path is a rewrite with a codemod.

What Is Chakra UI?

You install a component system of themeable, accessible primitives from npm and compose them into product UI. The official pitch is speed plus accessibility. Teams pick Chakra for the styling model.

Segun Adebayo built it as a learn-in-public side project because most apps were not accessible. The three design rules are accessibility, composition, and easy to style. He works as a design engineer in the United Kingdom.

The library is MIT. Revenue is lifetime Pro blocks (330+ blocks; Personal $349, Team $999, currently $299 / $899) plus donations. GitHub shows 40,624 stars on the core repo.

This article covers the React package. A Vue port exists in the same GitHub org.

Chakra sits next to design systems work. Tokens, recipes, and semantic palettes are first-class.

How Chakra UI Works

Version 3, announced 22 October 2024, is a rewrite, not a theme bump. Behavior moved into Ark, styling kept a runtime, and theming copied Panda's API.

Ark UI Owns Behavior

Ark UI is the headless layer: 45+ unstyled components across React, Solid, Vue, and Svelte, powered by Zag state machines. Chakra v3 components wrap Ark and add the visual system.

Segun's goal was to stop maintaining interaction logic inside Chakra.

"The goal of Chakra is I just want to delete all of the logic code in Chakra and never have to maintain any of that again. Chakra should just purely be the UI stuff: take all of the nice goodies from Ark UI and combine that with Chakra and the style prop system and that's it, you're good to go."

Segun Adebayo said that in State machines in Zag.js (Baptiste Devessier, 33:17).

Park UI is the Ark + Panda showcase in the same org. Stay on Chakra if the installed kit already fits.

Style Props, Factory, and Recipes

You style in four layers:

  • Style props on any library component or chakra.* factory (p={6}, bg="gray.50").
  • The Chakra factory (chakra.button, as / asChild).
  • Recipes (defineRecipe with base, variants, compoundVariants).
  • Tokens as CSS variables (cssVarsRoot, cssVarsPrefix).

Recipe examples are tagged "use client". Factory docs still import @emotion/is-prop-valid. That is the runtime leaking through the API.

Emotion Still Runs in v3

Current Chakra serializes styles with Emotion. The install command is npm i @chakra-ui/react @emotion/react. v3 dropped @emotion/styled and framer-motion but kept @emotion/react.

The v3 FAQ is blunt: Chakra v3 does not use Panda internally. The team kept runtime CSS-in-JS to limit the breaking-change surface. PR #10957 is still a draft RFC for a zero-Emotion, build-time v4 experiment, not the default you install today.

2026 blogs claim v3 already dropped Emotion. They are wrong. The install docs and the open RFC are the source of truth.

The homepage line "Works with Next.js RSC" needs an asterisk. The App Router guide still depends on Emotion. Streaming Chakra through Suspense is an optional extra: a "use client" Emotion cache.

Turbopack can mis-hydrate that CSS; the documented workaround is next dev --webpack and next build --webpack. Do not treat Chakra as zero-runtime CSS that streams with RSC.

Style Props: CSS as Component Props

Style props are "css styles as props." That sentence is the whole pitch. You write layout and color on the component instead of a class string or a styled-file.

TypeScript
<Box p={6} bg="gray.50" _hover={{ bg: "gray.100" }}>
  Dashboard
</Box>

Responsive values are mobile-first. Official breakpoints are rem-based: base 0, sm 30rem, md 48rem, lg 62rem, xl 80rem, 2xl 96rem.

Object syntax (fontWeight={{ base: "medium", lg: "bold" }}), array syntax, and hideFrom / hideBelow are all first-party. Chakra is responsive by default. If a thread says responsive styles are not reflecting, that is an implementation bug.

v2 used an sx prop for nested CSS. v3 replaced that with the css prop (nested selectors need &). New code should use v3 object/array props, recipes, or css.

How you author CSS is the real split:

Model

What you write

Who likes it

Chakra style props

p={6} _hover={{ bg: "gray.100" }}

Teams who hate class soup

Tailwind classes

p-6 hover:bg-gray-100

Teams already on Tailwind

MUI sx

sx={{ p: 6, "&:hover": { bgcolor: "grey.100" } }}

Teams already in the MUI theme

Style props are fast to write and readable in review. The tax is CSS-in-JS during render. Official styling performance guidance (19 November 2025): static props are fine, but dynamic values that change every render recompute CSS, so prefer data attributes and recipes for variants.

On r/nextjs, the recurring miss after a job-mandated shadcn switch is layout props like align="center". That is the DX Chakra is selling. It is also why a Tailwind shop should not adopt Chakra just to try style props.

Chakra UI styling docs
Chakra UI styling documentation screenshot.

Theming With createSystem

The docs say the theming system is built around the Panda CSS API. Tutorials that still show v2 extendTheme are stale.

TypeScript
import { createSystem, defaultConfig, defineConfig } from "@chakra-ui/react"

const config = defineConfig({
  theme: {
    tokens: {
      colors: {
        brand: { 500: { value: "#0ea5e9" } },
      },
    },
  },
})

export const system = createSystem(defaultConfig, config)

You pass that system into <ChakraProvider value={system}>. Token values wrap { value }, and references use the full path ({colors.red.300}).

npx @chakra-ui/cli typegen ./theme.ts writes the types. strictTokens turns a typo into a TypeScript error.

Semantic tokens point at primitives and switch on conditions (base / _dark). v3 ships seven semantic ramps: solid, muted, subtle, emphasized, contrast, fg, focusRing. colorPalette="red" swaps the ramp through CSS variables at any depth.

Color mode uses next-themes. The CLI snippet restores useColorMode, useColorModeValue, and ColorModeButton. Hydration mismatch is a documented gotcha, so wrap fallback UI in ClientOnly plus a skeleton.

GitHub discussion #8505 is the practitioner ticket for this API change.

Chakra UI theming docs
Chakra UI theming documentation screenshot.

Chakra UI vs shadcn and MUI

The 2026 choice is a three-way fork. shadcn is a copy-paste registry. MUI is an enterprise widget company. Chakra is an installed kit with style props.

Not a component library. A component distribution system. Pull components from anywhere. Add code that looks like your own. https://t.co/xEyRkvXOOy
shadcn · @shadcnView on X

Guillermo Rauch called shadcn the most popular design system on GitHub in October 2025, ahead of Material UI and Ant Design. That is category weather. Greenfield Next teams still start at shadcn unless they have a reason not to.

July 2026 changed the shadcn default from Radix to Base UI (Radix still supported). Base UI lives in the MUI org, so MUI sits on both sides of this table: the styled Material library and the headless layer under new shadcn projects. Chakra's behavior layer is in-house Ark.

Axis

shadcn/ui

MUI

Chakra UI

What it is

Copy-paste registry

npm library

npm library

Styling

Tailwind + CSS vars

Theme + CSS-in-JS

Style props + tokens

Behavior

Base UI default

In-house + Base UI

Ark UI

Tailwind

Required

No

No

Paid layer

Free

MUI X $299-$1,399/dev/yr

Pro blocks $349 / $999 lifetime

Best for

Greenfield Next

Data-heavy admin

No-Tailwind teams

Chakra still wins when the team refuses Tailwind, wants a11y defaults without assembling primitives, or has no designer in the loop.

"If you have a designer onto the project, go with shadcn/ui. The designer's heart is elusive. If you don't have a designer, Go with chakra or any other UI library with full features."

u/Ryanhatt in r/nextjs (October 2024)

Chakra loses when the app is already on Tailwind, when you need MUI X-class grids, when buyers want owned source in the repo, or when hiring and LLM tooling assume shadcn.

Untitled UI React is the other Tailwind-native kit shape (copy or install, designer-led). Mantine shows up on Reddit as the Chakra-shaped alternative (batteries included, no Tailwind). Neither belongs as a fourth column here.

Benefits of Chakra UI

You Ship Layout Without a Class String

Style props keep spacing, color, and breakpoints on the component. Designers who think in tokens can read a Chakra file without decoding sm:px-4 lg:hover:bg-slate-50. That is the gap versus Tailwind-first kits and most UI design tools handoff.

Accessibility Defaults Come With the Package

Chakra's original brief was accessible React UI. v3 behavior lives in Ark, so focus, keyboard, and disclosure patterns ship without a weekend of Radix assembly. Pair that with a real web accessibility process.

Tokens and Recipes Are the Theme

createSystem plus semantic palettes is closer to a design-system runtime than a bag of components. Charts, Figma tokens, and colorPalette swaps share one variable graph. That is why Chakra still shows up for internal tools and mixed-experience teams.

Challenges and Limitations

v3 Is a Rewrite

Closed components became open compound components, FormControl became Field, and theme config changed shape. There is no supported gradual migrate.

In discussion #9853, Segun Adebayo wrote in August 2026 that a mixed v2 plus v3 install is unsupported and that v2 is in maintenance. The official tool is npx @chakra-ui/codemod upgrade.

"Those guys have changed even prop names, removed numerous components which were barebone to the library like they removed a <FormControl/> and added a <Field/>. Completely destroyed the existing theming to a completely new one."

u/twinbro10 in r/nextjs (October 2024)

Some teams finished the port. Others reverted. If you want React 19, staying on v2 is a dead end, so budget a rewrite.

Runtime CSS Is the Other Tax

Emotion work during render is the cost of style props. On r/nextjs, the recurring complaint is that CSS-in-JS felt "super cool" in 2021 and now feels slow next to build-time CSS.

The official performance guide even points at a separate Panda + Ark stack for zero-runtime. That stack only exists as an alternative because current Chakra still has a runtime.

Search Interest Moved to shadcn

On r/reactjs, "Chakra is dead" was a January 2025 slogan. npm still published 3.37.0 in the days before this article. The library is quieter than shadcn, not abandoned.

RSC Marketing Outruns the Architecture

You can use Chakra in the App Router, but styles still serialize through Emotion on the client. Recipes need "use client". If the requirement is "no CSS-in-JS in the RSC tree," wait for v4 or pick Tailwind.

Frequently Asked Questions

Related Articles