A vivid light color theme for VS Code, Vim, iTerm2, and tmux. Warm off-white background, WCAG-verified contrast ratios, and research-backed design for brightly-lit environments.
View on GitHub · iTerm2 · zsh
Every color is verified against the warm off-white background (#F1EDE5). Keywords and control flow exceed AAA (7:1), all other syntax colors meet AA (4.5:1).
MorningHue highlights all standard Vim syntax groups, so any language Vim supports works automatically. Here are examples from several languages commonly used in hardware verification and software development.
A common problem with light themes: broken symlinks are invisible. MorningHue's dircolors configuration fixes this.
All contrast ratios are calculated against the background (#F1EDE5, luminance 0.849) using the WCAG 2.1 formula. Colors are sorted by contrast ratio.
| Color | Hex | cterm | Contrast Ratio | Grade | Usage |
|---|---|---|---|---|---|
#0000d7 | 20 | 9.08 : 1 | AAA | Keyword, module, structure | |
#870000 | 88 | 8.86 : 1 | AAA | PreProc, `define, `ifdef | |
#444444 | 238 | 8.33 : 1 | AAA | Normal text | |
#870087 | 90 | 7.56 : 1 | AAA | Control flow, always, if | |
#5f00d7 | 56 | 7.29 : 1 | AAA | Type, StorageClass | |
#005f00 | 22 | 6.82 : 1 | AA | String | |
#005f5f | 23 | 6.42 : 1 | AA | Boolean, tag | |
#af0000 | 124 | 6.37 : 1 | AA | Error, exception | |
#005f87 | 24 | 6.06 : 1 | AA | Function, Identifier | |
#005faf | 25 | 5.52 : 1 | AA | Operator, delimiter | |
#875f00 | 94 | 4.90 : 1 | AA | Number, constant | |
#af00d7 | 128 | 4.73 : 1 | AA | Statement, assert | |
#d70000 | 160 | 4.62 : 1 | AA | Import, include | |
#949494 | 246 | 2.60 : 1 | Subtle | Comment (italic) | |
#1c1c1c | — | 16.29 : 1 | AAA | ANSI color15 (bright white) — remapped for TUI tool visibility |
* ANSI palette slots color7 (#444444, listed above as Normal text) and color15 (#1c1c1c) are remapped to dark values. On a light background, tools like GitHub Copilot CLI render text in these slots; keeping them light would make the output invisible.
Engineers spend hours reading code on screen. A theme with poor contrast forces the eyes to work harder, leading to fatigue and missed details. MorningHue ensures:
PaperColor is an excellent theme, but several of its colors fall below the WCAG AA threshold on its own background. MorningHue addresses every one:
| Element | PaperColor | CR | MorningHue | CR | Change |
|---|---|---|---|---|---|
| Background | #eeeeee | — | #F1EDE5 | — | Warmer, less harsh |
| Strings | #5f8700 | 3.65 | #005f00 | 6.82 | +87% |
| Statement | #d70087 | 4.27 | #af00d7 | 4.73 | +11% |
| Operator | #0087af | 3.56 | #005faf | 5.52 | +55% |
| Numbers | #d75f00 | 3.28 | #875f00 | 4.90 | +49% |
| Boolean | #008700 | 4.05 | #005f5f | 6.42 | +59% |
| Broken symlinks | Invisible | Bold red on pink | Fixed | ||
MorningHue is designed for brightly-lit environments. There is peer-reviewed research supporting this design choice — but the picture is nuanced. This section presents what the evidence actually says.
Polarity is the term researchers use for the relationship between text and background luminance. Positive polarity means dark text on a light background; negative polarity means light text on a dark background.
Multiple controlled studies find that positive polarity produces better proofreading accuracy and faster reading speed under typical office lighting. The clearest mechanistic explanation is optical, not perceptual: a bright background causes the pupil to constrict. Smaller pupils reduce spherical and chromatic aberrations in the eye's lens, producing a sharper retinal image. A 2014 study by Piepenbrock, Mayr, and Buchner directly measured smaller pupil sizes and better performance with positive polarity displays.¹ The same group found the effect was more pronounced with smaller character sizes² — relevant for code, where identifiers and operators are often small.
Importantly, a 2007 study by Buchner and Baumgartner⁴ found that when display luminance was equalized between the two polarity conditions, the performance difference disappeared. The advantage is a luminance effect, not a polarity effect per se. In normal use, positive polarity displays are brighter overall, and it is that extra luminance — driving pupil constriction — that produces the reading benefit.
The advantage is conditional on environment. A 2024 study⁵ found that under high ambient brightness, negative polarity actually produced lower eye fatigue — the dark screen reduces total luminance load when the room itself is already very bright. Research by Dobres et al. (2017)⁶ consistently shows that what matters most is matching screen luminance to ambient light: when screen brightness is close to the environmental brightness, visual fatigue is reduced regardless of polarity.
Pure white backgrounds (#ffffff) maximize the luminance benefit but can introduce halation — a perception of light "bleeding" into surrounding dark text, especially noticeable for users with astigmatism. The warm off-white background of MorningHue (#F1EDE5) retains enough luminance to drive pupil constriction while reducing the harshness that makes extended reading on pure-white screens uncomfortable.
The research does not support positive polarity as universally superior. Dark themes are a legitimate choice in several contexts:
There is also no peer-reviewed research specifically on dark vs light themes for code reading. Any claim that one polarity is objectively better for programming goes beyond the available evidence.
Clone into your VS Code extensions directory:
Then restart VS Code, open the Command Palette (Ctrl+Shift+P), type Preferences: Color Theme, and select MorningHue.
Add to ~/.vimrc:
morninghue.itermcolorsoh-my-zsh:
Set ZSH_THEME="morninghue" in ~/.zshrc.
Standalone:
The prompt uses ANSI palette colors — combine with the iTerm2 preset so the prompt accents automatically match the theme's exact hues.
ANSI palette slots color7 and color15 are remapped to dark values so TUI tools like GitHub Copilot CLI render text visibly on the light background. Several bright slots are also semantically remapped — see the ANSI palette table.
Add to ~/.tmux.conf:
Add to your shell rc file: