A violet theme for everything.

Dark and light, for your editor and your terminal. Every colour that can carry text is verified against WCAG AA: measured, not guessed, and the build fails if one drops below.

MIT Dark + Light 11 ports AA verified Worn byVioleet →
session.rs
 1 /// What a session wrote, and by how much.
 2 pub struct FileChange {
 3     pub path: String,
 4     pub added: u64,
 5     pub created: bool,
 6 }
 7 
 8 impl FileChange {
 9     fn summarise(&self, limit: usize) -> String {
10         let label = if self.created { "new" } else { "edited" };
11         let shown = self.added.min(limit as u64);
12         // Measured, never estimated: the agent wrote the diff.
13         format!("{} +{}", label, shown)
14     }
15 }
16 
17 const TRUNCATE_AT: usize = 200;
18 const PARTIAL: bool = true;

The palette

Sixteen ANSI slots plus foreground, background and cursor. The dark variant sits on #24203F; the light one is not that flipped, it is each colour re-picked at a luminance that reads on a pale ground.

Violeeter Dark
Violeeter Light

Contrast, measured

Most themes assert readability. This one measures it: every colour that can carry text is checked against its own background, and python3 build.py --check fails the build if one drops under 4.5:1.

VariantBackgroundWorst text contrastWCAG AA
Violeeter Dark#24203F4.53pass
Violeeter Light#FAF8FE4.84pass

Nothing is exempt, and two colours were changed to keep it that way. white and brightWhite in the light variant used to be, on the reasoning that they mean "the palest thing here" and so are surfaces. That is right about the name and wrong about the use: colour 7 is the default foreground of a large share of terminal programs. Under btop they measured 1.61:1 and the memory labels were not dim, they were absent.

Install

Every file is generated from one source, so the green in your editor is the green in your terminal.

VS Code: install it from the Marketplace
Both variants, no file to copy. Search for “Violeeter” in the Extensions view, or open the listing.
Open the listing

Or take the whole set

Copying from above needs nothing installed. This is for when you want all of them at once.

git clone https://github.com/grippado/violeeter
cd violeeter/dist

Where it came from

Violeeter was not designed on a colour wheel. It is the palette Violeet wears, a macOS terminal for running several coding agents at once, and it was tuned over months of being stared at for eight hours a day. That is the only reason its greys are legible and its blue is where it is: both were wrong first, in use.

violeet · sessions
refactor the transcript reader waiting for you
~/www/personal/violeet
ctx ████████░░░░░░░░ 38% · 375k/1.0M
Edit crates/violeet-transcript/src/lib.rs
files panel working
~/www/personal/violeet
ctx ███░░░░░░░░░░░░░ 14% · 140k/1.0M
Bash swift test

Both pages you can reach from here are painted with this theme, and the terminal above ships with it built in. If a colour were wrong, it would be wrong in the thing its author uses all day, which is the only test of a theme that cannot be faked.

Violeet →

Porting it somewhere else

A port is a function in build.py that takes the palette and returns a string. Nothing is written by hand, and no port re-picks a colour. Editor ports also get syntax, the mapping from semantic role to palette slot, which is why a string is the same green everywhere.

def my_editor(v, syntax):
    return f"background = {v['background']}"

Add it to EXPORTS, run python3 build.py, open a pull request.

the wider constellation

[GLabs] [GLabs]

Held by [GLabs].

[GLabs] is the umbrella that ties the family together. This page is the visual language it speaks, and these are the two projects that wear it.