---
title: "Verdant Ledger Light — a calm light theme for VS Code"
description: "A low-glare Visual Studio Code theme in deep evergreen, forest green and ochre, with every color checked for contrast."
url: "https://nelvaron.github.io/vscode-verdant-ledger/"
version: "1.0.0"
license: "MIT"
---

# Calm color for long days in code.

Visual Studio Code theme · Light · Free

Verdant Ledger Light is a low-glare theme in deep evergreen, forest green and ochre. Color is kept for meaning, and every pair is checked for contrast.

- [Install from Marketplace](https://marketplace.visualstudio.com/items?itemName=nelvaron.verdant-ledger-light)
- [Open VSX](https://open-vsx.org/extension/nelvaron/verdant-ledger-light)
- [Download VSIX](https://github.com/nelvaron/vscode-verdant-ledger/releases/latest)

Version 1.0.0 · MIT license · VS Code 1.80+, VSCodium, Cursor, Windsurf

Code samples, highlighted with the theme file at build time, so every sample matches the current release:

TypeScript: `examples/showcase.ts`, lines 14–32

```ts
export class CommandRegistry {
  private readonly commands = new Map<string, Command>();
  private recent: string[] = [];

  register(command: Command): this {
    if (this.commands.has(command.id)) {
      throw new Error(`Command already registered: ${command.id}`);
    }
    this.commands.set(command.id, command);
    return this;
  }

  async execute(id: string, ...args: unknown[]): Promise<void> {
    const command = this.commands.get(id);
    if (!command) throw new RangeError(`Unknown command: ${id}`);
    this.recent = [id, ...this.recent.filter((r) => r !== id)].slice(0, MAX_RECENT);
    await command.run(...args);
  }
}
```

Python: `examples/preview.py`

```python
from dataclasses import dataclass


@dataclass
class Palette:
    accent: str = "#2d6a3b"
    surface: str = "#eef2ef"

    def label(self) -> str:
        return describe(self.accent)


def describe(color: str, label: str = "accent") -> str:
    """Return a readable color label."""
    if not color.startswith("#"):
        raise ValueError("Expected a hex color")
    return f"{label}: {color}"


print(describe(Palette().accent))
```

CSS: `examples/preview.css`

```css
:root {
  --forest: #2d6a3b;
  --surface: #eef2ef;
}

.preview-card:hover {
  color: var(--forest);
  padding: 1.25rem;
  border: 1px solid #cfd6d2;
}

@media (prefers-color-scheme: light) {
  body { background: var(--surface); }
}
```

Markdown: `examples/preview.md`

````markdown
# Calm, readable code

Comments should recede; **important text** should remain clear.

Use `theme.preview()` for an inline-code sample, or visit [the guide](https://code.visualstudio.com/).

> Soft green surfaces keep the editor easy on the eyes.

```js
const accent = "#2d6a3b";
```
````

## The theme in figures

- **4.5:1**: minimum contrast for every syntax color on the editor and the current line
- **430**: workbench colors set, so no default blue shows through
- **2,376**: automated checks on every change: contrast, palette, known keys
- **16**: terminal colors, each one distinct and readable

## The whole workbench, in one quiet register.

![VS Code with Verdant Ledger Light: the Explorer and a TypeScript command registry with slate blue types, green strings and ochre keywords](https://nelvaron.github.io/vscode-verdant-ledger/_astro/screenshot-typescript.BipfdxDl_Kzh2L.webp)

## Features

### Calm by design

Most code stays deep evergreen. Ochre marks keywords, forest green marks strings, slate blue marks types. Nothing else competes.

### Readable for everyone

WCAG AA text, 3:1 borders and icons, and an error red that stays apart from warnings with red-green color blindness.

### Complete

Diff and merge views, debugging, testing, notebooks, the Source Control graph, chat and the terminal all share the palette.

### Semantic, not just syntax

Declarations are bold, deprecated symbols are struck through, and `this` and `self` stand out.

## An error should never look like a warning.

Accessibility, measured

With deuteranopia, red and ochre drift toward the same olive. Verdant Ledger’s red is darker than its ochre, so the difference survives as lightness.

The page shows two squiggly underlines. With typical vision the error is `#8a2621` and the warning `#8a6408`. With simulated deuteranopia they become `#5c521d` and `#7c6e0f`: close in hue, still apart in lightness.

[See the contrast of every color](https://nelvaron.github.io/vscode-verdant-ledger/palette.md)

## Fourteen colors, each with a job.

- Deep evergreen: `#1b2320`
- Forest green: `#2d6a3b`
- Accessible ochre: `#8a6408`
- Slate blue: `#3d5f7a`
- Muted teal: `#2f6b6b`
- Plum: `#7a4a6e`
- Deep brick red: `#8a2621`
- Pale surface: `#eef2ef`

[Open the palette ledger](https://nelvaron.github.io/vscode-verdant-ledger/palette.md)

## Install in under a minute.

1. **Open Extensions.** Press Ctrl+Shift+X (Cmd+Shift+X on macOS).
2. **Search and install.** Search for *Verdant Ledger Light*, or run `ext install nelvaron.verdant-ledger-light` in Quick Open.
3. **Choose the theme.** Run *Preferences: Color Theme* and pick Verdant Ledger Light.

- [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=nelvaron.verdant-ledger-light)
- [Open VSX](https://open-vsx.org/extension/nelvaron/verdant-ledger-light)
- [VSIX from GitHub](https://github.com/nelvaron/vscode-verdant-ledger/releases/latest)

---

Verdant Ledger Light 1.0.0 · [MIT license](https://github.com/nelvaron/vscode-verdant-ledger/blob/main/LICENSE) · © 2026 nelvaron · [Source](https://github.com/nelvaron/vscode-verdant-ledger) · [Design notes](https://raw.githubusercontent.com/nelvaron/vscode-verdant-ledger/main/DESIGN.md) · [Report an issue](https://github.com/nelvaron/vscode-verdant-ledger/issues)
