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.

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.

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.

p={6} and _hover={{ bg: "gray.100" }} compile to CSS at runtime through Emotion.createSystem, tokens, recipes) but did not switch to zero-runtime Panda. That work is an open v4 RFC.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.
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 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.
You style in four layers:
chakra.* factory (p={6}, bg="gray.50").chakra.button, as / asChild).defineRecipe with base, variants, compoundVariants).cssVarsRoot, cssVarsPrefix).Recipe examples are tagged "use client". Factory docs still import @emotion/is-prop-valid. That is the runtime leaking through the API.
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 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.
<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 |
| Teams who hate class soup |
Tailwind classes |
| Teams already on Tailwind |
MUI |
| 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.

The docs say the theming system is built around the Panda CSS API. Tutorials that still show v2 extendTheme are stale.
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.

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
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.
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.
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.
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.
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.
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.
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.
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.

Framer Motion is the MIT React animation library, not the Framer canvas. Primitives, layoutId, LazyMotion sizes, and why reducedMotion defaults to never.

Apple has published an official iOS 27 UI kit and iPadOS 27 UI kit for Figma as part of Apple Design Resources. It gives designers a current, accurate set of na

Discover 23 specialist boutique mockup sites for branding design. Real photography, animated OOH, niche specialties, and pricing compared.