Skip to content

Vite+ Development Environment

Code name: vite-plus

Complete Vite+ unified toolchain setup with the vp CLI, integrating Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown, and Vite Task into a single development experience with VS Code extensions pre-configured.

Also included automatically: repairs broken host paths in your git config and restores your SSH commit-signing key on every attach, on both local and cloud containers, with nothing to set up on your end — see helpers4-common for how it works.

  • Vite+ CLI (vp): Unified toolchain installed via the official installer
  • VS Code Extensions: Oxc and Vitest extensions pre-configured
  • Oxc Integration: Ultra-fast linting (Oxlint) and formatting (Oxfmt)
  • Vitest Support: Test explorer and optimal configuration
  • Smart Defaults: Editor configured for Vite+ best practices

Vite+ combines Vite, Vitest, Oxlint, Oxfmt, Rolldown, and tsdown into a single, unified web development toolchain driven by Vite Task.

Key vp commands:

CommandDescription
vp createScaffold new projects and monorepos
vp installInstall dependencies using the correct package manager
vp devStart Vite dev server with instant HMR
vp checkLint (Oxlint) + format (Oxfmt) + type-check (tsgo)
vp testRun tests with Vitest
vp buildProduction builds with Rolldown
vp runExecute package.json scripts via Vite Task
vp packBundle libraries or create standalone binaries
vp envManage Node.js globally and per project

All you need is vp and a vite.config.ts at the project root.

Built by VoidZero (creators of Vite, Vitest, and Oxc). Open source under MIT license.

Add this feature to your devcontainer.json:

{
    "features": {
        "ghcr.io/helpers4/devcontainer/vite-plus:1": {}
    }
}

This will:

  1. Install vp (Vite+ unified CLI) for the devcontainer user
  2. Install Oxc and Vitest VS Code extensions
  3. Configure Oxc as the default formatter
  4. Enable format-on-save and auto-fix
  5. Set up Vitest test explorer

If you prefer standalone tools instead of or alongside vp:

{
    "features": {
        "ghcr.io/helpers4/devcontainer/vite-plus:1": {
            "installVitePlus": true,
            "installVite": true,
            "installVitest": true,
            "installOxc": true
        }
    }
}

Note: When using vp, standalone installs of Vite, Vitest, and Oxc are not needed — vp bundles them all.

OptionTypeDefaultDescription
installVitePlusbooleantrueInstall Vite+ unified CLI (vp) for the devcontainer user (~/.vite-plus/bin)
installGloballybooleantrueSymlink vp into /usr/local/bin so it is available system-wide (all users, root, sudo, scripts that don’t source the user’s profile). Requires installVitePlus.
installVitebooleanfalseInstall standalone Vite CLI via npm (not needed with vp)
installVitestbooleanfalseInstall standalone Vitest CLI via npm (not needed with vp)
installOxcbooleanfalseInstall Oxc language server via npm (not needed with vp)
  • Ultra-fast linting with Oxlint (~50× to ~100× faster than ESLint)
  • Prettier-compatible formatting with Oxfmt (up to 30× faster than Prettier)
  • ESLint rule compatibility (600+ rules)
  • Type-aware linting support
  • Test discovery and navigation
  • Run/debug tests from UI
  • Watch mode integration
  • Coverage visualization
{
  "oxc.enable": true,
  "oxc.lint.enable": true,
  "oxc.fmt.enable": true,
  "editor.defaultFormatter": "oxc.oxc-vscode",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.oxc": "explicit"
  },
  "vitest.enable": true,
  "vitest.commandLine": "npx vitest"
}

Note: Even though vp test can run Vitest, the VS Code Vitest Explorer uses npx vitest to ensure the project’s local version runs.

vp create my-app
cd my-app
vp install
vp dev

4. Check code quality (lint + format + type-check)

Section titled “4. Check code quality (lint + format + type-check)”
vp check         # report issues
vp check --fix   # auto-fix formatting and linting
vp test
vp build
vp run <script-name>

All tasks are configured in your vite.config.ts:

import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [],
  test: {
    globals: true,
    environment: 'happy-dom',
  },
  run: {
    tasks: {
      'generate:icons': {
        command: 'node scripts/generate-icons.js',
        cache: true,
      },
    },
  },
})

Combine with other features for a complete development environment:

{
  "features": {
    "ghcr.io/helpers4/devcontainer/vite-plus:1": {},
    "ghcr.io/helpers4/devcontainer/package-auto-install:1": {},
    "ghcr.io/helpers4/devcontainer/dotfiles-sync:1": {},
    "ghcr.io/helpers4/devcontainer/shell-history-per-project:1": {},
    "ghcr.io/helpers4/devcontainer/git-absorb:1": {}
  }
}

Vite+ works with all Vite-compatible frameworks:

  • ⚛️ React - Via @vitejs/plugin-react
  • 🟢 Vue - Via @vitejs/plugin-vue
  • 🔶 Svelte - Via @sveltejs/vite-plugin-svelte
  • 🔷 Solid - Via vite-plugin-solid
  • 🅰️ Angular - Via Angular’s Vite integration
  • And 20+ more frameworks
  • ~1.6× to ~7.7× faster production builds than Vite 7 (Rolldown)
  • ~50× to ~100× faster linting than ESLint (Oxlint)
  • Up to 30× faster formatting than Prettier (Oxfmt)
  • Instant HMR for all file types
  • Automated caching with Vite Task for monorepo scripts

Vite+ Alpha ships with:

  • Vite 8
  • Vitest 4.1
  • Oxlint 1.52
  • Oxfmt (beta)
  • Rolldown
  • tsdown

The installer places vp in ~/.vite-plus/bin/. Ensure your shell profile sources it. Open a new terminal session after installation.

Check that oxc.oxc-vscode extension is enabled:

code --list-extensions | grep oxc

Ensure your vite.config.ts includes test configuration:

export default defineConfig({
  test: {
    include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}']
  }
})

Run vp migrate in your project root or see the migration guide.

  • v1.2.3: Fix — the official installer now defaults to an XDG split layout (~/.local/share/vite-plus/bin) instead of the monolithic ~/.vite-plus/bin this feature assumed, unless VP_HOME is explicitly set. Without it, vp silently failed to install (no error, no symlink to /usr/local/bin/vp) while the feature still printed “installed successfully”. Now pins VP_HOME explicitly, sets VP_NODE_MANAGER=no for a deterministic non-interactive install (per the installer’s own documented CI/devcontainer support), and fails loudly if the binary still isn’t there afterward instead of silently continuing.
  • v1.2.2: Documentation only, no functional change — the previous wording sweep made the JSON description field far too long, shifting focus away from the feature itself onto the self-heal side benefit. Shortened to 5 words and kept generic (no implementation detail like “git config”), matching the original’s brevity and level of detail.
  • v1.2.1: Documentation only, no functional change — the self-heal callout above (and the JSON description field) led with internal jargon (“helpers4’s self-heal”) instead of the actual benefit; reworded to lead with what it does, with the full mechanism staying in helpers4-common’s own README.
  • v1.2.0: Documentation only, no functional change — mentions that helpers4-common’s automatic git-config self-heal (see above) now comes along with this feature.
  • v1.1.0: Switched from an inline copy of helpers4-common’s bootstrap (user detection, apt helpers) to a direct dependsOn on the helpers4-common feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync.

LGPL-3.0 - See LICENSE file for details