VS Code colour theme
A lagoon is the one place where water reads as two colours at once: luminous teal across the shallows, deep indigo where the floor drops away. That is the whole palette — monochromatic indigo chrome, one glowing teal accent, and pastel syntax that never raises its voice.
Install from the Marketplace · github.com/ceharsh24/lagoon
How it was built
The ten most-installed dark themes on the marketplace agree on more than they let on.
One Dark Pro sits at #282c34, Dracula at #282a36, Tokyo Night at
#1a1b26, Catppuccin at #1e1e2e, Nord at #2e3440.
Every one of them is a desaturated blue between 205° and 240°. Not one uses neutral grey,
and not one uses black.
They agree on the syntax map too: green strings, orange numbers, purple keywords, yellow types, blue functions. And the ones still climbing the charts — Catppuccin, Tokyo Night — are the pastel ones. Restraint is what people actually mean when they call a theme easy on the eyes.
Lagoon keeps all of that and changes one thing. Functions and every piece of UI accent are teal instead of blue, which sits split-complementary to the indigo ground — the pairing the ground was chosen for. Functions are the accent you see most often, so that single substitution is what the theme feels like.
Accents
Ratios are measured against the editor background. The build refuses to emit a theme if any accent drops below 4.5:1, or if any two accents land closer than ΔE 22 — close enough that two different roles would start to look like the same colour.
Chrome
Every panel, border, and background in the editor is hue 243 — an indigo with a faint plum lean. Saturation falls as lightness rises, so the light end of the ramp reads as text rather than as tinted text. Depth comes from value alone, which is why the UI has almost no visible borders.
Variants
Soft lifts the ramp about five points of lightness for bright rooms and drops the accents to match. Dawn keeps the identical hues and inverts the value ramp — on a light ground the accents have to go dark and saturated, or pastels wash out to nothing.
Role map
Semantic tokens and TextMate scopes are both mapped, and mapped to agree with each other — so the colour of an identifier does not change when a language server wakes up.
| Token | Colour | Dark | Dawn |
|---|---|---|---|
| Functions, methods, decorators, every UI accent | teal | #67e0cc | #187770 |
| Properties, object keys, tag attributes | sky | #82c4f3 | #136eae |
| Keywords, control flow, storage modifiers | lavender | #b49df0 | #5d36c9 |
| Imports, language constants, regex, CSS variables | orchid | #e891c8 | #a92d7c |
| Errors, invalid, this / self, HTML tags | rose | #f08496 | #c32243 |
| Numbers, constants, enum members, escapes | apricot | #f6ab79 | #b85014 |
| Types, classes, interfaces, namespaces | amber | #f2d178 | #99670f |
| Strings | green | #89d193 | #297a39 |
| Comments | muted, italic | #817cab | #6d6996 |
| Punctuation, operators, parameters | subtle | #9d9bbf | #575676 |
| Plain identifiers | text | #d4d4e8 | #2a2a47 |
Install
⇧⌘X (Ctrl+Shift+X on Windows and
Linux) and search Lagoon. It is listed as
Lagoon Color Theme, published by Lagoon. From a terminal
instead:
code --install-extension lagoon.lagoon-color-theme
⌘K ⌘T (Ctrl+K Ctrl+T).Prefer to build it yourself? Grab the .vsix from the
latest release, or clone the repo
straight into ~/.vscode/extensions/lagoon — no packaging step required.
Shipping a light variant is only useful if you never have to think about it. Point VS Code at both and it will move between them when your OS does — Lagoon after dark, Dawn in daylight.
{
"window.autoDetectColorScheme": true,
"workbench.preferredDarkColorTheme": "Lagoon",
"workbench.preferredLightColorTheme": "Lagoon Dawn"
}
To pin one instead, set it outright — this is what the theme picker writes for you:
{ "workbench.colorTheme": "Lagoon" }
Comments, control flow, parameters, and decorators are italic by design — it separates them from the tokens around them without spending another colour. If your font lacks a true italic, or you simply dislike them, override the styles rather than the theme:
{
"editor.tokenColorCustomizations": {
"[Lagoon]": {
"textMateRules": [
{
"scope": ["comment", "keyword.control.flow", "variable.parameter"],
"settings": { "fontStyle": "" }
}
]
}
}
}
For a one-off tweak, scope it to the variant so your other themes are left alone:
{
"workbench.colorCustomizations": {
"[Lagoon]": { "editor.background": "#12111d" }
}
}
To change the palette itself, edit the HSL values in
src/palette.js and rebuild. The JSON in themes/ is build output —
editing it directly gets overwritten, and skips the contrast gate.
npm run build # regenerate the three variants, the icon, and this page