#064

Create and distribute custom themes with Claude Code

Until April, Claude Code shipped with 4-5 themes and that was it. If you worked with a specific palette, you took whatever the repo gave you. There are three levels to build your own — and the most under-discussed one is the one that changes the rules for entire teams.

From zero to professional: Claude Code tips, tutorials and deep dive guides.

Explore the hub

Diagram of custom themes in Claude Code: the interactive picker with New custom theme, the JSON with base+overrides and color swatches, the plugin that distributes the theme to the whole team

TL;DR Run /theme and pick New custom theme... at the end of the list. You choose a base preset (dark or light) and override only the tokens you care about. It lives in ~/.claude/themes/<slug>.json. Hot-reload: edit the JSON and the active session updates without restarting. And if you ship it inside a plugin, the whole team inherits it with one install.

Until April, Claude Code shipped with four or five themes and that was it. If you worked with a specific palette — your company's corporate scheme, Dracula, Solarized, a mix of your own — you took whatever the repo gave you. Anthropic packaged the fix in v2.1.118 (Week 17, April 2026): custom themes. And the most under-discussed piece is the last one — themes are shippable as plugins.

How it works internally

Each custom theme is a JSON file in ~/.claude/themes/<slug>.json with three fields:

Field Detail
name The name that shows up in the /theme picker
base The preset to inherit from: dark, light, or any built-in
overrides Dictionary of semantic tokens to colors

You only override what you care about. The rest inherits from the base preset. When you select it, Claude stores custom:<slug> as your theme preference. And it watches the folder — if you edit the JSON in your code editor, changes take effect in the live session without a restart.

Color values accept any of these formats:

#bd93f9       (#rrggbb)
#bdf          (#rgb)
rgb(189, 147, 249)
ansi256(141)  (256-color palette)
ansi:cyan     (16 standard ANSI)

Result preview

// ~/.claude/themes/dracula.json
{
  "name": "Dracula",
  "base": "dark",
  "overrides": {
    "claude": "#bd93f9",
    "error":  "#ff5555",
    "success": "#50fa7b"
  }
}

Save the file. Run /theme, see "Dracula" in the list, pick it. Change #bd93f9 to #ff79c6 in your editor, save. Switch back to the terminal: already applied. No restart.

How to use it

1. Interactive picker (no JSON)

> /theme
[built-in themes]
[custom themes you've created]
[themes contributed by installed plugins]
> New custom theme...

Name it, pick a base preset, override tokens one by one. Claude creates the JSON for you in ~/.claude/themes/.

2. Hand-edit the JSON

Faster when you already know the hex values you want. Create the file, drop in the overrides you need, switch back to the terminal and pick it from /theme.

mkdir -p ~/.claude/themes
cat > ~/.claude/themes/corporate.json <<'EOF'
{
  "name": "Corporate",
  "base": "light",
  "overrides": {
    "claude": "#1a73e8",
    "syntax.string": "#0f9d58",
    "syntax.keyword": "#d93025"
  }
}
EOF

3. Ship the theme to your team as a plugin

Here's the edge. Instead of asking 12 people to copy your JSON, you drop it inside a Claude Code plugin:

my-plugin/
├── plugin.json
└── themes/
    └── corporate.json

plugin install does the rest: the theme shows up in every teammate's /theme automatically. When you bump the plugin version (corporate colors changed, you added a dark variant), a /plugin marketplace update propagates it.

Reference

Aspect Detail
Minimum version Claude Code v2.1.118
Command /theme (alias of what you already knew)
Path ~/.claude/themes/<slug>.json
Slug Filename without .json
Hot-reload Yes — edit the JSON and the live session updates
Color formats #rrggbb, #rgb, rgb(r,g,b), ansi256(n), ansi:<name>
Distribution Any plugin can ship themes inside its themes/ folder
Persistence The selected theme lives in ~/.claude/settings.json as custom:<slug>

Official docs: Terminal config — Create a custom theme

Get only what matters

If I have nothing worth saying, you won't hear from me. When I do, you'll be the first to know. 7,000+ professionals already trust this.

Are you a professional Web developer?
No

Unsubscribe at any time.