NOMAD ANNA
A complete developer experience for VS Code — two crafted color themes, an original file icon theme, a Smart Tailwind engine that turns arbitrary pixel classes into real utilities, an opt-in recommended-extension manager and a welcome dashboard. One extension.
Themes
| Theme |
Character |
| NOMAD ANNA Dark |
Minimal near-black surfaces, warm amber accent, calm syntax colors for long sessions. |
| NOMAD ANNA Pink |
Soft plum surfaces (#241A27 editor, #2B1E2E sidebar) with elegant pink (#FF79B0), lavender and sage accents — never neon. |
Both themes style the full workbench (title bar, activity bar, sidebar, tabs, breadcrumbs, panels, terminal + ANSI palette, notifications, inputs, dropdowns, buttons, scrollbars, git decorations, diff/merge, bracket pairs) and tuned syntax for JavaScript, TypeScript, JSX/TSX, HTML, CSS/SCSS, JSON, Python, PHP, Vue, Svelte, Markdown and YAML. Editor text meets WCAG AAA contrast (7:1) and every syntax color meets AA (4.5:1).
Switch with the standard theme picker (Preferences: Color Theme) or NOMAD ANNA: Switch Theme, which previews themes live as you move through the list.
NOMAD ANNA Icons
An original icon set with one visual language: tinted rounded badges with crisp glyphs for files, and type-colored folders with cut-out emblems. Covers 86 file types — JS, TS, React, Vue, Svelte, HTML, CSS, SCSS, JSON, Markdown, Python, PHP, YAML, SVG, images, fonts, Docker, Go, Rust, Java, Kotlin, C/C++/C#, Ruby, Swift, Dart, SQL, GraphQL, Prisma, CSV, PDF, archives, media, certificates, Terraform, Kubernetes, Office documents and common config files (package.json, tsconfig, Tailwind, Vite, ESLint, Prettier, Next.js, Babel, webpack, .env, git…), plus folders such as components, pages, hooks, context, services, utils, assets, public, styles, types, tests and api (with open states and common aliases).
Enable it via Preferences: File Icon Theme → NOMAD ANNA Icons or NOMAD ANNA: Enable Icon Theme.
Smart Tailwind Engine
Converts arbitrary values into the standard utilities your project actually generates:
<div class="w-[1320px] p-[40px] gap-[32px] md:w-[1320px] hover:p-[40px] -mt-[24px]">
<!-- Tailwind v4 -->
<div class="w-330 p-10 gap-8 md:w-330 hover:p-10 -mt-6">
It verifies equivalence — it doesn't just divide by four
- Version aware. Tailwind v4 accepts any multiple of
--spacing / 4, so w-[1320px] → w-330. Tailwind v3 only ships its default scale, so in a default v3 project w-[1320px] is kept, and the hover explains how to make it available: theme.extend.spacing: { '330': '82.5rem' }.
- Project aware. Reads
tailwind.config.{js,cjs,mjs,ts} (theme, theme.extend, prefix, separator, presets, corePlugins) and v4 CSS entry points (@import "tailwindcss" prefix(tw), @theme blocks including --spacing, --spacing-*, --radius-*, --text-*, --container-*, initial resets and @config). Configs are read statically — workspace code is never executed. If a value can't be resolved safely, the engine converts less, never something invalid.
- CSS-level honesty.
text-[20px] → text-xl is approximate because text-xl also sets a line-height, so it's never applied automatically (opt in with nomadAnna.tailwind.includeApproximate). With a modifier it becomes exact: text-[20px]/7 → text-xl/7. Letter-spacing utilities are em-based, so tracking-[2px] is always kept.
- Variants and modifiers preserved. Responsive, state (
hover:, focus:, active:), dark:, arbitrary variants ([&>svg]:), group-*/data-*, negatives (-mt-[24px] and mt-[-24px]), !important (v3 leading and v4 trailing) and prefixes.
- Units.
px, rem and 0 are compared (rem ↔ px uses nomadAnna.tailwind.rootFontSize, default 16). %, em, vh, calc(), var() … are left alone.
Supported utilities: width/height/min/max/size, padding, margin, gap, space-between, inset/top/right/bottom/left/start/end, translate, scroll margin/padding, flex-basis, text-indent, border-spacing, border radius (all corners/sides), font-size, line-height, letter-spacing (explained, never converted by default), border/divide/outline/ring widths, outline/ring offsets, decoration thickness, underline offset, blur and backdrop-blur. Logical-property utilities (ps, ms, start, …) and size-* respect the v3 minor version that introduced them.
Three ways to use it
| Mode |
How |
| Smart suggestions (default) |
Subtle hints, a Quick Fix (💡 / ⌘.), a completion right after you type ], and a hover explaining every decision. |
| Manual |
NOMAD ANNA: Convert Tailwind Classes converts the file (or just the selection) as one undoable edit. Also in the editor context menu. |
| Convert on save |
Set nomadAnna.tailwind.convertOnSave: true. Only exact equivalents; skipped for auto-save-after-delay. Off by default. |
You can also add "source.fixAll.nomadAnna": "explicit" to editor.codeActionsOnSave.
Where it looks: class/className attributes (HTML, JSX/TSX, Vue, Svelte, Astro, PHP templates), Vue :class bindings, Svelte class={…} / class:name directives, Astro class:list, and helper calls such as clsx(), cn(), cva(), twMerge(), tv() and tw`…` (configurable). Template literals are handled where safe: only static text is touched, never a class glued to ${…}. Comments, <style> blocks, JSX text and unrelated strings are ignored. Converting twice changes nothing, and if the equivalent class already exists in the list the arbitrary one is removed instead of duplicated.
NOMAD ANNA's engine is independent of Tailwind CSS IntelliSense — the two complement each other.
Recommended extensions (optional)
NOMAD ANNA: Manage Recommended Extensions or the dashboard shows each recommendation, whether it's installed, and lets you install one, install all (after a confirmation listing exactly what will be installed) or open its Marketplace page:
Prettier · ESLint · Tailwind CSS IntelliSense · Error Lens · Auto Rename Tag · Path Intellisense · GitLens · Material Icon Theme
Nothing is ever installed silently, and NOMAD ANNA does not declare an extensionPack.
Dashboard
Opens once after installation and anytime with NOMAD ANNA: Open Dashboard: theme previews and switching, Tailwind engine status, detected Tailwind version and mode toggles, icon preview, extension status and installs, and shortcuts to settings. It follows your active theme's colors.
Commands
| Command |
|
NOMAD ANNA: Switch Theme |
Pick Dark or Pink with live preview |
NOMAD ANNA: Convert Tailwind Classes |
Convert the file or selection |
NOMAD ANNA: Explain Tailwind Conversions in File |
Report of every arbitrary class and why it is/isn't converted |
NOMAD ANNA: Open Dashboard |
Welcome dashboard |
NOMAD ANNA: Manage Recommended Extensions |
Install / inspect recommendations |
NOMAD ANNA: Enable Icon Theme |
Activate NOMAD ANNA Icons |
NOMAD ANNA: Toggle Smart Tailwind Engine |
Enable / disable the engine |
NOMAD ANNA: Show Tailwind Project Info |
Status menu (also via the TW status bar item) |
Settings
| Setting |
Default |
Description |
nomadAnna.defaultTheme |
NOMAD ANNA Dark |
Preferred theme (listed first in Switch Theme). |
nomadAnna.tailwind.enabled |
true |
Enable the Smart Tailwind Engine. |
nomadAnna.tailwind.mode |
smart |
smart (hints, Quick Fixes, completions, hovers) or manual. |
nomadAnna.tailwind.convertOnSave |
false |
Convert exact equivalents on save. |
nomadAnna.tailwind.supportedFrameworks |
html, react, vue, svelte, astro |
Also available: php, javascript (helper calls in .js/.ts). |
nomadAnna.tailwind.version |
auto |
Force v3 or v4 instead of detecting. |
nomadAnna.tailwind.rootFontSize |
16 |
Root font size for px ↔ rem comparison. |
nomadAnna.tailwind.includeApproximate |
false |
Offer approximate Quick Fixes (never applied in bulk). |
nomadAnna.tailwind.diagnosticSeverity |
hint |
hint, information, warning or off. |
nomadAnna.tailwind.classAttributes |
class, className, … |
Attributes containing classes. |
nomadAnna.tailwind.classFunctions |
clsx, cn, cva, … |
Functions / template tags containing classes. |
nomadAnna.extensions.showRecommendations |
true |
Show recommendations in the dashboard and a one-time hint. |
nomadAnna.dashboard.showOnStartup |
false |
Open the dashboard on every startup. |
Version detection
Per file, NOMAD ANNA finds the nearest project (Tailwind config, or a package.json depending on tailwindcss, so monorepos work) and determines the version from, in order: the nomadAnna.tailwind.version setting, the installed node_modules/tailwindcss, the package.json range, a CSS entry (@import "tailwindcss" → v4, @tailwind → v3), a config file (v3), or falls back to v3.4. Changes to configs, CSS and package.json are picked up automatically. Hover any arbitrary class, or check the TW status bar item, to see what was detected.
Known limitations
- Config values produced by code (functions, imports, spreads) can't be read statically; in those cases the engine offers fewer conversions rather than guessing. If a v3 config can't be read at all, conversions are disabled for that project.
- Classes built dynamically (e.g.
`w-[${size}px]`) are never touched.
- The px ↔ rem comparison assumes your root font size matches
nomadAnna.tailwind.rootFontSize.
License
MIT