Draw the colours the app asked for
Explore this workspace.
Technical background
terminal.minimumContrastRatio defaulted to 4, and xterm.js rewrites every foreground that misses the ratio — 24-bit ones included. Solarized Light sits at 3–5:1 against a light background, so all thirteen of its colours were pushed toward mud and near-neighbours collapsed onto each other. The default is now 1, xterm's own "off" value, while the app chrome keeps its own floor of 4.
The problem
terminal.minimumContrastRatio defaulted to 4, and the value goes straight into xterm.js, which rewrites every foreground that misses the ratio — 24-bit colours included, since its minimum-contrast path has no exemption for them. At 4, Solarized Light on a light background sits at 3–5:1, so all thirteen of its colours get pushed toward mud and near-neighbours collapse onto each other.
How it works
The default is now 1 — xterm.js's own "off" value, and its own default. The same key also drove the app chrome's contrast floor, so the chrome now floors at its own UI_MINIMUM_CONTRAST_RATIO = 4 via max(4, terminal.minimumContrastRatio): measured identical output at 1 and at 4, while 6 still escalates it, so raising the setting for accessibility keeps working.
Settings
terminal.minimumContrastRatio:1Was 4. 1 is off — draw what the application asked for.
What this does not claim
- The source catalogue records no separate caveats for this entry. The implementation and evidence above define its scope.
In upstream Tabby
Windows Terminal's equivalent, adjustIndistinguishableColors, resolves Automatic → Never unless Windows high-contrast is on. So this is now "draw what the app asked for", the same as Windows Terminal and iTerm2.