---
title: Switching Themes
description: "Yamada UI provides the functionality for users to switch themes."
---
## Setup
### Generate a Theme
Use the [CLI](https://yamada-ui.com/docs/theming/cli.md) to generate a theme.
:::warning
Before running the following commands, you need to install `@yamada-ui/cli` and execute the `init` command. For more details, please see [here](https://yamada-ui.com/docs/get-started/cli.md).
:::
```bash
pnpm yamada-cli theme
```
```bash
npm yamada-cli theme
```
```bash
yarn yamada-cli theme
```
```bash
bun yamada-cli theme
```
### Add a Theme
Change the `index.ts` in the generated theme.
```tsx
import { defineTheme } from "@yamada-ui/react"
import { semanticTokens } from "./semantic-tokens"
import { styles } from "./styles"
import { tokens } from "./tokens"
export { config } from "./config"
export const theme = defineTheme({
styles,
...tokens,
semanticTokens,
themeSchemes: {
blue: { semanticTokens: { colorSchemes: { primary: "blue" } } },
red: { semanticTokens: { colorSchemes: { primary: "red" } } },
green: { semanticTokens: { colorSchemes: { primary: "green" } } },
},
})
export type Theme = typeof theme
```
### Update the Provider
Set the generated theme to `UIProvider`.
```tsx
import { UIProvider } from "@workspaces/ui"
import { theme } from "@workspace/theme"
const App = () => {
return (
)
}
```
### Add a Logic
Use `useTheme` to switch themes. `useTheme` returns the `themeScheme` and `changeThemeScheme` to change the theme scheme.
```tsx
const { themeScheme, changeThemeScheme } = useTheme()
return (
The current scheme is "{themeScheme}"
Primary
Secondary
Primary
Secondary
)
```
## Change the Default Theme Scheme
To change the default theme scheme, set the value to `config.ts` in `defaultThemeScheme`.
### Change the Config
Change the `config.ts` in the generated theme.
```tsx
import { defineConfig } from "@yamada-ui/react"
export const config = defineConfig({
css: { varPrefix: "ui" },
breakpoint: { direction: "down", identifier: "@media screen" },
defaultColorMode: "dark",
defaultThemeScheme: "blue", // [!code highlight]
notice: { duration: 5000 },
theme: { responsive: true },
})
```
### Update the Provider
Set the generated theme to `UIProvider`.
```tsx
import { UIProvider } from "@workspaces/ui"
import { theme, config } from "@workspace/theme"
const App = () => {
return (
)
}
```