glowup

Theme reference

Every theme field with its type, default, limits and validation rules, plus the values of the built-in themes.

File format

A theme is a JSON file with comments allowed. glowup accepts // line comments and /* */ block comments. Trailing commas are not allowed.

RuleValue
Location~/.claude/glowup/themes/<name>.json, or $CLAUDE_CONFIG_DIR/glowup/themes/ when that variable is set
ExtensionOnly files that end in .json are read
Theme nameThe file name without .json. The name field is used only by /glowup theme add.
Size limit65536 bytes (64 KB)
Top levelMust be a JSON object
Unknown top-level keysIgnored

A file in the folder with the name of a built-in theme replaces that theme for you.

Fields

FieldTypeDefaultWhat it does
namestringnoneThe name theme add saves the file under. Lowercase letters, digits and dashes, 1 to 40 characters, starting with a letter or digit. Not a built-in name.
extendsstringnoneName of the theme to build on. See The extends chain.
colorsobjectclassic colorsColors by key. Each value is #rrggbb.
spinner.wordsarray of strings["Thinking"]Words for the spinner. See Spinner words.
glyphsobjectclassic glyphsOne glyph per tool kind.
band.heartsarray of two strings["♥", "♡"]The full and empty heart in the context meter.

Colors

Every value must match #rrggbb: a hash and six hex digits, upper or lower case. Short forms like #fff are refused. An unknown key is an error: unknown color "<key>". A bad value is an error: color "<key>" must be #rrggbb.

KeyUsed for
accentplan item, progress pips, plan glyphs
textmain text
dimsecondary text, separators, empty hearts
faintempty bar parts, box and section borders
readread & search rows, running subagent work
editedit rows, context warnings
shellshell rows
agentsubagent rows
passpassing tests, finished subagents, added lines
failfailures, full hearts, removed lines
panelthe background fades blend toward
addBgnot drawn yet
delBgnot drawn yet
selnot drawn yet

Percentages in the status line read in pass below meter.warn, edit from it, and fail from meter.danger (50 and 80 unless you change them with /glowup setup).

Glyphs

Glyphs are the marks glowup adds to a tool row after the call finishes. The keys are read, search, edit, shell, agent and plan. A tool of any other kind gets no glyph.

Each glyph, and each heart, must be exactly one character in the Basic Multilingual Plane (U+0000 to U+FFFF) that is one cell wide. glowup refuses:

  • Control characters (U+0000 to U+001F, U+007F to U+009F).
  • Zero-width and bidirectional marks (U+200B to U+200F, U+2028 to U+202F, U+2060 to U+206F, U+FEFF).
  • Surrogates (U+D800 to U+DFFF).
  • Wide East Asian characters, which take two cells.
  • Anything above U+FFFF, which includes emoji.

Errors: unknown glyph "<key>", glyph "<key>" must be one width-1 character, "glyphs" must be an object, and band.hearts must be two width-1 characters.

Spinner words

spinner.words is an array of strings. Each string can be at most 24 characters. glowup rejects a word that contains control, bidirectional or zero-width characters. An empty array is ignored and the parent's words stay. A bad value is an error: spinner.words must be short strings.

glowup picks one word at random at the start of each turn and uses it for the whole turn. A theme named classic keeps Claude Code's own rotating words, so classic ignores its words. With reduced motion on, every theme keeps Claude Code's word. glowup can change the word only; the spinner frames are Claude Code's.

The extends chain

extends names another theme: a built-in, or a file in your themes folder. glowup resolves it like this:

  1. It starts from the classic values.
  2. It follows extends to the end of the chain, then applies the files from the root of the chain down to your theme.
  3. Within each file, colors and glyphs replace only the keys they set. spinner.words and band.hearts replace the whole value.

A theme with no extends still starts from classic, so any field the file leaves out takes the classic value.

Every file in the chain is validated. Errors:

MessageCause
theme "<name>": no theme named "<other>"extends names a theme that does not exist.
theme "<name>": "extends" loops: a -> b -> aThe chain comes back to a theme already in it.
theme "<name>": "extends" must be a theme nameextends is not a string.
theme "<name>": a theme must be a JSON objectThe file is not an object.

When any of these happen, /glowup theme <name> prints the message and keeps your current theme. At session start, glowup shows the message and uses classic.

Built-in themes

classic is the default theme. glowup, aurora, dusk, cyberpunk, vaporwave and high-contrast extend classic. They set all 14 colors. All of them except high-contrast set spinner words.

Keyglowupauroradusk
accent#ffc857#5ef1c6#b69cff
text#ece6f2#e2eef2#e6e6f6
dim#8e86a0#7f97a3#8a8cad
faint#2f2a3a#22313b#272a44
read#8ecbff#7cc7ff#7fd6ff
edit#ffa94d#ffd479#ffcf7a
shell#7ee0a1#5ef1c6#8ef0b0
agent#c9a7ff#b49cff#ff9ad5
pass#7ee0a1#5ef1c6#8ef0b0
fail#ff6f7d#ff7a8a#ff7088
panel#1d1924#131c23#171a2b
addBg#1d3326#123329#18322a
delBg#3f1f27#3a1d26#3b1f2f
sel#2a2433#1c2933#222640
Keyclassiccyberpunkvaporwavehigh-contrast
accent#d77757#ff2bd6#ff71ce#ffff00
text#e4e4e7#e4dcff#ffe3f6#ffffff
dim#8b8b94#7d7398#a08bc0#d0d0d0
faint#3a3a42#2d1f45#4a2d70#808080
read#7dc4e4#00e5ff#01cdfe#00ffff
edit#e5b567#ffb000#fffb96#ffaa00
shell#4eba65#39ff88#05ffa1#00ff00
agent#b39ddb#b388ff#b967ff#ff80ff
pass#4eba65#39ff88#05ffa1#00ff00
fail#ff6b80#ff3b5c#ff6b6b#ff4040
panel#1f1f24#140c22#24123f#000000
addBg#1f3a26#0f3324#123a3a#003300
delBg#4a2228#3d1020#4a1a3a#440000
sel#2a2a33#24123a#3a1d5c#333333

Other values:

Fieldclassicglowupauroradusk
spinner.wordsThinkingGlowing, Kindling, PolishingDrifting, Shimmering, ChartingDreaming, Musing, Wandering
glyphsread ▸, search ⌕, edit ✎, shell $, agent ◆, plan ◇from classicfrom classicfrom classic
band.hearts♥ ♡from classicfrom classicfrom classic
Fieldcyberpunkvaporwavehigh-contrast
spinner.wordsJacking in, Compiling, GlowingVibing, Drifting, Glowingfrom classic
glyphsfrom classicfrom classicfrom classic
band.heartsfrom classicfrom classicfrom classic

On this page