Grimley SpectrumGrimley Spectrum v0.5.1 combines a Midnight Violet VS Code interface with distinct language palettes and an offline Color Studio. The extension keeps the original InstallRequires VS Code desktop 1.85 or later. Install the local VSIX, then choose Preferences: Color Theme → Grimley Spectrum Dark:
To build from source (Node.js 22 or later):
Build dependencies require network access on first installation; the installed extension works offline. Packaging never publishes the extension. Color StudioRun Grimley Spectrum: Open Color Studio from the Command Palette. Select a language, then edit its hexadecimal RGB fields ( The compact Midnight Violet layout places configuration beside a sticky preview on wide panels. Categories and code scroll independently; narrow panels use natural vertical scrolling. Search filters category names without changing draft colors, including hidden edits. The preview toolbar can wrap long lines. Category descriptions and preset defaults are available to assistive technology and through label tooltips. The sample and color legend update immediately. The preview uses a small approximate lexical highlighter, not VS Code's TextMate grammars or semantic engine. Some examples, especially HTML and CSS, illustrate only a subset of categories; the legend displays every configurable color. Use Open Sample in Editor to open the selected language’s bundled sample beside Studio and inspect the authoritative highlighting. React, SCSS, Less and JSONC selections share the existing base-language sample; the file’s native language mode applies.
The primary action is Apply to Editor, followed by Save Preferences. Undo, Redo and Discard Changes remain directly accessible. The native Advanced actions disclosure groups Export/Import above destructive resets and removal. Destructive draft replacement uses confirmation dialogs. Undo/Redo retain up to 100 draft snapshots across language switches. Repeated valid input events coalesce until focus leaves that input. Category resets, language resets, all-default resets, presets and import previews are undoable. New edits clear Redo. Save and Apply do not clear history or become undoable settings operations. Discard clears history and reloads saved preferences. Switching Syntax Colors / VS Code UI preserves the complete draft. Webview state can restore a validated draft when VS Code retains the panel; a new panel loads saved preferences. History starts fresh on panel restoration. Save before closing a panel. Use Tab/Shift+Tab to navigate labels, controls and focusable scroll regions; Enter/Space opens Advanced actions and activates buttons. Undo uses Ctrl+Z (Cmd+Z on macOS); Redo uses Ctrl+Shift+Z/Cmd+Shift+Z or Ctrl+Y. These shortcuts operate only inside the webview, and focused text/color inputs retain native editing shortcuts. Undo/Redo buttons are available while editing inputs. Focus rings, input validation announcements and live status text support keyboard and assistive technology workflows. Reduced-motion preferences are respected. The header independently reports Saved / Unsaved Changes and Applied / Not Applied. Applying, Conflict Detected and Error describe in-progress or failed operations. Saving never means applied; applying never means saved. Reopening verifies owned settings against the persisted receipt. External changes reverify ownership: unrelated changes retain Applied; modified managed rules produce Conflict Detected. Detailed notices appear below the actions. Applied means the draft matches verified global managed rules; workspace overrides, other selectors and the active theme can still affect actual rendering. Apply warns about workspace customization settings. UI StudioColor Studio has two compact navigation buttons: Syntax Colors and VS Code UI. The existing command VS Code UI offers 89 documented color identifiers in nine searchable, collapsible groups: Editor, Sidebar and Explorer, Activity Bar, Tabs, Status Bar, Terminal (including 16 ANSI colors), IntelliSense, Panels and Menus, and Search and Diagnostics. Each entry has a labeled native picker, an RGB/RGBA hex field ( The lightweight HTML/CSS workbench simulation includes activity icons, an Explorer file tree, tabs, an editor, selection/cursor, suggestions, a terminal and status bar. Representative surfaces respond immediately to draft edits. It is an illustrative simulation, not the actual workbench; menus, diagnostics, debug/warning states and every ANSI color are not all rendered simultaneously. No Monaco, remote assets or frontend framework is used. Choose Midnight Violet, Deep Ocean or Obsidian to preview a coherent UI mapping after confirmation. Presets and group resets affect UI drafts only; syntax presets and resets affect syntax drafts only. Reset UI to Preset restores the selected preset, while Use Theme Defaults clears draft overrides. These changes enter the shared bounded Undo/Redo history and require explicit Apply and Save. UI Apply safely merges into global User Remove Applied UI Colors removes only values that still match the extension's ownership receipt. It does not remove syntax rules or saved preferences. Removal refuses to delete externally changed values. Release UI Ownership leaves settings untouched and stops managing them. A subsequent explicit Apply can replace these retained values through the overwrite workflow below. UI writes maintain a separate recovery journal for settings and ownership receipts. Failed operations attempt conditional rollback; failed rollback retains the journal. Reopening a new Studio panel attempts recovery only when current settings equal the recorded before or after object. Later edits remain untouched and pending operations block new Apply/removal. These multi-step operations are best effort, not atomic; VS Code has no compare-and-swap API and simultaneous manual edits can still race. Complete exports use schemaVersion 2, preserving the original UI limitations and verificationThe public API exposes configured settings, not fully resolved effective theme colors. Studio does not claim to resolve theme inheritance, wildcard theme overrides, workspace overrides or all platform-specific rendering. Known global values and bundled defaults inform the simulation; unknown defaults are labeled. Native menus/window chrome, icon shapes, layout and font choices are outside this color editor; some identifiers affect only particular states or VS Code versions. The official VS Code theme color reference describes identifier scope and platform limitations. The extension remains compatible with VS Code 1.85; newer optional rendering behavior is not required. Automated tests cover UI validation, presets, schema migration/round trips, preview resolution, shared history/resets, syntax/UI isolation, theme-scoped merges, external conflicts, workspace warnings, write/state failures, rollback failure and interrupted recovery. These tests use pure state operations and a mocked configuration API. Manual VS Code verification remains necessary for visual layout at different panel sizes, keyboard/screen-reader behavior, native color pickers, real settings precedence, and Extension Development Host rendering. Replacing existing colors and restoring settingsClicking Apply to Editor authorizes replacement of the requested colors, including previous user preferences and manually changed managed colors. Existing unrelated colors, other theme blocks, unrelated syntax rules and settings remain intact. There is no need to clean settings.json manually. Syntax Apply submits the complete language palette; UI Apply submits the UI draft. Draft resets, previews, Save and import do not write editor settings.
Use Advanced actions → Restore Previous UI Settings or Restore Previous Syntax Settings to restore the most recent successful settings-changing operation in that section. Snapshots persist locally in extension globalState and record affected setting paths, previous/applied values, Global configuration scope, Restoration verifies every affected value before writing and merges previous values into current settings, preserving later edits to unrelated object properties and other themes. If an affected value changed externally, restoration reports a conflict and makes no changes. TextMate arrays are guarded as a whole because ordering affects highlighting: any later edit to that array blocks automatic restoration, including adding an unrelated rule. Preserve/export your current settings and reconcile that array manually in that case. Snapshots do not capture workspace settings, theme defaults, settings from other profiles/machines or every historical preference. Removing applied colors deletes managed overrides; use Restore to recover the preferences replaced by the latest Apply. All writes use the official VS Code configuration API at Global/User scope. Workspace and workspace-folder settings are inspected for warnings and never written; they can override global colors, so Applied confirms the global receipt rather than effective rendering. Choose Grimley Spectrum Dark to see theme-scoped changes. Writes are checked after completion and unchanged settings are not rewritten. Multi-setting application and restoration use best-effort conditional rollback and persisted recovery journals; they are not atomic. Reopening Studio attempts safe recovery, while later conflicting edits are preserved and leave recovery pending. Concurrent edits can race because VS Code provides no compare-and-swap settings API. Languages and mappingsPython, JavaScript, JavaScript React, TypeScript, TypeScript React, Rust, Go, PHP, C, C++, Java, HTML, CSS, SCSS, Less, JSON and JSON with Comments (JSONC) each have a separate palette using real VS Code language IDs. TextMate root scopes and leaf scope families were inspected in the installed VS Code grammars; Programming languages expose grammar-backed categories and semantic categories such as declarations, classes, interfaces, structs, parameters and properties. Semantic-only categories are labeled Semantic provider required. The presence of a selector does not guarantee a language provider emits it: for example PHP does not expose a struct token in typical providers. No language is claimed to have complete category coverage. Rust macros and C/C++ preprocessor directives have specific grammar mappings. HTML uses tags, attributes, strings, entities, comments and punctuation. CSS uses selectors, properties, values, functions, units, variables, strings, numbers, comments and punctuation where present in each grammar. JSON uses keys, strings, numbers, literals, and punctuation. The bundled JSON grammar assigns the same The restored Balanced theme uses blue/gold/lavender/teal in Python, violet/gold/cyan/green in JavaScript, copper/gold/lavender/teal in Rust, violet/gold/lavender/cyan/green in PHP, and distinct C and C++ accents. Punctuation stays neutral and comments remain readable. User-selected colors are unrestricted; their contrast is the user's choice. VS Code limitations and configuration safetySemantic selectors target language IDs ( TextMate selectors target grammar scope ancestry, not arbitrary language IDs. The catalog uses specific roots and subtracts known derived roots to separate JavaScript/JSX, CSS/SCSS/Less and JSON/JSONC. Alternative grammars and embedded regions can use different scopes; snippets/JSONL are excluded from JSON customization. Unidentified expressions, calls, attributes or types cannot be independently colored. Use Developer: Inspect Editor Tokens and Scopes to investigate actual coverage. The extension never adds unsupported language override settings. Apply uses Syntax settings writes are two separate public API operations. A journal and conditional rollback protect interrupted updates; reopening attempts recovery only when affected objects still match the recorded before/after values. VS Code provides no atomic compare-and-swap settings transaction, so simultaneous settings edits are a remaining limitation. Back up settings before manually resolving a journal conflict. Workspace and folder settings are never written. Saved preferences are authoritative in Development and validationThe command activates the extension on demand. There is no startup palette application. Vanilla TypeScript, local CSS, nonce-based scripts, restrictive CSP and validated messages keep the webview small. Inline style attributes are allowed only for color swatches/token spans; scripts prohibit inline execution without the nonce, unsafe-eval and network resources. Untrusted strings are rendered with
Open the project and press F5, choose the theme, invoke Color Studio, and compare applied colors with LicenseMIT. See the included LICENSE file. PHP modifiers ( |