a CLI, not an extension
Peacock colors one workspace.
hue-shift colors
all of them.
Point it at a folder. Every project inside gets its own window colour,
written straight into .vscode/settings.json.
npx hue-shift-cli --random
Package is hue-shift-cli; the command it installs is hue-shift.
Every project at once
Eighteen projects, eighteen hues, one pass. Each bar is the colour VS Code paints that window's title bar. Click one to load it into the preview above.
The number next to each hex is the contrast ratio between the bar and its text. Black or white is picked automatically, so it never drops below 4.5:1 — the WCAG AA minimum for readable text.
The gap
Everything else is an extension, so it can only colour the window you are already looking at.
| Peacock | Project Colors | Multi-Workspace | hue-shift | |
|---|---|---|---|---|
| Runs from the terminal | ✗ | ✗ | ✗ | ✓ |
npx, nothing to install | ✗ | ✗ | ✗ | ✓ |
| Colour all projects at once | ✗ | ✗ | ✗ | ✓ |
Detect drift (--check) | ✗ | ✗ | ✗ | ✓ |
| Contrast validation | ✗ | ✗ | ✗ | ✓ |
| Colour + theme + icons | ✗ | ✗ | theme only | ✓ |
| Stable palette when folders change | ✗ | ✗ | ✗ | ✓ |
| Zero runtime dependencies | ✗ | ✗ | ✗ | ✓ |
| macOS · Linux · Windows | ✓ | ✓ | ✓ | ✓ |
Commands
Colour one project
cd ~/code/my-app
npx hue-shift-cli --random
Colour everything under a folder, reproducibly; later runs only colour new folders
npx hue-shift-cli --root ~/projects --random --seed 42
Preview without writing
npx hue-shift-cli --root ~/projects --random --dry
Specific colour, title bar only
npx hue-shift-cli . --color amber --parts title
Colour plus a full theme
npx hue-shift-cli . --color teal --theme "Default Dark Modern" --icons Seti
Catch a project whose colours drifted
npx hue-shift-cli --root ~/projects --check
Put settings.json back as it was
npx hue-shift-cli --root ~/projects --restore
Every flag, every combination, and a command builder: full CLI reference →
Your settings.json is safe
- Merged, not replaced. Colour keys hue-shift does not own are preserved.
- Comments survive. JSONC
//and/* */outside the colour block are untouched. - BOM and CRLF survive. Windows line endings stay Windows line endings.
- Peacock stays in sync. If
peacock.colorexists, it is updated to match. --resetis exact. It removes only the keys hue-shift wrote.--restoreis exact. The first apply saves the original file; restore puts it back byte for byte.
What it can't do
A CLI is not an extension. These need the VS Code API at runtime:
- a status-bar colour chip
- Live Share host & guest colours
- “surprise me on startup”
- command palette entries
Run Peacock alongside if you want them. Both write the same keys, so they don't fight.