One vivid coral spark in a sea of warm graphite.
embertheme.com · Palette · Philosophy · Ports · palette.json
Most themes give you a rainbow. Ember gives you restraint.
The background is warm graphite (#1c1b19). Text is ivory (#d8d0c0). Every accent — olive greens, steel blues, dusty mauves — stays desaturated and quiet. Then coral (#e08060) lights up keywords, the cursor, the modeline bar, and search highlights.
One ember in the ash.
Eight muted accents sit in a narrow CIELAB L*52–58 band, balanced to equal perceptual brightness. Then one vivid coral at S55% cuts through like a match struck in the dark. Your eyes know exactly where to look. Everything else recedes. Your code breathes.
| Metric | Value |
|---|---|
| Contrast ratio | 11.2:1 (body text) |
| Accessibility | WCAG AA |
| Variants | 3 (dark, soft, light) |
| Hue spread | Narrow (~90°), all warm |
| Saturation | Ultra-muted except coral hero |
Ember is hand-tuned in CIELAB perceptual color space — not generated from an HSL palette picker. CIELAB models how humans actually see color: if two colors differ by the same numeric amount in Lab, they look equally different. RGB and HSL don't have this property, which is why many themes have accents that unintentionally shout over others.
Perceptual balance. All eight accents are normalized to a flat L*52–58 lightness band. No single color screams louder than the rest. The "squint test" holds: blur your eyes and every accent recedes equally — except coral.
Monochrome hero strategy. Where themes like Gruvbox give you seven vivid accents at similar saturation, Ember inverts the approach: seven muted earth tones plus one vivid coral (S67%). This creates a natural focal hierarchy — your eye goes straight to what matters.
Warm graphite, not brown. Ember lives close to Gruvbox's territory but at dramatically lower saturation. Background saturation stays at S6% — enough to feel warm, low enough to stay out of the way. The background is the ash, not the ember.
Built for long sessions. Body text sits at 11.2:1 contrast, well above WCAG AAA. Accents are tuned for WCAG AA. Foreground is warm ivory, never pure white — readable without eye strain over long sessions. Foreground is warm ivory, never pure white.
| Gruvbox | Ember | |
|---|---|---|
| Character | Retro, warm, vivid | Warm, minimal, focused |
| Hero accent | None (even saturation) | Coral (monochrome hero) |
| Accent count | 7 (all vivid) | 8 (1 vivid, 7 muted) |
| BG saturation | ~15% | ~6% |
| Variant | Background | Description |
|---|---|---|
| Ember | #1c1b19 |
Dark graphite, L10% — the default |
| Ember Soft | #242320 |
Lifted graphite, L13% — softer contrast |
| Ember Light | #e6dac4 |
Warm ivory, L84% — darkened accents for contrast |
Ember Light — warm parchment, not clinical white.
The full palette definition (all variants, hex/HSL) is available as palette.json — the single source of truth for all ports.
| Port | Repository | Status |
|---|---|---|
| Emacs (Doom) | ember-theme/emacs | ✅ Available |
| Neovim | ember-theme/nvim | ✅ Available |
| Ghostty | ember-theme/ghostty | ✅ Available |
| VS Code | ember-theme/vscode | ✅ Available |
| Alacritty | ember-theme/alacritty | ✅ Available |
| Kitty | ember-theme/kitty | ✅ Available |
| Port | Repository |
|---|---|
| Zed | ember-theme/zed |
| iTerm2 | ember-theme/iterm |
| WezTerm | ember-theme/wezterm |
| IntelliJ | ember-theme/intellij |
Want to build a port? Use palette.json as your source of truth and open an issue.
MIT — Hossam Saraya
