DEV Community

J Now
J Now

Posted on

Built a Terminal Theme Around One Specific Blue From 1960

Yves Klein registered International Klein Blue as a pigment in 1960 — a binder formula that lets ultramarine hold its full saturation without going flat on canvas. The depth it produces reads less like a color than like an absence. That quality is the entire design rationale for this project.

The reading problem it's solving: spending hours a day inside Claude Code means spending hours reading prose — tool output, reasoning traces, permission prompts, multi-paragraph explanations. The terminal themes I had were tuned for token differentiation in syntax trees. Wrong job.

Klein Void ships as four macOS Terminal.app .terminal profiles, built with a variation-aware Objective-C builder and installed via install.sh (rollback via restore.sh). Contrast verification uses APCA's Lc metric with per-role minimums: body text at Lc 90, subtle roles at 75, muted at 45, accents at 60.

Pure IKB (the hex I'm not writing here because validators eat color codes as hashtags) fails as readable text on dark ground — Lc -12, effectively invisible. So it's split across two ANSI slots: ansi:blue gets pure IKB for decorative borders and highlights where legibility isn't required, and ansi:blueBright gets a lifted Klein-family blue, APCA-cleared for permission-prompt text.

The four variants differ mainly on one slot: ansi:redBright, which Claude Code routes its claude-sand brand color through. Klein Void Sand & Sea accepts that as a second hero alongside IKB. Klein Void Refined and Gallery suppress it; Klein Void Prot verifies every accent slot against strict APCA gates — the only variant where all accents pass.

Font options: CommitMono-Regular on V1 and V3, IBM Plex Mono on V2 and V4, both installed to ~/Library/Fonts/.

One non-obvious requirement: Claude Code must be set to dark-ansi via its /theme picker. On any other setting it ignores the Terminal.app ANSI palette and renders its own hardcoded RGB values. The theme does nothing until that's switched.

https://github.com/robertnowell/klein-void

Top comments (0)