---
title: Themes
---

OpenCode supports most common terminal themes and you can create your own custom theme.

## Built-in themes

The following predefined themes are available:

- `opencode`
- `catppuccin`
- `dracula`
- `flexoki`
- `gruvbox`
- `monokai`
- `onedark`
- `tokyonight`
- `tron`
- `custom`

Where `opencode` is the default theme and `custom` let's you define your own theme.

## Setting a theme

You can set your theme in your OpenCode config.

```json title=".opencode.json"
{
  "tui": {
    "theme": "monokai"
  }
}
```

## Create a theme

You can create your own custom theme by setting the `theme: custom` and providing color definitions through the `customTheme`.

```json title=".opencode.json"
{
  "tui": {
    "theme": "custom",
    "customTheme": {
      "primary": "#ffcc00",
      "secondary": "#00ccff",
      "accent": { "dark": "#aa00ff", "light": "#ddccff" },
      "error": "#ff0000"
    }
  }
}
```

#### Color keys

You can define any of the following color keys in your `customTheme`.

| Type              | Color keys                                              |
| ----------------- | ------------------------------------------------------- |
| Base colors       | `primary`, `secondary`, `accent`                        |
| Status colors     | `error`, `warning`, `success`, `info`                   |
| Text colors       | `text`, `textMuted`, `textEmphasized`                   |
| Background colors | `background`, `backgroundSecondary`, `backgroundDarker` |
| Border colors     | `borderNormal`, `borderFocused`, `borderDim`            |
| Diff view colors  | `diffAdded`, `diffRemoved`, `diffContext`, etc.         |

You don't need to define all the color keys. Any undefined colors will fall back to the default `opencode` theme colors.

#### Color definitions

Color keys can take:

1. **Hex string**: A single hex color string, like `"#aabbcc"`, that'll be used for both light and dark terminal backgrounds.

2. **Light and dark colors**: An object with `dark` and `light` hex colors that'll be set based on the terminal's background.
