Edit your UI visually — right inside VS Code.
Click to select, drag to move, inspect styles, and apply changes to source code instantly.
Join the Discord
Get help, share wins, and drop ideas/feedback.
Features • Quick Start • How It Works • Docs • Contributing • Links
Click any element → edit styles, text, or layout → changes apply to your source code
🎯 Click to CodeClick any element in your running app and instantly jump to its source location in your editor. |
🖱️ Drag & ResizeMove and resize elements visually. You can control how layout changes are persisted:
|
✏️ Inline Text EditingDouble-click to edit text inline.
|
🗑️ Element CRUDInsert, duplicate, wrap, and delete elements with toolbar buttons or keyboard shortcuts ( |
🔄 Live PreviewSee changes instantly in the embedded browser. Toggle between Edit and Browse modes. |
📦 Safe StagingAll changes are previewed before saving. Apply or discard pending edits with one click. |
🎛️ Universal Style TargetsApply style edits in a way that matches your project:
|
📱 Responsive BarSwitch the preview viewport between six breakpoints (Mobile S/M/L, Tablet, Laptop, Desktop) to test responsive layouts. |
🔍 Inspector + CSS CascadeView and edit every computed CSS property inline. The Cascade panel shows which rules apply, their specificity, and what's overridden. |
🌳 Element Tree + Diff PreviewBrowse and search the full DOM tree. Open the diff panel to see a before/after comparison of every HTML change. |
🎨 Page Redesign (Figma-like)Ask
|
|
Live UI Editor supports two ways of working:
.html file and edit it visually.The extension’s Welcome / Quick Start screen helps you choose the right mode.
From VS Code Marketplace:
Ctrl+Shift+X to open ExtensionsOr install via command line:
code --install-extension TheImmersiveSaga.vscode-live-ui-editor
Ctrl+Shift+P → type "Live UI: Open"That's it! Your changes are staged and ready to apply.
Need help, want to share wins, or have ideas/feedback? Join the Discord: https://discord.gg/QHnHhCjWDQ
Most people should run Live UI: Open and follow the Welcome screen.
App Mode needs a running dev server it can iframe.
Run "Live UI: Open" (or "Live UI: Open (App Mode)") and the extension will:
Notes:
127.0.0.1 (for consistent iframe/CSP behavior).--host 127.0.0.1 --port <port> --strictPort.--hostname 127.0.0.1 --port <port>.If your app also needs a separate backend/API server (for navigation, auth, data, etc.), use the Start Backend button in the App Mode sidebar.
dev:api / dev:backend / server, or you can enter a custom command.If UI Wizard says there is no selection, make sure you’re in Edit and click an element.
Live UI Editor includes a Chat participant named UI Wizard (ui-wizard) that can edit the currently selected element using plain language.
How to use it:
@ui-wizard and describe the change.Examples:
@ui-wizard width 240@ui-wizard height 48@ui-wizard move right 20@ui-wizard x 40 y 12It also supports:
suggest, preview, apply, undo)apply 1 to all buttons)add a header, wrap this in a box)use an image as the background)Help:
@ui-wizard commands@ui-wizard commands for layout@ui-wizard commands for bulk@ui-wizard commands for structure@ui-wizard commands for imagesPage redesign (no element selection needed):
@ui-wizard redesign this page as a modern marketing site@ui-wizard give this a dark theme@ui-wizard restyle the entire layout as a blogCSS streams into the viewport in real-time. After reviewing, say apply to save or cancel to revert.
If the sidebar shows Identity: Unmapped, selection is working, but the editor can’t map that element back to source code.
Click Enable Stable IDs.
What it changes in your app:
live-ui-editor.babel-plugin.js into your app root (dev-only Babel plugin).vite.config.* to ensure @vitejs/plugin-react is used.@vitejs/plugin-react if it’s missing..babelrc (or babel.config.js) to include next/babel + the plugin.Then restart your dev server.
Use the Style Target dropdown in the App Mode sidebar:
className (when className is a simple string)..lui-xxxx { ... } rule into a chosen CSS file.style={...} in JSX/HTML (can override responsive CSS; the extension will warn you).If your app is Tauri-targeted (has src-tauri/tauri.conf.json), App Mode can auto-enable Tauri Shim.
You can toggle it via the Tauri Shim checkbox in the App Mode sidebar.
| Action | Shortcut |
|---|---|
| Select element | Click |
| Jump to source | Ctrl+Click |
| Multi-select toggle | Ctrl+Shift+Click |
| Select all siblings | Ctrl+A |
| Select leaf element | Alt+Click |
| Select group | Shift+Click |
| Move element | Drag selection |
| Resize element | Drag corner handle |
| Nudge 1 px / 10 px | Arrow keys / Shift+Arrow |
| Edit text | Double-click |
| Duplicate element | Ctrl+D |
| Wrap in container | Ctrl+G |
| Delete element | Delete / Backspace |
| Undo / Redo | Ctrl+Z / Ctrl+Shift+Z |
| Deselect | Escape |
| Apply changes | Click Apply to Code |
| Discard changes | Click Discard |
┌─────────────────────────────────────────────────────────────┐
│ VS Code │
│ ┌─────────────────┐ ┌─────────────────────────────────┐ │
│ │ Your Source │◄───│ Live UI Editor │ │
│ │ Files │ │ ┌───────────────────────────┐ │ │
│ │ (JSX/TSX) │ │ │ Your Vite App (iframe) │ │ │
│ └─────────────────┘ │ │ │ │ │
│ │ │ │ [Visual editing here] │ │ │
│ ▼ │ │ │ │ │
│ ┌─────────────────┐ │ └───────────────────────────┘ │ │
│ │ AST Parser │ │ │ │ │
│ │ (ts-morph) │ │ ▼ │ │
│ └─────────────────┘ │ Pending edits staged │ │
│ │ Click "Apply to Code" │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
For full beginner-friendly help (including the Welcome screen flow, Static HTML mode, App Mode, UI Wizard, and troubleshooting), see HELP.md.
| Mode | Description |
|---|---|
| Edit | Visual editing enabled — click to select, drag to move |
| Browse | Normal app interaction — click events pass through |
Toggle with the Switch to Browse/Edit button in the sidebar.
By default, layout changes (drag/resize) are preview only.
width, height, transform to sourceControl it via the Layout mode dropdown in the App Mode sidebar.
For reliable element targeting, enable Stable IDs:
data-lui attributes via a Babel pluginThis ensures elements are uniquely identifiable even after HMR updates.
The extension auto-detects {t('translation.key')} patterns:
src/locales/*.json filescommon.buttons.save| Requirement | Version |
|---|---|
| VS Code | 1.85.0+ |
| Node.js | 18+ |
The extension auto-detects your framework from package.json:
| Framework | Status |
|---|---|
| Vite + React | ✅ Full support |
| Vite + React + TS | ✅ Full support |
| Next.js | ✅ Supported (App & Pages router) |
| Create React App | ⚠️ Limited (no proxy) |
| Astro | ✅ Detected |
| SvelteKit | ✅ Detected |
| Angular | ✅ Detected |
| Vue CLI | ✅ Detected |
| Nuxt | ✅ Detected |
| Gatsby | ✅ Detected |
| Remix | ✅ Detected |
| Static HTML | ✅ Full support (no framework needed) |
For fastest help (and to share ideas/wins): https://discord.gg/QHnHhCjWDQ
Reload the VS Code window (Ctrl+Shift+P → "Reload Window") and restart App Mode.
Enable Stable IDs for reliable targeting. Without them, elements are matched by heuristics which can fail after HMR updates.
Click Enable Stable IDs and restart your dev server. Without Stable IDs (or React debug source), App Mode can’t reliably map DOM → source.
Enable Tauri Shim in the App Mode toolbar. This stubs the minimal Tauri surface needed for many Tauri-targeted web UIs to load in a browser.
package.json has a dev scriptsrc/locales/*.jsonContributions are welcome! Here's how:
git clone https://github.com/YOUR_USERNAME/VSC-Live-UI-Editor.gitnpm install && cd webview-ui && npm installnpm run buildF5 to launch Extension Development Hostnpm run build # Build extension + webview
npm run watch:extension # Watch mode for extension
npm run build:webview # Build webview UI only
MIT License — see LICENSE for details.
If Live UI Editor saves you time, consider leaving a ⭐ on GitHub and a review on the Marketplace.
It helps others find the extension and keeps development going.
Made with ❤️ by ChaosTimTom
Visual editing for developers who want to see their changes instantly.