Theme JSON Format (v1)
This document defines the JSON structure for editor themes.
- All color values are 6-digit hex strings (for example
#d4d8e1). - Capture keys must be lowercase and must not include
@. syntax.exactoverridessyntax.group. These can be any values!- If a capture is missing from both maps, the editor should fall back to the base
linestyle.
Full structure
{
"name": "default",
"line": { "fg": "#d4d8e1", "bg": "#111418" },
"background": { "bg": "#111418" },
"visual_highlight": { "bg": "#2f334d" },
"cursors": {
"normal": { "fg": "#111418", "bg": "#d4d8e1" },
"insert": { "fg": "#d4d8e1", "bg": "#111418" },
"command": { "fg": "#111418", "bg": "#d4d8e1" },
"replace": { "fg": "#d4d8e1", "bg": "#111418" }
},
"gutter": {
"default": { "fg": "#6b7280", "bg": "#0d1014" },
"current_line": { "fg": "#c0c8d8", "bg": "#0d1014" }
},
"status_bar": {
"default": { "fg": "#8f99aa", "bg": "#0d1014" }
},
"command_line": {
"error": { "fg": "#bf616a", "bg": "#111418" },
"output_border": { "fg": "#d4d8e1", "bg": "#0d1014" },
"continue_message": { "fg": "#81a1c1", "bg": "#111418" }
},
"syntax": {
"group": {
"comment": "#7f8795",
"function": "#81a1c1",
"keyword": "#b48ead",
"number": "#88c0d0",
"string": "#a3be8c",
"type": "#ebcb8b",
"variable": "#d4d8e1"
...
},
"exact": {
"comment.documentation": "#8f99aa",
"function.call": "#81a1c1",
"keyword.return": "#b48ead",
"string.escape": "#d08770",
"variable.parameter": "#c0c8d8",
...
}
}
}
Field notes
name: theme name shown by:colorscheme.line: base text style used as the default fallback.background: background fill style used for empty space.visual_highlight: selection background style.syntax.group: fallback colors by capture group (keyword,string,comment, etc.).syntax.exact: exact capture overrides (keyword.function,string.escape, etc.).
Future ideas
For now, styles only support foreground/background colors.
In a future version we may add optional text attributes such as:
bolditalicunderline