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-solidRequires SolidJS 2.0 · Panda CSS · 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, compiled into your own stylesheet
This is as close to Chakra v3 parity as is achievable without runtime CSS-in-JS. It isn’t a 1:1 port, and it doesn’t 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 in panda.config.ts: tokens, semantic tokens, recipes
- Zag.js behavior, and the accessibility semantics that come with it
- Style props, recipes, variants and colour mode
You don’t get
- Style values computed while the app runs
- asChild: polymorphism is a render prop, and it takes a function
Whichever owns your server, the build configures itself
Both run on the same Vite plugin, and it works out what our packages need from your dependency tree.
What isn’t here yet
This library ships one batch at a time
A page never appears before the component does, though a component can ship before its page. The sidebar is the reading list, not the inventory.
Charts are the one deliberate gap, and dependencies are the reason rather than styling. Chakra’s chart tier peer-depends on Recharts and React, and Solid has no charting substrate to bind to.