[FEATURE] Custom theming + syntax highlighting plugin API
Summary
Claude Code currently offers a small set of built-in themes with no mechanism to customize token colors or ship alternative grammars/themes via the plugin system. This issue proposes two complementary additions:
- User-configurable token colors — a
syntaxHighlightingblock insettings.jsonthat maps semantic token types to ANSI or hex colors - A syntax highlighting plugin extension point — so the community can publish grammar/theme packages (TextMate, tree-sitter, or a lightweight equivalent) through the existing plugin marketplace
---
Motivation
The current /theme picker offers ~5 presets. Power users who invest heavily in their terminal aesthetic (Catppuccin, Tokyo Night, Dracula, custom palettes, etc.) have no way to carry those colors into Claude Code's diff and response rendering. The dark-ansi theme defers to the terminal's ANSI palette, which helps slightly, but there's no per-token control.
The plugin system already supports slash commands, agents, MCP servers, and hooks. Extending it to include syntax highlighting themes would give the community a natural distribution channel — the same plugin install workflow users already know — and remove the burden of shipping every possible theme natively.
---
Proposed API
1. settings.json token color overrides
{
"syntaxHighlighting": {
"keyword": "#c792ea",
"string": "#c3e88d",
"comment": "#546e7a",
"number": "#f78c6c",
"type": "#ffcb6b",
"function": "#82aaff",
"variable": "#eeffff",
"operator": "#89ddff",
"punctuation":"#89ddff"
}
}
Accepts hex colors or ANSI color names. Merges with the active theme as overrides.
2. Plugin manifest extension point
// plugin.json
{
"syntaxTheme": {
"name": "Tokyo Night",
"description": "A dark theme inspired by Tokyo Night",
"tokenColors": {
"keyword": "#bb9af7",
"string": "#9ece6a",
"comment": "#565f89",
"number": "#ff9e64",
"type": "#2ac3de",
"function": "#7aa2f7"
}
}
}
When a plugin declares a syntaxTheme, it becomes selectable via /theme (e.g., /theme tokyo-night).
---
Related issues
- #1302 — custom terminal themes beyond built-in options
- #22367 — theme color customization for diff highlighting
- #25366 — user-configurable color themes and conversation input highlighting
- #29166 — customizable UI colors/themes
- #8504 — disable or customize user input background highlighting
---
Why a plugin API vs. just more built-in themes
Bundling every community theme natively doesn't scale. A plugin extension point lets the community own distribution and iteration speed without gating on Anthropic releases. The token-color override in settings.json covers the "I just want to tweak a few colors" case; the plugin API covers the "I want to publish and share a full theme" case.
---
Acceptance criteria
- [ ]
settings.jsonaccepts asyntaxHighlightingmap of token type → color - [ ] Plugin manifests can declare a
syntaxThemeblock - [ ] Themes installed via plugins appear in the
/themepicker - [ ] Documentation updated with token type reference and plugin theme authoring guide
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗