chakra-ui-solid is a component system for building products with speed
Accessible SolidJS components for building high-quality web apps and design systems. Zero runtime CSS
pnpm add chakra-ui-solidSolidJS 2.0 · Panda CSS in your build · ESM only
Design system
Build your design system on top of chakra-ui-solid
Spend less time writing UI code and more time building a great experience for your customers.
Tokens. Streamline design decisions with semantic tokens
Typography. Set your font properties once and use them everywhere
Recipes. Design component variants with ease
import { defineChakraConfig } from "@chakra-ui-solid/panda-preset";
export default defineChakraConfig({
theme: {
extend: {
semanticTokens: {
colors: {
brand: {
value: { base: "{colors.teal.600}", _dark: "{colors.teal.400}" },
},
},
},
},
},
include: ["./src/**/*.{ts,tsx}"],
outdir: "styled-system-app",
});import { Box } from "chakra-ui-solid";
export function Hero() {
return (
<Box as="section" display="flex" flexDirection="column" gap="3">
<Box as="h1" textStyle="5xl" fontFamily="heading" letterSpacing="tighter" color="fg">
Ship the whole design system
</Box>
<Box as="p" textStyle="lg" color="fg.muted">
One scale for every heading, label and caption on the page.
</Box>
</Box>
);
}import { cva } from "@chakra-ui-solid/styled-system/css";
import { Box } from "chakra-ui-solid";
const badge = cva({
base: {
display: "inline-flex",
alignItems: "center",
borderRadius: "l1",
fontWeight: "medium",
px: "3",
py: "1",
},
variants: {
tone: {
subtle: { bg: "colorPalette.subtle", color: "colorPalette.fg" },
solid: { bg: "colorPalette.solid", color: "colorPalette.contrast" },
},
},
defaultVariants: { tone: "subtle" },
});
export function Badge() {
return (
<Box colorPalette="teal" display="flex" gap="2">
<Box class={badge()}>Draft</Box>
<Box class={badge({ tone: "solid" })}>Shipped</Box>
</Box>
);
}Parity
The same API and tokens, without the runtime headache
This is as close to Chakra v3 parity as is achievable without runtime CSS-in-JS — not a 1:1 port, and it does not pretend to be one.
You get
- Chakra v3's component API, part for part
- Its design system, through the official Panda preset
- Its theming config — tokens, semantic tokens, recipes — in panda.config.ts
- Zag.js behavior and the ARIA that comes with it
- Style props, recipes, variants and colour mode
You do not get
- Style values computed while the app runs
- asChild — polymorphism is a render prop, and it takes a function
Works with your favorite SolidJS framework
One guide each, one screen long, because the difference between them is a build setting rather than a provider.
What is not here yet
This library is being built one batch at a time
A component gets its docs page in the same phase it ships, so anything missing from the sidebar has not been written yet rather than gone undocumented.
Charts are excluded outright, and on a dependency ground rather than a styling one: Chakra's chart tier peer-depends on Recharts and React, and there is no Solid charting substrate to bind to.