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.
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;
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.
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.
| Variant | Background | Worst text contrast | WCAG AA |
|---|---|---|---|
| Violeeter Dark | #24203F | 4.53 | pass |
| Violeeter Light | #FAF8FE | 4.84 | pass |
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.
Every file is generated from one source, so the green in your editor is the green in your terminal.
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
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.
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.
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] 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.