Color themes
Junie CLI includes three built-in themes and lets you create custom themes using JSON files. Themes control the colors used in the interface, diffs, and Markdown responses. They do not change your terminal's color scheme.
Built-in themes
Auto: automatically selects the dark or light theme based on your terminal or operating system settings. It also uses the background color reported by your terminal, so Junie CLI blends in with your terminal theme.
Dark: a dark theme with its own background color.
Light: a light theme with its own background color.
To switch themes, run /themes, select a theme, and press Enter. Custom themes appear after the built-in themes in the list. You can also change the theme using the Theme setting in /settings.
Create a theme
Create a
themesfolder in the Junie CLI home directory. The default path is~/.junie/themes. If theJUNIE_HOMEenvironment variable is set, use$JUNIE_HOME/themesinstead.Add a JSON file to the folder. The file name without the
.jsonextension becomes the theme name. For example,nord.jsonappears asnordin the list. The namesauto,dark, andlightare reserved for the built-in themes.Restart Junie CLI. Theme files are loaded only at startup.
Run
/themesand select your theme.
The following example inherits the built-in dark theme and overrides a few colors:
Theme file format
A theme file is a JSON object with the following top-level keys:
extends: an optional base theme, either"dark"or"light". Tokens you do not specify inherit their values from this theme.defs: an optional object containing named color definitions. You can reference these colors inthemeand in other definitions.theme: an object that maps tokens to colors.
Other top-level keys are not supported.
Colors
Specify each color as a string in one of two formats:
Hex color: a six-digit hex value in
#RRGGBBformat, such as"#88C0D0". The short form (#RGB) and values with an alpha channel (#RRGGBBAA) are not supported.Reference: the name of a color defined in
defsor in the palette, such as"frost"or"blue-500".
Numbers, objects, and strings in other formats are not accepted. Each theme file defines a single color scheme. To provide both dark and light versions of a theme, create a separate file for each.
Inheritance and color definitions
If you specify extends, you only need to set the tokens you want to change. Otherwise, you must define every token. Junie CLI reports any missing tokens when it loads the file.
A color definition with the same name as a palette color overrides that color throughout the theme, including inherited tokens. For example, "green-300": "#A3BE8C" changes every inherited token that uses green-300. In the dark theme, these include success and cursorBackground (the prompt caret).
Color definitions can reference other definitions and palette colors. Circular references, where a definition refers to itself directly or through other definitions, are not allowed.
Palette
You can reference these colors by name in any theme file. The dark and light columns in the token tables show which palette colors the built-in themes use.
Name | Color |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tokens
Tokens control the colors of specific interface elements. Use token names as keys in the theme object.
Interface
Token | Used for |
|
|
|---|---|---|---|
| Main emphasis: the prompt marker, spinners, and active items. |
|
|
| Section headings and mentions of slash commands. |
|
|
| Links, file paths, and shell commands. |
|
|
| Errors and failed steps. |
|
|
| Warnings and states that need your attention. |
|
|
| Completed steps and successful operations. |
|
|
| Informational messages. |
|
|
| Main text in full-screen mode. |
|
|
| Secondary text and shortcut descriptions. |
|
|
| Placeholders, metadata, and separators. |
|
|
| Text on a colored background, such as the |
|
|
| The selected item in a list. |
|
|
| Keys in shortcut hints and the background of the selected file in path completion. |
|
|
| Application background in full-screen mode. |
|
|
| Popups and side panels. |
|
|
| The prompt input and notification cards. |
|
|
| Frames, dividers, and table borders. |
|
|
| Reserved. |
|
|
| Reserved. |
|
|
| Background of text selected with the mouse. |
|
|
| The prompt caret. |
|
|
| The character under the prompt caret. |
|
|
| Background of promotion badges in the model list. |
|
|
| Text of promotion badges in the model list. |
|
|
| Background of the active tab. |
|
|
| Text of the active tab. |
|
|
| The prompt marker and caret in Plan mode. |
|
|
| The prompt marker and caret in Debug mode. |
|
|
| The prompt marker and caret in Bash mode. |
|
|
| The prompt marker and caret in Playbook mode. |
|
|
| Colors used to distinguish subagent names, usage chart series, and effort and default preset levels. |
|
|
| See |
|
|
| See |
|
|
| See |
|
|
| See |
|
|
Diffs
Token | Used for |
|
|
|---|---|---|---|
| The |
|
|
| The |
|
|
| Background of an added line. |
|
|
| Background of a removed line. |
|
|
| Background of changed words in an added line. |
|
|
| Background of changed words in a removed line. |
|
|
| Reserved. |
|
|
| Line numbers. |
|
|
| The |
|
|
Markdown
Token | Used for |
|
|
|---|---|---|---|
| Parts of highlighted code blocks that have no syntax color. |
|
|
| Headings. |
|
|
| Link URLs displayed next to the link text when the terminal does not support hyperlinks. |
|
|
| Link text. |
|
|
| Inline code. |
|
|
| Reserved. |
|
|
| Reserved. |
|
|
| Reserved. |
|
|
| Reserved. |
|
|
| Unordered list markers. |
|
|
| Ordered list numbers. |
|
|
| Code blocks without syntax highlighting. |
|
|
Syntax highlighting
Junie CLI highlights code blocks and file diffs written in Kotlin, Java, Python, JavaScript, TypeScript, JSON, YAML, XML, HTML, CSS, and shell scripts. Code in other languages keeps the markdownCodeBlock color in code blocks and the default text color in diffs. References to variables and members, such as items.size(), are not colored.
Token | Used for |
|
|
|---|---|---|---|
| Keywords, modifiers, and literals such as |
|
|
| Function names in declarations and in calls without a receiver, shell commands, and CSS functions. |
|
|
| Declared variable and parameter names, JSON and YAML keys, markup attributes, CSS properties, and shell variables. |
|
|
| Strings and markup attribute values. |
|
|
| Numbers, and CSS colors and lengths. |
|
|
| Class and type names, markup tag names, CSS selectors, and YAML anchors. |
|
|
| Operators. |
|
|
| Comments and docstrings. |
|
|
| Brackets, separators, and other punctuation. |
|
|
Reserved tokens are accepted in theme files but do not affect the current interface.
Troubleshoot theme errors
Junie CLI validates theme files at startup. If a file contains errors, the theme is not added to the list. The home screen shows the total number of errors. Run /themes to see the errors grouped by file above the theme list:
An example of possible theme issues:
The path before each error message identifies the JSON key to fix. Correct the file and restart Junie CLI to load it again.
If Junie CLI cannot load your selected theme or the selected theme file is missing, it falls back to Auto. Your theme selection remains saved in settings until you select a theme, including Auto. Once the file is fixed or restored, restart Junie CLI to apply the theme again.