home / skills / atman-33 / skills / vscode-webview-ui
/skills/vscode-webview-ui
This skill helps you develop React-based VS Code Webview UI features with guidance on structure, messaging, styling, and testing for extensions.
npx playbooks add skill atman-33/skills --skill vscode-webview-uiReview the files below or copy the command above to add this skill to your agents.
---
name: vscode-webview-ui
description: Develop React applications for VS Code Webview surfaces. Use when working on the `webview-ui` package, creating features, components, or hooks for VS Code extensions. Includes project structure, coding guidelines, and testing instructions.
---
# VS Code Webview UI
## Overview
This skill assists in developing the React application that powers VS Code webview surfaces. It covers the `webview-ui` workspace, which is bundled with Vite and communicates with the extension host via the `bridge/vscode` helper.
## Project Structure
The `webview-ui` package follows this structure:
```
webview-ui/
├── src/
│ ├── components/ # Shared visual components reused across features
│ │ └── ui/ # shadcn/ui component library
│ ├── hooks/ # Shared React hooks
│ ├── features/
│ │ └── {feature}/
│ │ ├── index.tsx # Feature entry component rendered from routing
│ │ ├── components/# Feature-specific components
│ │ └── hooks/ # Feature-specific hooks
│ ├── bridge/ # Messaging helpers for VS Code <-> webview
│ └── index.tsx # Runtime router that mounts the selected feature
├── public/ # Static assets copied verbatim by Vite
├── vite.config.ts # Vite build configuration
└── README.md
```
## Coding Guidelines
- **Shared Modules**: Prefer shared modules under `src/components` and `src/hooks` before introducing feature-local code.
- **Feature Boundaries**: Add feature-only utilities inside the nested `components/` or `hooks/` directories to keep boundaries clear.
- **Styling**: Keep styling in Tailwind-style utility classes (see `src/app.css` for base tokens) and avoid inline styles when reusable classes exist.
- **Messaging**: Exchange messages with the extension via `vscode.postMessage` and subscribe through `window.addEventListener('message', …)` inside React effects.
- **Configuration**: When adding new steering or config references, obtain paths through the shared `ConfigManager` utilities from the extension layer.
## Testing & Quality
- **Integration Tests**: Use Playwright or Cypress style integration tests if adding complex interactions (tests live under the repo-level `tests/`).
- **Pre-commit Checks**: Run `npm run lint` and `npm run build` before committing to ensure TypeScript and bundler checks pass.
This skill helps you develop React applications that run inside VS Code webview surfaces. It focuses on the webview-ui package, bundled with Vite, and explains the project layout, coding conventions, and testing guidance. Use it to create features, components, and hooks that communicate reliably with the extension host.
The skill inspects and documents the webview-ui workspace structure and the recommended patterns for shared components, feature boundaries, and messaging. It explains using the bridge/vscode helper to post and receive messages between the webview and extension host, and it guides how the runtime router mounts feature entry points. It also outlines tooling and testing steps to keep builds and types consistent.
How should I structure feature files?
Place entry point index.tsx at feature/{name}/, nested components in components/, and feature-only hooks in hooks/. Prefer shared modules for anything reusable across features.
How do I send and receive messages safely?
Use vscode.postMessage to send messages and subscribe with window.addEventListener('message', handler) inside a useEffect that cleans up the listener to avoid leaks.