Color, measured for tired eyes.
A family of light schemes for terminals and editors, plus dark companions, tuned so you can read code all day — without the glare of pure white or the harshness of pure black.
Supports iTerm2, Alacritty, Kitty, WezTerm, Windows Terminal, Ghostty, Warp, VS Code, JetBrains IDEs, Zed, Obsidian, Sublime Text, Neovim, Vim, Emacs, Xcode, Helix, and Slack.
Install from the VS Code Marketplace, Open VSX (VSCodium, Cursor, Windsurf), JetBrains Marketplace, or Sublime Package Control. Preview on VS Code Themes.
ink : paper ≥ 7:1 (AAA) · every token ≥ 4.5:1 (AA)
never #ffffff · never #000000
// billing.tstype Invoice = { id: string; cents: number }function totalDue(invoices: Invoice[]): number {return invoices.filter((i) => i.cents > 0).reduce((sum, i) => sum + i.cetns, 0) // no 'cetns'}const unused = totalDue([]) // warning: never read
open in the gallery — Sepia Paper · warm
Why most light themes hurt
They're too bright and too saturated. Candela is for people who like dark mode but can't use it comfortably — prescription lenses, astigmatism, glare sensitivity, plain eye strain. A few hard rules fix both:
Every rule is explained, with sources, in the vision research.
- Soft paper, never pure white. Off-white backgrounds kill the glare.
- Dark-gray ink, never pure black. AAA contrast without the harshness.
- Desaturated accents. Saturated text is what makes astigmatic eyes see colored fringes.
- Blue and orange carry the meaning. They stay distinct for almost every kind of color blindness.
- Same colors, same meaning, every theme. Switching never makes you relearn the screen.
Light and dark pairs
Designed as a set, so moving between day and night keeps every color in the same role.
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
Standalone themes
Complete in one mode. A palette does not need a twin to be finished — most of these were never meant to have one.
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
def total(cents) = cents / 100.0
Every palette is authored in one JSON source. Fork one or build your own in the Theme Editor, download a ready-made archive from the latest release, or read the install guide on GitHub.