# Themes

Customize the visual appearance of Tabnine CLI with built-in themes.

### Available Themes

Tabnine CLI includes the following built-in themes:

* **Dark themes:**
  * `ANSI`
  * `Atom One`
  * `Ayu`
  * `Default`
  * `Dracula`
  * `GitHub`
  * `Holiday`
  * `Shades Of Purple`
  * `Solarized Dark`
* **Light themes:**
  * `ANSI Light`
  * `Ayu Light`
  * `Default Light`
  * `GitHub Light`
  * `Google Code`
  * `Solarized Light`
  * `Xcode`

**Theme Persistence:** Your theme selection is saved to `.tabnine/agent/settings.json` and persists across sessions.

### Changing Themes

You can switch between themes in two ways, either by using the `/theme` command or via `/settings`.

{% tabs %}
{% tab title="/theme" %}
{% stepper %}
{% step %}
**Command**

Type the `/theme` command. This will open an interactive theme selector.

```bash
/theme
```

{% endstep %}

{% step %}
**Navigate**

Use arrow keys or `J`/`K`.
{% endstep %}

{% step %}
**Preview**

Preview the theme in real-time.
{% endstep %}

{% step %}
**Apply**

Press `Enter` to apply.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The `/theme` dialog lets you choose which scope to save to (User, Workspace, or System) using the `Tab` key. If `ui.theme` is set at multiple scopes, the highest-precedence scope wins at runtime: Workspace overrides User, and System overrides both
{% endhint %}
{% endtab %}

{% tab title="/settings" %}
Edit the file at `.tabnine/agent/settings.json`, setting the `"theme"` value to any of the available theme names listed above.

```json
{
  "ui": {
    "theme": "Dracula"
  }
}
```

{% endtab %}
{% endtabs %}

### Custom Themes

#### Defining a custom theme in settings.json

Add a `customThemes` section to your `settings.json` file (user, project, or system level). Each custom theme is an object keyed by a unique name.

**Required properties:**

* `name` — must match the key in `customThemes` and be a non-empty string (max 50 characters)
* `type` — must be the string `"custom"`

**Optional properties:**

| Group        | Property       | Description                             |
| ------------ | -------------- | --------------------------------------- |
| `text`       | `primary`      | Default text color                      |
|              | `secondary`    | Less prominent text                     |
|              | `link`         | URLs and links                          |
|              | `accent`       | Highlights and emphasis                 |
| `background` | `primary`      | Main background color                   |
|              | `diff.added`   | Background for added lines in diffs     |
|              | `diff.removed` | Background for removed lines in diffs   |
| `border`     | `default`      | Standard border color                   |
|              | `focused`      | Border color when an element is focused |
| `ui`         | `comment`      | Color for code comments                 |
|              | `symbol`       | Color for code symbols and operators    |
|              | `gradient`     | Array of colors for gradient effects    |
| `status`     | `success`      | Color for successful operations         |
|              | `warning`      | Color for warnings                      |
|              | `error`        | Color for errors                        |

Use hex codes (e.g., `#FF0000`) or CSS color names (e.g., `coral`, `teal`).

Example:

```json
{
  "ui": {
    "customThemes": {
      "MyCustomTheme": {
        "name": "MyCustomTheme",
        "type": "custom",
        "background": {
          "primary": "#181818"
        },
        "text": {
          "primary": "#f0f0f0",
          "secondary": "#a0a0a0",
          "link": "#5599ff",
          "accent": "#cc99ff"
        },
        "status": {
          "error": "#ff4444",
          "success": "#44ff44",
          "warning": "#ffaa00"
        }
      }
    }
  }
}
```

You can define multiple custom themes by adding more entries to the `customThemes` object.

#### Loading a theme from a file

You can also load a theme directly from a JSON file by setting the `"theme"` property to an absolute file path:

```json
{
  "ui": {
    "theme": "/Users/yourname/.config/my-theme.json"
  }
}
```

{% hint style="warning" %}
The theme file must be located inside your home directory. Files outside your home directory are rejected for security reasons.
{% endhint %}

The file must be a valid JSON file following the same structure as a custom theme defined in `settings.json`. Example `my-theme.json`:

```json
{
  "name": "My File Theme",
  "type": "custom",
  "background": {
    "primary": "#282828"
  },
  "text": {
    "primary": "#ebdbb2",
    "secondary": "#a89984"
  }
}
```

### See Also

* [Commands](/main/getting-started/tabnine-cli/features/commands.md)
* [Settings](/main/getting-started/tabnine-cli/features/settings.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tabnine.com/main/getting-started/tabnine-cli/features/themes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
