README.md
August 3, 2026 · View on GitHub
Dancheong
Color themes drawn from dancheong (단청) — the mineral pigment palette
Korean artisans have painted on temple and palace woodwork for 1,500 years.
Deep indigo beams, cinnabar red, ochre gold, verdigris green — tuned for code.
Four variants
| Theme | Mood | Body text contrast |
|---|---|---|
| Dancheong Night | The flagship dark — indigo beams at dusk | 12.7 : 1 |
| Dancheong Dawn | Light — warm hanji paper, ink, and pigment | 9.6 : 1 |
| Dancheong Storm | High contrast dark — every accent ≥ 7.5 : 1 | 14.6 : 1 |
| Dancheong Mist | Muted dark — desaturated, for long sessions | 8.5 : 1 |
Night

Dawn

Storm

Mist

Why another theme?
Most themes are tuned by eye. Dancheong is tuned by a build pipeline: every text color is checked against every background it ships on — editor, sidebar, inputs, terminal, the selection highlight, buttons and badges, even the syntax colors inside the autocomplete popup — 177 distinct pairs per build — and the build fails if any pair misses its gate: 7:1 body text; 4.5:1 for UI text, comments, syntax accents, and text on colored surfaces; 3:1 for text on selection, ANSI colors, diagnostics, and icons. Three documented exemptions: decorative ink (whitespace markers, indent guides) is intentionally quiet, the light variant keeps ANSI white light per terminal convention, and inactive UI states (unfocused tabs, git-ignored files) are held to 3:1 rather than 4.5:1 — WCAG 1.4.3 exempts inactive components, but we refuse to let them go lower than that.
The gate decides design questions, not just failures. Inlay hints ship with a transparent background because a tinted one measured 3.1–3.5:1; on the editor background they read at 4.6:1. Deprecated symbols are struck through instead of dimmed, because a strikethrough costs no contrast and a dimmer color does.
417 workbench keys and 37 semantic token rules per variant. Semantic
highlighting means the language server's answer wins over a regex guess — a
readonly binding colors as a constant, a parameter reads differently from a
local, and Foo in type position differs from Foo in value position.
The palette is one JSON file; every port is generated from it, so all apps
match exactly.
Colors aren't decoration here. Contrast is why your eyes last through a six-hour session.
Install
VS Code: search Dancheong in the Extensions panel, or
ext install dancheong.dancheong-theme — then ⌘K ⌘T and pick a variant.
(Marketplace page)
Cursor / Windsurf / VSCodium: same — search Dancheong in Extensions.
These editors install from Open VSX,
where Dancheong is also published.
Neovim: also free, in its own repository — art220/dancheong.nvim. Same four variants, 376 highlight groups each, Tree-sitter captures and LSP semantic tokens, a lualine theme per variant, MIT licensed.
iTerm2 / Alacritty: free ports live in extras/ —
import the .itermcolors file, or drop the .toml into your Alacritty config.
Dancheong PRO
The editors are free. PRO is the rest of the desk — the tools you keep open next to the editor, in the same pigments:
- 9 more apps: JetBrains IDEs, Sublime Text, Obsidian, Kitty, Ghostty, Windows Terminal, Warp, tmux, Zed — 13 in total counting the free ports
- Not thin ports. The JetBrains scheme sets 156 attributes of its own rather than inheriting Darcula for the console, diffs and debugger
- All four variants everywhere, byte-identical colors
- Lifetime updates — new apps and variants included
Get Dancheong PRO on Gumroad →
The five colors
Obangsaek (오방색) — the five cardinal colors of Korean cosmology — anchor the palette: blue (east), red (south), yellow (center), white (west), black (north). Dancheong pigments were ground from minerals, which is why they read muted yet vivid: real rocks, not neon. This theme keeps that quality — saturated enough to separate tokens, calm enough to live in.
License
MIT — the free themes in this repo are yours to use and modify.