Skip to content

Graphite Themes

Vinícius Campos edited this page Aug 22, 2026 · 1 revision

Graphite Themes

Two themes in one extension: Graphite Dark and Graphite Light.

Graphite Dark takes its hues from the Andromeda palette. Andromeda ships dark-only, so Graphite Light is derived from it by GraphiteTheme/Themes/derive-light.py: the hues stay Andromeda's and the greys keep its violet cast, but every accent is darkened until it clears WCAG AA (4.5:1) against the white editor surface. The surfaces split rather than invert, because Andromeda's chrome and editor share one flat colour that has to become two on light.

Graphite does not separate the five type kinds

This is the one structural difference from the Focus family. In both Graphite themes, class name, interface name, record class name, record struct name, struct name, enum name, delegate name, type parameter name and the rest all resolve to a single type hue. Per-kind type colours are a Focus Themes feature and exist nowhere in Graphite.

Interfaces and type parameters are still distinguishable, but by slant rather than by hue — see Color Roles for the emphasis rules, which are shared by both families.


Graphite Dark

Near-black with a cool violet cast. Cyan #00E8C6 is Andromeda's active-state colour and carries the accent here: status bar, active-tab underline, and every name in the editor.

Role Hex
keyword #C74DED
all type names #7CB7FF
method #FFE66D
names (local, field, property, event, parameter, enum member) #00E8C6
operator #EE5D43
string #96E072
number #E36480
constant and escape character #F39C12
preprocessor keyword and label #FF00AA
punctuation, namespace, comment #A0A1A7
brace pair levels one / two / three #F92672 / #FFE66D / #00E8C6
mismatched brace #EE5D43
Surface Hex
editor #23262E
tool window #20232A
raised #2B303B
border #333844
selection #3D4352
inactive selection #2B303B
plain text #D5CED9
comment #A0A1A7
gutter #746F77
accent #00E8C6

#E36480 is the number hue on dark. A true burgundy is only about 1.7:1 on this background, so it is lifted here; the light theme uses the deep value instead.


Graphite Light

A white editor on warm-grey chrome. Every syntax colour is Andromeda's hue darkened until it clears 4.5:1 on white, so the two themes are recognisably the same palette rather than two unrelated ones.

Role Hex
keyword #7E28C9
all type names #1D6BC4
method #8A6D00
names (local, field, property, event, parameter, enum member) #007D6A
operator #C0341C
string #4A7F2C
number #8C1D3F
constant and escape character #9A5C00
preprocessor keyword and label #C00080
punctuation, namespace, comment #5F5B6B
brace pair levels one / two / three #C4105A / #8A6D00 / #007D6A
mismatched brace #C0341C
Surface Hex
editor #FFFFFF
chrome #F5F4F8
tool window #EDECF2
raised #E9E7F0
border #D3D0DC
selection #D5D2E2
inactive selection #E9E7F0
plain text #23262E
comment #5F5B6B
gutter #6E6A78
accent #007D6A

The comment grey is opaque on light. On dark it carries an 80% alpha, which on white fell to 4.1:1 and had to be flattened.


Emphasis

GraphiteTheme/GraphiteEmphasis.cs exports the same italic and bold rules as the Focus family, under Graphite.* names rather than Focus.*. The full list is on Color Roles.

Both extensions can be installed side by side. Two MEF exports then compete for each classification and the resolution order is undefined, but both set the same flags to the same values and neither sets a foreground colour, so either order renders identically.

Clone this wiki locally