Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/bastndev/Lynx-Theme-Pro/llms.txt

Use this file to discover all available pages before exploring further.

Lynx Theme Pro is a VS Code extension that ships 8 color themes, a 1,280+ SVG icon pack with three file/folder styles and two system icon sets, and an experimental Liquid Glass glassmorphism engine that injects CSS directly into the VS Code workbench. Seven of the eight themes are pure JSON files with zero runtime code; only the eighth — the LIQUID theme — requires a TypeScript compilation step and an Electron-side runtime injector. Understanding this split is the key to navigating the codebase confidently.

Project Structure

The repository layout below maps every significant directory and file to its purpose. The dist/ directory is gitignored and generated by the esbuild pipeline; the public/ directory contains marketing assets and translated READMEs that are excluded from the published VSIX bundle.
Lynx-Theme-Pro/
├── .vscode/                             # Editor workspace settings
├── src/
│   ├── themes/                          # 8 theme JSONs + Liquid (blur) engine
│   │   ├── 01_Lynx-Dark-theme.json
│   │   ├── 02_Lynx-Light-theme.json
│   │   ├── 03_Lynx-Night-theme.json
│   │   ├── 04_Lynx-Ghibli-theme.json
│   │   ├── 05_Lynx-Fury-theme.json
│   │   ├── 06_Lynx-Kiro-theme.json
│   │   ├── 07_Lynx-NVIM-theme.json
│   │   ├── 08_Lynx-Liquid-theme.json
│   │   └── liquid-theme/                # 🧪 Glassmorphism engine (TS)
│   │       ├── css/                     # Per-OS CSS patches
│   │       ├── platforms/               # OS detection & integration
│   │       ├── runtime/                 # Injection + activation
│   │       ├── utils/                   # Shared helpers
│   │       └── liquid-theme.ts          # Entry point
│   ├── icons/                           # Icon system (JSON configs)
│   │   ├── icon-system/                 # IDE chrome icons (material/test)
│   │   └── icon-themes/                 # File/folder icon themes
│   │       ├── lynx-icons-dark.json     # Style A — dark variant
│   │       ├── lynx-icons-light.json    # Style B — light variant
│   │       └── lynx-icons-gray.json     # Style C — gray variant
│   ├── assets/
│   │   ├── svg/                         # 1280+ SVG icon files
│   │   └── woff/                        # Font assets
│   ├── types/                           # Shared TypeScript types
│   └── __test__/                        # Unit tests
├── public/                              # Marketing & docs (excluded from VSIX)
│   ├── banner.webp                      # README banner
│   ├── docs/                            # Translated READMEs (11 languages)
│   │   └── README_AR / DE / ES / FR / HI / JA / KO / PT / RU / VI / ZH
│   └── github/
│       ├── icon/                        # Marketplace badges & icons
│       ├── images/                      # Marketing images
│       └── screenshots/                 # Theme & icon previews
├── dist/                                # esbuild output (gitignored)
├── .vscodeignore                        # Controls what ships in the VSIX bundle
├── AGENTS.md                            # Build commands & conventions
├── ARCHITECTURE.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── esbuild.js                           # Bundler config
├── eslint.config.mjs                    # Lint rules
├── package.json                         # Extension manifest & contributes
├── package.nls.json                     # Default UI strings (en)
├── package.nls.{ar,de,es,fr,hi,ja,ko,pt-br,ru,vi,zh-cn}.json   # i18n
└── tsconfig.json                        # TypeScript config

The 8 Themes

Seven of the eight themes are plain JSON files in src/themes/ — no compilation required. The eighth theme (LIQUID) is backed by a TypeScript engine described in the next section. VS Code reads each theme file directly from its path declared in package.json.
#ThemeType
1DARKDark (vs-dark)
2LIGHTLight (vs)
3NIGHTDark (vs-dark)
4GHIBLILight (vs)
5FURYDark (vs-dark)
6KIRODark (vs-dark)
7NVIMDark (vs-dark)
8LIQUID 🧪Dark + Glass (vs-dark)
The numeric prefix in each filename (01_, 02_, …, 08_) is not decorative. VS Code sorts the theme picker alphabetically, so the prefixes guarantee a stable, predictable display order. Do not remove or reorder existing prefixes without updating all downstream references. Every theme JSON uses the same top-level schema:
{
  "$schema": "vscode://schemas/color-theme",
  "semanticClass": "theme.lynx.dark",
  "semanticHighlighting": true,
  "name": "1. DARK  (Lynx Theme)",
  "type": "dark",
  "colors": { ... },
  "tokenColors": [ ... ]
}
  • $schema — enables IntelliSense and validation in VS Code while editing the JSON.
  • semanticHighlighting — when true, VS Code applies language-server-driven semantic token colors on top of grammar-based highlighting.
  • colors — workbench UI colors (sidebar, tabs, status bar, editor background, etc.).
  • tokenColors — TextMate grammar rules for syntax token colors.

The Icon System

All icon configuration lives in src/icons/, split into two categories: icon-themes (file and folder icons visible in the Explorer) and icon-system (product icons used in VS Code’s own UI chrome). File/folder icon themes (src/icons/icon-themes/):
FileStyleDescription
lynx-icons-dark.jsonAOriginal dark color variant
lynx-icons-light.jsonBAlternative light/modern aesthetic
lynx-icons-gray.jsonCNeutral gray variant
System icon themes (src/icons/icon-system/):
FileLabel
lynx-material-icon.jsonLynx (Material) Icons
lynx-test-icon.jsonLynx (Test) Icons
All five configs draw from the same shared SVG pool at src/assets/svg/ (1,280+ files). Adding a single SVG there makes it available to every style — you only need to add the mapping in the JSON configs for the styles you want to update. Each icon config maps SVGs using these JSON keys:
{
  "fileExtensions": { "ts": "typescript-file" },
  "fileNames":      { "Dockerfile": "docker-file" },
  "languageIds":    { "rust": "rust-file" },
  "folderNames":    { "src": "src-folder" },
  "folderNamesExpanded": { "src": "src-folder-open" }
}
SVG filenames follow a consistent naming convention: name-file.svg, name-folder.svg, and name-folder-open.svg.

The Liquid Glass Engine

VS Code provides no native API for window-level transparency or blur effects, so the Liquid Glass engine achieves glassmorphism by injecting CSS directly into the workbench HTML. This is the only part of the extension that requires TypeScript compilation. Entry point: src/themes/liquid-theme/liquid-theme.ts → compiled to dist/themes/liquid-theme/liquid-theme.js. The activation flow is:
liquid-theme.ts (activate)
├── Detect OS via process.platform
│   ├── "linux"   → platforms/linux.ts
│   ├── "darwin"  → platforms/macos.ts
│   └── "win32"   → platforms/windows.ts
├── Check context.globalState key "lynxLiquidInstalled"
├── If Liquid theme is active → handleActivation(context)
│   └── Loads the platform-specific CSS patch
│       └── Injects CSS into the active workbench window
└── Listen for workbench.colorTheme changes
    ├── Theme switched TO Liquid  → handleActivation(context)
    └── Theme switched AWAY       → handleDeactivation(context)
Platform modules (src/themes/liquid-theme/platforms/): Each platform module exports handleActivation and handleDeactivation. They handle the OS-specific file paths to VS Code’s workbench HTML and apply the appropriate CSS template.
ModulePlatform
platforms/linux.tsLinux
platforms/macos.tsmacOS
platforms/windows.tsWindows
Runtime injection (src/themes/liquid-theme/runtime/inject.mts): The inject.mts file runs inside VS Code’s Electron main process — not the extension host. This is necessary because writing to the workbench HTML requires elevated file access that the extension host sandbox does not permit. The file is compiled as an ESM .mjs module (see the esbuild section below). CSS templates (src/themes/liquid-theme/css/):
css/
├── animation/
│   └── text.css          # Text animation effects
├── blur/
│   └── blur.css          # Backdrop blur / frosted glass
├── liquid-glass/
│   └── liquid-glass.css  # Liquid glass panel styling
└── global.css            # Shared baseline styles
These CSS files are copied verbatim to dist/themes/liquid-theme/css/ after each build — they are not processed by esbuild. State persistence: The engine persists its install state using context.globalState.get('lynxLiquidInstalled', false). On startup, if the Liquid theme is not active and the state key is false, any leftover CSS residue is cleaned up automatically via cleanupLiquidResidue(context).
Patching the VS Code workbench HTML is unsupported by Microsoft and may trigger the “installation appears to be corrupt” cosmetic warning on startup. This is expected behavior — the extension functions normally despite this message. Microsoft may change workbench internals in any VS Code update, which could temporarily break the Liquid theme until the engine is updated.

The esbuild Pipeline

esbuild.js drives all compilation. It produces two separate output bundles from the same source tree, one for each execution context:
OutputFormatExtensionSource
Extension hostCJS.jssrc/themes/liquid-theme/**/*.ts (excluding runtime/)
Electron runtimeESM.mjssrc/themes/liquid-theme/runtime/**/*.mts
The extension host bundle uses CommonJS (format: 'cjs') because VS Code’s extension host runs in a Node.js CommonJS environment. The Electron runtime bundle uses ES modules (format: 'esm', outExtension: { '.js': '.mjs' }) because the Electron main process supports native ESM. After every successful build, the plugin automatically copies the contents of src/themes/liquid-theme/css/ to dist/themes/liquid-theme/css/. In production mode (--production), esbuild enables minification and disables source maps. In development mode, source maps are generated alongside each output file. Build commands and their recommended execution order:
npm run lint        # ESLint — run first to catch style issues early
npm run check-types # tsc --noEmit — type-check without emitting files
npm run compile     # Development build → dist/
npm run watch       # Watch mode — incremental rebuilds during development
npm run package     # Production build (minified, no source maps)

What VS Code Loads

package.json is the single source of truth for everything VS Code loads from this extension. It declares all extension contributions via the contributes key:
{
  "main": "./dist/themes/liquid-theme/liquid-theme.js",
  "activationEvents": ["onStartupFinished"],
  "contributes": {
    "themes": [
      { "label": "1. DARK  (Lynx Theme)",    "uiTheme": "vs-dark", "path": "./src/themes/01_Lynx-Dark-theme.json" },
      { "label": "2. LIGHT (Lynx Theme)",    "uiTheme": "vs",      "path": "./src/themes/02_Lynx-Light-theme.json" },
      { "label": "3. NIGHT (Lynx Theme)",    "uiTheme": "vs-dark", "path": "./src/themes/03_Lynx-Night-theme.json" },
      { "label": "4. GHIBLI (Lynx Theme)",   "uiTheme": "vs",      "path": "./src/themes/04_Lynx-Ghibli-theme.json" },
      { "label": "5. FURY  (Lynx Theme)",    "uiTheme": "vs-dark", "path": "./src/themes/05_Lynx-Fury-theme.json" },
      { "label": "6. KIRO  (Lynx Theme)",    "uiTheme": "vs-dark", "path": "./src/themes/06_Lynx-Kiro-theme.json" },
      { "label": "7. NVIM  (Lynx Theme)",    "uiTheme": "vs-dark", "path": "./src/themes/07_Lynx-NVIM-theme.json" },
      { "label": "8. LIQUID (Lynx Theme) 🧪","uiTheme": "vs-dark", "path": "./src/themes/08_Lynx-Liquid-theme.json" }
    ],
    "iconThemes": [
      { "id": "lynx-pro-dark",  "label": "Lynx Icons - (Style A)", "path": "./src/icons/icon-themes/lynx-icons-dark.json" },
      { "id": "lynx-pro-light", "label": "Lynx Icons - (Style B)", "path": "./src/icons/icon-themes/lynx-icons-light.json" },
      { "id": "lynx-pro-gray",  "label": "Lynx Icons - (Style C)", "path": "./src/icons/icon-themes/lynx-icons-gray.json" }
    ],
    "productIconThemes": [
      { "id": "lynx-test-icons",     "label": "Lynx (Test) Icons",     "path": "./src/icons/icon-system/lynx-test-icon.json" },
      { "id": "lynx-material-icons", "label": "Lynx (Material) Icons", "path": "./src/icons/icon-system/lynx-material-icon.json" }
    ]
  }
}
The extension activates on onStartupFinished and its main entry point is the compiled Liquid theme JS. All 7 static JSON themes require no activation — VS Code reads them directly from their declared paths. The .vscodeignore file ensures that public/ (screenshots, translated READMEs, marketing assets) and development configuration files are stripped from the VSIX bundle before publishing, keeping the package size minimal.

Companion Extensions

Lynx Theme Pro is part of a broader ecosystem of extensions maintained by Gohit X:
ExtensionPurpose
ATMError Lens, Git Blame, Env Protection, screenshots
Lynx Keymap ProUnified keyboard shortcuts
Compare CodeSide-by-side code diffing

Build docs developers (and LLMs) love