Skip to content
Back to skills

Vite Agents Project Scaffolder

ASecurity

Use when generating a new Vite project from scratch, adding Vite to an existing app, or scaffolding a production-ready Vite setup. Prevents missing vite-env.d.ts, incorrect plugin selection, and incomplete environment variable configuration. Covers vite.config.ts generation, TypeScript setup (tsconfig.json, vite-env.d.ts), package.json with scripts, index.html entry point, source directory structure, .env setup, and React/Vue/Svelte/vanilla support. Keywords: scaffold, project setup, vite.con...

  • 5 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 10, 2026
developmenttypescriptgobashreactvuenodegitapibackendperformance

Works with

  • claude code
  • cli
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 4 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add OpenAEC-Foundation/OpenAEC-Workspace-Composer --skill vite-agents-project-scaffolder --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Vite Agents Project Scaffolder?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Vite Agents Project Scaffolder
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/openaec-foundation-vite-agents-project-scaffolder/badge)](https://www.skillsdirectory.com/skills/openaec-foundation-vite-agents-project-scaffolder)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: vite-agents-project-scaffolder
description: >
  Use when generating a new Vite project from scratch, adding Vite to an
  existing app, or scaffolding a production-ready Vite setup.
  Prevents missing vite-env.d.ts, incorrect plugin selection, and incomplete
  environment variable configuration.
  Covers vite.config.ts generation, TypeScript setup (tsconfig.json,
  vite-env.d.ts), package.json with scripts, index.html entry point, source
  directory structure, .env setup, and React/Vue/Svelte/vanilla support.
  Keywords: scaffold, project setup, vite.config.ts, tsconfig, React, Vue,
  Svelte, TypeScript, package.json, create-vite.
license: MIT
compatibility: "Designed for Claude Code. Requires Vite 6.x, 7.x, or 8.x."
metadata:
  author: OpenAEC-Foundation
  version: "1.0"
---

# vite-agents-project-scaffolder

## Quick Reference

### Scaffolding Decision Tree

```
What framework?
├── React
│   ├── Need Babel plugins (relay, styled-components)? → @vitejs/plugin-react
│   └── No special Babel needs? → @vitejs/plugin-react-swc (ALWAYS prefer — 20x faster)
├── Vue
│   └── ALWAYS → @vitejs/plugin-vue
├── Svelte
│   └── ALWAYS → @sveltejs/vite-plugin-svelte
└── Vanilla TypeScript
    └── No plugin needed
```

### What Vite Version?

| Version | Transform Engine | Bundler | Config Key |
|---------|-----------------|---------|------------|
| Vite 6/7 | esbuild | Rollup | `esbuild` |
| Vite 8+ | Oxc | Rolldown | `oxc` |

**ALWAYS** check the installed Vite version before generating config. Vite 8 uses `oxc` and `build.rolldownOptions`; Vite 6/7 uses `esbuild` and `build.rollupOptions`.

### Generated File Inventory

| File | Purpose | Framework-Specific |
|------|---------|-------------------|
| `vite.config.ts` | Build tool configuration | Yes (plugin differs) |
| `tsconfig.json` | TypeScript compiler options | Yes (JSX settings) |
| `tsconfig.node.json` | Node-targeted TS config for vite.config.ts | No |
| `src/vite-env.d.ts` | Vite client type declarations | No |
| `package.json` | Dependencies and scripts | Yes (deps differ) |
| `index.html` | Application entry point | Yes (root element, script src) |
| `src/main.tsx` / `src/main.ts` | Application bootstrap | Yes (framework entry) |
| `src/App.tsx` / `src/App.vue` / `src/App.svelte` | Root component | Yes |
| `.env.example` | Environment variable template | No |
| `.gitignore` | Version control exclusions | No |

### Critical Warnings

**NEVER** omit `isolatedModules: true` from `tsconfig.json` -- Vite uses transpile-only transforms that require this setting. Omitting it causes silent type-system mismatches.

**NEVER** set `envPrefix` to `''` in `vite.config.ts` -- this exposes ALL environment variables (including secrets like `DB_PASSWORD`) to client-side code.

**NEVER** include `type: "module"` in `package.json` when using `.ts` config files -- Vite handles module resolution internally. Adding it causes resolution conflicts.

**ALWAYS** use `/// <reference types="vite/client" />` in `src/vite-env.d.ts` -- this provides types for `import.meta.env`, asset imports, and CSS modules.

**ALWAYS** set `"moduleResolution": "bundler"` in `tsconfig.json` -- Vite resolves modules like a bundler, not like Node.js.

**ALWAYS** run type checking separately with `tsc --noEmit` -- Vite NEVER type-checks during dev or build.

---

## Framework Plugin Selection

### Plugin Comparison Table

| Framework | Plugin Package | Transform | When to Use |
|-----------|---------------|-----------|-------------|
| React | `@vitejs/plugin-react` | Babel | Need Babel plugins (relay, emotion, styled-components) |
| React | `@vitejs/plugin-react-swc` | SWC | Default choice -- 20x faster than Babel |
| Vue | `@vitejs/plugin-vue` | Vue compiler | ALWAYS for Vue SFC support |
| Vue + JSX | `@vitejs/plugin-vue-jsx` | Babel | Only when using JSX in Vue |
| Svelte | `@sveltejs/vite-plugin-svelte` | Svelte compiler | ALWAYS for Svelte |
| Vanilla | None | Built-in | No framework plugin needed |

### Plugin Configuration Patterns

**React (SWC -- default choice):**
```typescript
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'

export default defineConfig({
  plugins: [react()],
})
```

**React (Babel -- only when Babel plugins needed):**
```typescript
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [
    react({
      babel: {
        plugins: ['babel-plugin-styled-components'],
      },
    }),
  ],
})
```

**Vue:**
```typescript
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
})
```

**Svelte:**
```typescript
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'

export default defineConfig({
  plugins: [svelte()],
})
```

---

## Scaffolding Procedure

### Step 1: Determine Project Parameters

Collect these before generating any files:

1. **Framework**: React / Vue / Svelte / Vanilla
2. **Vite version**: 6, 7, or 8 (affects config keys)
3. **CSS preprocessor**: None / Sass / Less / Stylus
4. **Path alias**: `@` -> `./src` (recommended)
5. **API proxy**: Backend URL if needed

### Step 2: Generate Files in Order

ALWAYS generate files in this order to avoid import resolution issues:

1. `package.json` (defines project identity and deps)
2. `tsconfig.json` + `tsconfig.node.json` (TypeScript must resolve before config)
3. `vite.config.ts` (depends on tsconfig for path resolution)
4. `index.html` (entry point)
5. `src/vite-env.d.ts` (type declarations)
6. `src/main.tsx` or `src/main.ts` (application entry)
7. `src/App.tsx` / `src/App.vue` / `src/App.svelte` (root component)
8. `.env.example` (environment template)
9. `.gitignore` (version control)

### Step 3: Install Dependencies

After generating files, run:
```bash
npm install
```

NEVER run `npm install` before all files are generated -- `package.json` must be complete first.

---

## TypeScript Configuration

### tsconfig.json Requirements

**ALWAYS include these settings** (non-negotiable for Vite):

| Setting | Value | Reason |
|---------|-------|--------|
| `isolatedModules` | `true` | Vite uses transpile-only transforms |
| `moduleResolution` | `"bundler"` | Matches Vite's module resolution |
| `target` | `"ES2020"` or higher | Vite targets modern browsers |
| `module` | `"ESNext"` | Vite uses native ESM |
| `types` | `["vite/client"]` | Provides `import.meta.env` types |
| `skipLibCheck` | `true` | Speeds up type checking |

**Framework-specific JSX settings:**

| Framework | `jsx` | `jsxImportSource` |
|-----------|-------|-------------------|
| React | `"react-jsx"` | `"react"` |
| Vue | Not needed | Not needed |
| Svelte | Not needed | Not needed |
| Vanilla | Not needed | Not needed |

### tsconfig.node.json (for vite.config.ts)

```json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "verbatimModuleSyntax": true,
    "noEmit": true
  },
  "include": ["vite.config.ts"]
}
```

---

## Environment Variables Setup

### .env.example Pattern

ALWAYS create `.env.example` with documented variables:

```bash
# Application
VITE_APP_TITLE=My Vite App
VITE_APP_VERSION=1.0.0

# API
VITE_API_BASE_URL=http://localhost:3000/api
```

### TypeScript Env Types

ALWAYS extend `ImportMetaEnv` in `src/vite-env.d.ts` to match `.env.example`:

```typescript
/// <reference types="vite/client" />

interface ImportMetaEnv {
  readonly VITE_APP_TITLE: string
  readonly VITE_APP_VERSION: string
  readonly VITE_API_BASE_URL: string
}

interface ImportMeta {
  readonly env: ImportMetaEnv
}
```

### .gitignore Env Rules

```
.env.local
.env.*.local
*.local
```

**NEVER** gitignore `.env` or `.env.example` -- these contain non-secret defaults and serve as documentation.

---

## CSS Preprocessor Setup

CSS preprocessors require ONLY a package install -- NEVER a Vite plugin:

| Preprocessor | Package to Install | File Extension |
|-------------|-------------------|----------------|
| Sass | `sass-embedded` (preferred) or `sass` | `.scss` / `.sass` |
| Less | `less` | `.less` |
| Stylus | `stylus` | `.styl` |

**NEVER** install `vite-plugin-sass` or similar -- Vite has built-in preprocessor support.

**ALWAYS** prefer `sass-embedded` over `sass` -- it runs Dart Sass in a separate process for better performance.

---

## Version-Specific Configuration

### Vite 8 (Oxc + Rolldown)

```typescript
export default defineConfig({
  oxc: {
    jsx: {
      runtime: 'automatic',
    },
  },
  build: {
    rolldownOptions: {
      output: {
        manualChunks: undefined,
      },
    },
  },
})
```

### Vite 6/7 (esbuild + Rollup)

```typescript
export default defineConfig({
  esbuild: {
    jsx: 'automatic',
  },
  build: {
    rollupOptions: {
      output: {
        manualChunks: undefined,
      },
    },
  },
})
```

**NEVER** mix version-specific config keys -- using `esbuild` in Vite 8 triggers a deprecation warning and internal conversion.

---

## Reference Links

- [references/templates.md](references/templates.md) -- Complete file templates for React-TS, Vue-TS, Svelte-TS, and Vanilla-TS projects
- [references/examples.md](references/examples.md) -- Full scaffold output per framework showing every generated file
- [references/anti-patterns.md](references/anti-patterns.md) -- Common scaffolding mistakes and why they fail

### Official Sources

- https://vite.dev/guide/
- https://vite.dev/config/
- https://vite.dev/guide/env-and-mode
- https://vite.dev/guide/features#typescript
- https://vite.dev/guide/features#css-pre-processors

Files in this skill

  • SKILL.md9.5 KB
  • references/anti-patterns.md8.3 KB
  • references/examples.md7.8 KB
  • references/templates.md10.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.