User TintGive each workspace a distinct title bar (and optionally the activity bar) so you can spot the right window at a glance. Your matching rules live in user settings, so they travel with you (Settings Sync) and do not have to be committed to the project. Works in Visual Studio Code and Cursor.
Why this exists (and what makes it different)The problem: On team or client repos, On top of that, I run many folders and workspaces at once: same-looking chrome everywhere made me ask which window is this? before clicking or pasting in the wrong place. I wanted a simple, glanceable signal tied to where I am, not a whole new theme. What User Tint does differently:
About “other extensions”: Not every extension touches Features
InstallFrom the Marketplace: search for User Tint in the Extensions view and install. From a VSIX (local build or release artifact):
Then: Extensions → … → Install from VSIX… and choose Or via CLI:
Quick start
Other ways to configure
How it works (and one limitation)The editor only applies colors through
To avoid committing tint colors, open the project through a user-local Example
|
match |
Compares pattern to |
|---|---|
basename |
First workspace folder’s directory name |
pathPrefix |
Normalized path of that folder (prefix match) |
pathContains |
Substring of that folder path |
workspaceFilePath |
Full normalized path of the .code-workspace file |
workspaceFileBasename |
Filename of the workspace file (e.g. foo.code-workspace) |
Identity order: If a workspace file is open, that path is used for hashing and for workspaceFile* rules; folder rules still use the first root folder.
Keeping color writes out of the repo
Opening ~/code/my-app as a folder usually stores workspace settings in my-app/.vscode/settings.json, which git may track.
Pattern that avoids repo changes: create a .code-workspace file outside the clone, for example under your editor user directory:
{
"folders": [{ "path": "/absolute/path/to/my-app" }],
"settings": {}
}
Open that workspace file in the editor. User Tint can persist workbench.colorCustomizations in that file instead of inside the project folder.
Optional team overrides (in the repo)
- Set User Tint › Allow Workspace Override to
truein user settings. - Commit workspace settings with
userTint.workspaceColors(same keys as rulecolors:titleBarActiveBackground, etc.).
Overrides merge on top of your user rules for that workspace.
Commands
| Command | Action |
|---|---|
| User Tint: Set color for this workspace… | Choose match type and hex; adds a user rule and applies |
| User Tint: Apply theme | Re-resolve rules and write workspace colors |
| User Tint: Reset workspace tint | Remove this extension’s title/activity keys; restore prior when possible |
Development
npm install
npm run compile # or npm run watch
npm test # Vitest (resolution logic)
Run the extension: open this repo in VS Code or Cursor → Run and Debug → Run Extension (F5).
Publishing
Targets the Visual Studio Marketplace (VS Code, Cursor, and compatible editors). Official guide: Publishing extensions.
One-time: Create a publisher, create an Azure DevOps Personal Access Token with Marketplace → Manage, then:
npx @vscode/vsce login <your-publisher-id>
Each release: Bump "version" in package.json, ensure "publisher" matches your marketplace id, then:
npm test
npm run compile
npx @vscode/vsce publish --no-dependencies
Package only (no upload): npx @vscode/vsce package --no-dependencies produces user-tint-<version>.vsix.
README screenshots live under media/ so they ship in the VSIX and resolve on the marketplace listing.
Common issues: 403 / unauthorized → PAT scope or publisher mismatch. Duplicate version → bump package.json. License: this repo includes LICENSE (MIT); vsce includes it in the package.
Open VSX (VSCodium, some mirrors) is a separate registry; see Open VSX publishing.
Privacy
Rules and preferences are normal VS Code user and workspace settings, plus extension workspace state (a snapshot of previous colors for reset). No data is sent to external servers.
Upgrading from older local builds
If you previously used a VSIX named project-chrome, uninstall it and install User Tint. Settings moved from projectChrome.* to userTint.*; copy rules over manually if needed.



