Junie Help

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

  1. Create a themes folder in the Junie CLI home directory. The default path is ~/.junie/themes. If the JUNIE_HOME environment variable is set, use $JUNIE_HOME/themes instead.

  2. Add a JSON file to the folder. The file name without the .json extension becomes the theme name. For example, nord.json appears as nord in the list. The names auto, dark, and light are reserved for the built-in themes.

  3. Restart Junie CLI. Theme files are loaded only at startup.

  4. Run /themes and select your theme.

The following example inherits the built-in dark theme and overrides a few colors:

{ "extends": "dark", "defs": { "frost": "#88C0D0", "green-300": "#A3BE8C" }, "theme": { "primary": "frost", "accent": "#81A1C1", "background": "#2E3440" } }

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 in theme and 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 #RRGGBB format, 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 defs or 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

gray-0

#FFFFFF

gray-50

#F7F8F9

gray-100

#EEEEEE

gray-150

#DEDFE0

gray-200

#C6C6C7

gray-400

#9E9E9E

gray-500

#666666

gray-700

#424447

gray-800

#3A3A3A

gray-850

#2C2E31

gray-900

#212326

gray-925

#141516

gray-950

#121212

red-900

#4D1D1D

red-800

#5F3434

red-600

#D70000

red-400

#FF5F5F

red-200

#F2CCCC

red-100

#FFD7D7

yellow-600

#CB9434

yellow-200

#FFD75F

orange-500

#FF8700

orange-300

#FFAF5F

green-brand

#48E054

green-900

#1D4129

green-800

#284B34

green-600

#00AF5F

green-300

#5FD787

green-200

#CCE9D6

green-100

#D7F5E1

blue-800

#134388

blue-500

#0087FF

blue-300

#5FAFFF

blue-200

#9AD4FF

indigo-300

#8787FF

indigo-500

#5F5FFF

purple-600

#AF5FAF

purple-300

#D787D7

Tokens

Tokens control the colors of specific interface elements. Use token names as keys in the theme object.

Interface

Token

Used for

dark

light

primary

Main emphasis: the prompt marker, spinners, and active items.

green-300

green-600

secondary

Section headings and mentions of slash commands.

purple-300

purple-600

accent

Links, file paths, and shell commands.

blue-300

blue-500

error

Errors and failed steps.

red-400

red-600

warning

Warnings and states that need your attention.

yellow-200

yellow-600

success

Completed steps and successful operations.

green-300

green-600

info

Informational messages.

blue-300

blue-500

text

Main text in full-screen mode.

gray-0

gray-950

textMuted

Secondary text and shortcut descriptions.

gray-400

gray-500

textSubtle

Placeholders, metadata, and separators.

gray-500

gray-400

textInverted

Text on a colored background, such as the /goal status badge or the selected path in path completion.

gray-950

gray-0

selectedListItemText

The selected item in a list.

green-300

green-600

shortcutHighlighted

Keys in shortcut hints and the background of the selected file in path completion.

indigo-300

indigo-500

background

Application background in full-screen mode.

gray-900

gray-50

backgroundPanel

Popups and side panels.

gray-925

gray-0

backgroundElement

The prompt input and notification cards.

gray-800

gray-100

border

Frames, dividers, and table borders.

gray-500

gray-400

borderActive

Reserved.

gray-850

gray-200

borderSubtle

Reserved.

gray-700

gray-150

textSelectionBackground

Background of text selected with the mouse.

blue-800

blue-200

cursorBackground

The prompt caret.

green-300

green-600

cursorForeground

The character under the prompt caret.

gray-950

gray-0

badgeBackground

Background of promotion badges in the model list.

red-400

red-600

badgeForeground

Text of promotion badges in the model list.

gray-0

gray-0

activeTabBackground

Background of the active tab.

indigo-300

indigo-500

activeTabForeground

Text of the active tab.

gray-0

gray-0

inputModePlan

The prompt marker and caret in Plan mode.

yellow-200

yellow-600

inputModeDebug

The prompt marker and caret in Debug mode.

indigo-300

indigo-500

inputModeBash

The prompt marker and caret in Bash mode.

blue-300

blue-500

inputModePlaybook

The prompt marker and caret in Playbook mode.

purple-300

purple-600

categorical1

Colors used to distinguish subagent names, usage chart series, and effort and default preset levels.

blue-300

blue-500

categorical2

See categorical1.

green-300

green-600

categorical3

See categorical1.

yellow-200

yellow-600

categorical4

See categorical1.

indigo-300

indigo-500

categorical5

See categorical1.

purple-300

purple-600

Diffs

Token

Used for

dark

light

diffHighlightAdded

The + marker on an added line.

gray-500

gray-400

diffHighlightRemoved

The - marker on a removed line.

gray-500

gray-400

diffAddedBg

Background of an added line.

green-900

green-100

diffRemovedBg

Background of a removed line.

red-900

red-100

diffAddedWordBg

Background of changed words in an added line.

#71A081

#B2FFB2

diffRemovedWordBg

Background of changed words in a removed line.

#C08888

#FFAAAA

diffContextBg

Reserved.

gray-900

gray-50

diffLineNumber

Line numbers.

gray-500

gray-400

diffHunkHeader

The @@ header at the start of a diff hunk.

gray-500

gray-400

Markdown

Token

Used for

dark

light

markdownText

Parts of highlighted code blocks that have no syntax color.

gray-0

gray-950

markdownHeading

Headings.

purple-300

purple-600

markdownLink

Link URLs displayed next to the link text when the terminal does not support hyperlinks.

blue-300

blue-500

markdownLinkText

Link text.

blue-300

blue-500

markdownCode

Inline code.

gray-400

gray-500

markdownBlockQuote

Reserved.

gray-400

gray-500

markdownEmph

Reserved.

gray-0

gray-950

markdownStrong

Reserved.

gray-0

gray-950

markdownHorizontalRule

Reserved.

gray-500

gray-400

markdownListItem

Unordered list markers.

gray-500

gray-400

markdownListEnumeration

Ordered list numbers.

gray-500

gray-400

markdownCodeBlock

Code blocks without syntax highlighting.

gray-400

gray-500

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

dark

light

syntaxKeyword

Keywords, modifiers, and literals such as true and null.

gray-0

gray-950

syntaxFunction

Function names in declarations and in calls without a receiver, shell commands, and CSS functions.

yellow-200

yellow-600

syntaxVariable

Declared variable and parameter names, JSON and YAML keys, markup attributes, CSS properties, and shell variables.

blue-300

blue-500

syntaxString

Strings and markup attribute values.

green-300

green-600

syntaxNumber

Numbers, and CSS colors and lengths.

green-300

green-600

syntaxType

Class and type names, markup tag names, CSS selectors, and YAML anchors.

gray-0

gray-950

syntaxOperator

Operators.

gray-0

gray-950

syntaxComment

Comments and docstrings.

gray-500

gray-400

syntaxPunctuation

Brackets, separators, and other punctuation.

gray-500

gray-950

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:

⚠ 2 Issues in nord.json theme.primary: "nord8" is neither a def nor a palette color defs.frost: invalid color "#88C0D", expected #RRGGBB

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.

13 November 2026