Build faster with Premium Chakra UI Components 💎

Learn more
Skip to Content
DocsPlaygroundGuidesBlog
Sponsor

Colors

Learn how to customize colors in Chakra UI

info
Please read the overview first to learn how to properly customize the styling engine, and get type safety.

Tokens

To create new colors, we recommend providing 50 - 950 color values. Here's an example of how to customize colors in Chakra UI.

theme.ts

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

const customConfig = defineConfig({
  theme: {
    tokens: {
      colors: {
        brand: {
          50: { value: "#e6f2ff" },
          100: { value: "#e6f2ff" },
          200: { value: "#bfdeff" },
          300: { value: "#99caff" },
          // ...
          950: { value: "#001a33" },
        },
      },
    },
  },
})

export const system = createSystem(defaultConfig, customConfig)

To use the brand color, you can set the value of any color related properties, like bg, borderColor, color, etc. to the brand token.

<Box bg="brand.100" />

Semantic Tokens

Color Palette

For new colors defined in the theme, we recommend creating these matching semantic tokens to ensure consistency.

  • solid: The bold fill color of the color.
  • contrast: The text color that goes on solid color.
  • fg: The foreground color used for text, icons, etc.
  • muted: The muted color of the color.
  • subtle: The subtle color of the color.
  • emphasized: The emphasized version of the subtle color.
  • focusRing: The focus ring color when interactive element is focused.
note
This is required if you intend to use the color in colorPalette property.

theme.ts

const customConfig = defineConfig({
  theme: {
    tokens: {
      colors: {
        brand: {
          // ...
        },
      },
    },
    semanticTokens: {
      colors: {
        brand: {
          solid: { value: "{colors.brand.500}" },
          contrast: { value: "{colors.brand.100}" },
          fg: { value: "{colors.brand.700}" },
          muted: { value: "{colors.brand.100}" },
          subtle: { value: "{colors.brand.200}" },
          emphasized: { value: "{colors.brand.300}" },
          focusRing: { value: "{colors.brand.500}" },
        },
      },
    },
  },
})

To use the color palette in components, you can use the colorPalette property.

<Button colorPalette="brand">Click me</Button>

Alternative, you can also use the semantic token directly.

<Box color="brand.contrast" bg="brand.solid">
  Hello world
</Box>

Custom Tokens

Here's an example of how to create custom semantic tokens.

theme.ts

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

const customConfig = defineConfig({
  theme: {
    semanticTokens: {
      colors: {
        "checkbox-border": {
          value: { _light: "gray.200", _dark: "gray.800" },
        },
      },
    },
  },
})

export const system = createSystem(defaultConfig, customConfig)

Then, you can apply the checkbox-border token to any component.

<Square size="4" borderColor="checkbox-border">
  <LuCheck />
</Square>

Previous

Breakpoints

Next

Conditions