vite-plus
Use this skill when working with Vite+, vp CLI, or the VoidZero unified toolchain. Triggers on project scaffolding with vp create, migrating existing Vite projects with vp migrate, running dev/build/test/lint/fmt commands, configuring vite.config.ts with lint/fmt/test/run/pack/staged blocks, managing Node.js versions with vp env, monorepo task execution with vp run, and library packaging with vp pack. Also triggers on references to Oxlint, Oxfmt, Rolldown, tsdown, Vitest, or Vite Task in a Vite+ context.
devtools vitetoolchainbundlerlintingtestingmonorepoWhat is vite-plus?
Use this skill when working with Vite+, vp CLI, or the VoidZero unified toolchain. Triggers on project scaffolding with vp create, migrating existing Vite projects with vp migrate, running dev/build/test/lint/fmt commands, configuring vite.config.ts with lint/fmt/test/run/pack/staged blocks, managing Node.js versions with vp env, monorepo task execution with vp run, and library packaging with vp pack. Also triggers on references to Oxlint, Oxfmt, Rolldown, tsdown, Vitest, or Vite Task in a Vite+ context.
vite-plus
vite-plus is a production-ready AI agent skill for claude-code, gemini-cli, openai-codex, and 1 more. Working with Vite+, vp CLI, or the VoidZero unified toolchain.
Quick Facts
| Field | Value |
|---|---|
| Category | devtools |
| Version | 0.1.0 |
| Platforms | claude-code, gemini-cli, openai-codex, mcp |
| License | MIT |
How to Install
- Make sure you have Node.js installed on your machine.
- Run the following command in your terminal:
npx skills add AbsolutelySkilled/AbsolutelySkilled --skill vite-plus- The vite-plus skill is now available in your AI coding agent (Claude Code, Gemini CLI, OpenAI Codex, etc.).
Overview
Vite+ is the unified toolchain for web development by VoidZero. It consolidates
the dev server (Vite), bundler (Rolldown), test runner (Vitest), linter (Oxlint),
formatter (Oxfmt), task runner (Vite Task), and library packager (tsdown) into a
single CLI called vp. It also manages Node.js versions and package managers
globally, replacing the need for nvm, fnm, or Corepack.
Tags
vite toolchain bundler linting testing monorepo
Platforms
- claude-code
- gemini-cli
- openai-codex
- mcp
Related Skills
Pair vite-plus with these complementary skills:
Frequently Asked Questions
What is vite-plus?
Use this skill when working with Vite+, vp CLI, or the VoidZero unified toolchain. Triggers on project scaffolding with vp create, migrating existing Vite projects with vp migrate, running dev/build/test/lint/fmt commands, configuring vite.config.ts with lint/fmt/test/run/pack/staged blocks, managing Node.js versions with vp env, monorepo task execution with vp run, and library packaging with vp pack. Also triggers on references to Oxlint, Oxfmt, Rolldown, tsdown, Vitest, or Vite Task in a Vite+ context.
How do I install vite-plus?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill vite-plus in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support vite-plus?
This skill works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.
Maintainers
Generated from AbsolutelySkilled
SKILL.md
Vite+
Vite+ is the unified toolchain for web development by VoidZero. It consolidates
the dev server (Vite), bundler (Rolldown), test runner (Vitest), linter (Oxlint),
formatter (Oxfmt), task runner (Vite Task), and library packager (tsdown) into a
single CLI called vp. It also manages Node.js versions and package managers
globally, replacing the need for nvm, fnm, or Corepack.
When to use this skill
Trigger this skill when the user:
- Wants to scaffold a new project or monorepo with
vp create - Needs to migrate an existing Vite/Vitest project to Vite+
- Asks about
vp dev,vp build,vp test,vp lint,vp fmt, orvp check - Configures
vite.config.tswithlint,fmt,test,run,pack, orstagedblocks - Runs monorepo tasks with
vp run -ror workspace filtering - Packages a library with
vp pack(tsdown integration) - Manages Node.js versions with
vp env - References the
vporvpxCLI commands
Do NOT trigger this skill for:
- Plain Vite (without Vite+) configuration - use standard Vite docs instead
- Vitest standalone usage without Vite+ wrapping
Setup & authentication
Installation
# macOS / Linux
curl -fsSL https://vite.plus | bash
# Windows (PowerShell)
irm https://vite.plus/ps1 | iexBasic project setup
# Interactive project creation
vp create
# Create from a specific template
vp create vite -- --template react-ts
# Monorepo
vp create vite:monorepo
# Migrate existing Vite project
vp migrateConfiguration
All tool configuration lives in a single vite.config.ts:
import { defineConfig } from 'vite-plus';
export default defineConfig({
// Standard Vite options
server: {},
build: {},
preview: {},
// Vite+ extensions
test: {}, // Vitest
lint: {}, // Oxlint
fmt: {}, // Oxfmt
run: {}, // Vite Task
pack: {}, // tsdown
staged: {}, // Pre-commit checks
});Core concepts
Vite+ ships as two pieces: vp (global CLI) and vite-plus (local project
package). The global CLI handles runtime management and project scaffolding.
The local package provides the defineConfig function and all tool integrations.
Unified config model - instead of separate config files for each tool
(vitest.config.ts, .oxlintrc.json, .prettierrc), everything consolidates
into vite.config.ts. Do not create separate config files for Oxlint, Oxfmt,
Vitest, or tsdown when using Vite+.
Command surface - vp wraps each integrated tool behind a consistent CLI.
vp dev and vp build run standard Vite. vp test runs Vitest (single-run by
default, unlike standalone Vitest which defaults to watch). vp check runs
fmt + lint + typecheck in one pass using Oxfmt, Oxlint, and tsgolint.
Environment management - Vite+ manages Node.js installations in
~/.vite-plus. In managed mode (default), shims always use the Vite+-managed
Node.js. Use vp env off to switch to system-first mode. Pin project versions
with vp env pin which writes a .node-version file.
Common tasks
Scaffold a new project
# Interactive
vp create
# Built-in templates: vite:application, vite:library, vite:monorepo, vite:generator
vp create vite:library --directory my-lib
# Third-party templates
vp create next-app
vp create @tanstack/start
# Pass template-specific options after --
vp create vite -- --template react-tsRun dev server and build
vp dev # Start Vite dev server with HMR
vp build # Production build via Rolldown
vp preview # Serve production build locally
vp build --watch --sourcemap # Watch mode with source maps
vp buildalways runs the built-in Vite build. If yourpackage.jsonhas a custombuildscript, usevp run buildinstead.
Lint, format, and type-check
vp check # Format + lint + type-check in one pass
vp check --fix # Auto-fix formatting and lint issues
vp lint # Lint only (Oxlint)
vp lint --fix # Lint with auto-fix
vp fmt # Format only (Oxfmt)
vp fmt --check # Check formatting without writingEnable type-aware linting in config:
export default defineConfig({
lint: {
ignorePatterns: ['dist/**'],
options: {
typeAware: true,
typeCheck: true,
},
},
fmt: {
singleQuote: true,
},
});Run tests
vp test # Single test run (NOT watch mode by default)
vp test watch # Enter watch mode
vp test run --coverage # With coverage reportexport default defineConfig({
test: {
include: ['src/**/*.test.ts'],
coverage: {
reporter: ['text', 'html'],
},
},
});Unlike standalone Vitest,
vp testdefaults to single-run mode.
Package a library
vp pack # Build library
vp pack src/index.ts --dts # Specific entry with TypeScript declarations
vp pack --watch # Watch modeexport default defineConfig({
pack: {
dts: true,
format: ['esm', 'cjs'],
sourcemap: true,
},
});The exe option builds standalone executables for CLI tools.
Execute monorepo tasks
vp run build # Run build script in current package
vp run build -r # Run across all workspace packages (dependency order)
vp run build -t # Run in package + all its dependencies
vp run build --filter "my-app" # Filter by package name
vp run build -v # Verbose with cache statsexport default defineConfig({
run: {
tasks: {
ci: {
command: 'vp check && vp test && vp build',
dependsOn: [],
cache: true,
env: ['CI', 'NODE_ENV'],
},
},
},
});Tasks in
vite.config.tsare cached by default. Package.json scripts are not - use--cacheto enable.
Manage Node.js versions
vp env pin 22 # Pin project to Node 22 (.node-version)
vp env default 22 # Set global default
vp env install 22 # Install a Node.js version
vp env current # Show resolved environment
vp env on / vp env off # Toggle managed vs system-first mode
vp env doctor # Run diagnosticsError handling
| Error | Cause | Resolution |
|---|---|---|
vp: command not found |
Vite+ not installed or shell not reloaded | Run the install script and restart terminal, or run vp env print and add the output to shell config |
vp build runs custom script instead of Vite build |
package.json has a build script |
Use vp build for Vite build, vp run build for the package.json script |
| Type-aware lint rules not working | typeAware / typeCheck not enabled |
Set lint.options.typeAware: true and lint.options.typeCheck: true in config |
vp test stays in watch mode |
Standalone Vitest habit | vp test is single-run by default; use vp test watch for watch mode |
| Migration leaves broken imports | Incomplete vp migrate |
Run vp install, then vp check to catch remaining import issues |
Gotchas
vp buildandvp run buildare different commands -vp buildalways invokes the built-in Vite build regardless ofpackage.jsonscripts.vp run buildexecutes thebuildscript inpackage.json. If your project has a custombuildscript that wraps Vite with additional steps, usevp run build. Usingvp buildwill skip those steps silently.Separate config files for Vitest/Oxlint/Oxfmt will conflict with Vite+ config - Vite+ reads all tool configuration exclusively from
vite.config.ts. If avitest.config.ts,.oxlintrc.json, or.prettierrcexists alongside it, the behavior is undefined and tools may use conflicting settings. Remove separate configs entirely when migrating to Vite+.vp testis single-run by default, unlike standalone Vitest - Developers migrating from standalone Vitest expect watch mode. Runningvp testin CI is correct; running it locally for development requiresvp test watch. This is the opposite of Vitest's default behavior.vp migratedoes not update import paths for tool-specific APIs - The migration command handles config consolidation but does not rewrite imports likeimport { defineConfig } from 'vitest/config'toimport { defineConfig } from 'vite-plus'. Remaining broken imports will surface as type errors after migration; runvp checkto find them.Node.js managed mode intercepts all
nodecalls, including CI scripts - In managed mode (default), the Vite+ shim is at the front of PATH. CI environments with pre-installed Node.js may behave unexpectedly. Runvp env doctorto verify the resolved environment and usevp env offto switch to system-first mode in CI if needed.
References
For detailed configuration options and advanced usage, read these files:
references/config.md- full configuration reference for allvite.config.tsblocks (lint, fmt, test, run, pack, staged)references/env-management.md- Node.js version management and runtime modesreferences/task-runner.md- monorepo task execution, caching, and dependency ordering
Only load a references file if the current task requires it - they consume context.
References
config.md
Vite+ Configuration Reference
All configuration lives in vite.config.ts using defineConfig from vite-plus.
Do not create separate config files for integrated tools.
import { defineConfig } from 'vite-plus';
export default defineConfig({
// Standard Vite sections (unchanged from Vite docs)
server: {},
build: {},
preview: {},
// Vite+ extensions (documented below)
lint: {},
fmt: {},
test: {},
run: {},
pack: {},
staged: {},
});lint (Oxlint)
lint: {
ignorePatterns: ['dist/**'], // Glob patterns to exclude
options: {
typeAware: true, // Enable type-aware rules
typeCheck: true, // Enable full type checking via tsgolint
},
rules: {
'no-console': ['error', { allow: ['error'] }],
},
}ignorePatterns-string[]- file patterns excluded from lintingoptions.typeAware-boolean- activates rules requiring TypeScript type infooptions.typeCheck-boolean- runs full type checking during lintingrules-Record<string, RuleConfig>- ESLint-compatible rule overrides
Both typeAware and typeCheck are enabled by default in vp create and
vp migrate projects. Keep them enabled for the full type-aware path in
vp lint and vp check.
Oxlint supports 600+ ESLint-compatible rules. For the full rule list, see the Oxlint documentation.
fmt (Oxfmt)
fmt: {
ignorePatterns: ['dist/**'],
singleQuote: true,
semi: true,
experimentalSortPackageJson: true,
}ignorePatterns-string[]- file patterns excluded from formattingsingleQuote-boolean- use single quotes instead of doublesemi-boolean- enforce semicolonsexperimentalSortPackageJson-boolean- sort package.json keys
Oxfmt has full Prettier compatibility. For the complete options list, see the
Oxfmt documentation. Point editor formatter config to ./vite.config.ts for
consistent format-on-save.
test (Vitest)
test: {
include: ['src/**/*.test.ts'],
coverage: {
reporter: ['text', 'html'],
},
}Accepts all Vitest configuration options. Key difference: vp test defaults to
single-run mode (not watch). Use vp test watch for watch mode.
For the complete configuration reference, see the Vitest docs.
run (Vite Task)
Top-level options
run: {
enablePrePostScripts: true, // Run preX/postX lifecycle hooks (workspace root only)
cache: { // Default: { scripts: false, tasks: true }
scripts: false,
tasks: true,
},
tasks: { /* see below */ },
}Task definitions
run: {
tasks: {
ci: {
command: 'vp check && vp test && vp build',
dependsOn: [], // Prerequisite tasks. Cross-package: "pkg#task"
cache: true, // Cache task output (default: true)
env: ['CI', 'NODE_ENV'], // Env vars in cache fingerprint. Supports wildcards: 'VITE_*'
untrackedEnv: [], // Env vars passed but excluded from cache key
input: [{ auto: true }], // File tracking. Array of globs or { auto: boolean }
cwd: '.', // Working directory relative to package root
},
},
}Commands with && are auto-split into independently cached sub-tasks.
pack (tsdown)
pack: {
dts: true, // Generate TypeScript declarations
format: ['esm', 'cjs'], // Output formats
sourcemap: true, // Generate source maps
// exe: true // Build standalone executable
}Accepts all tsdown configuration options. Do not use tsdown.config.ts with
Vite+ - configure everything in the pack block.
staged (pre-commit checks)
staged: {
'*.{js,ts,tsx,vue,svelte}': 'vp check --fix',
}Maps file glob patterns to commands that run on staged files before commit.
Used by vp staged for pre-commit hooks. Enable hooks during project creation
with vp create --hooks.
env-management.md
Vite+ Environment & Runtime Management
Vite+ manages Node.js versions globally and per-project through vp env.
Managed runtimes are stored in ~/.vite-plus (override with VITE_PLUS_HOME).
Operating modes
Managed mode (default)
Shims always resolve to Vite+-managed Node.js. Enable with vp env on.
System-first mode
Prioritizes system Node.js, falls back to Vite+-managed runtime. Enable with
vp env off. Useful when you need to use a system-installed Node.js for
specific projects or environments.
Command reference
Setup
| Command | Purpose |
|---|---|
vp env setup |
Create shims in VITE_PLUS_HOME/bin |
vp env on |
Switch to managed mode |
vp env off |
Switch to system-first mode |
vp env print |
Output shell configuration snippet |
Version management
| Command | Purpose |
|---|---|
vp env pin <version> |
Lock project to Node.js version (writes .node-version) |
vp env unpin |
Remove version pin |
vp env default <version> |
Set global default Node.js version |
vp env use <version> |
Apply version for current shell session only |
vp env install <version> |
Download and install a Node.js version |
vp env uninstall <version> |
Remove an installed Node.js version |
vp env exec <version> -- <cmd> |
Run a command with a specific Node.js version |
Inspection
| Command | Purpose |
|---|---|
vp env current |
Display resolved environment (Node version, package manager) |
vp env which <tool> |
Show tool path resolution |
vp env list |
List installed Node.js versions |
vp env list-remote |
List available Node.js versions for download |
vp env doctor |
Run environment diagnostics |
Project workflow
- Pin the Node.js version:
vp env pin 22 - This writes a
.node-versionfile to the project root - All
vpcommands (vp install,vp dev,vp build) automatically use the pinned version - Team members running
vp env installwill get the correct version
Toolchain management
| Command | Purpose |
|---|---|
vp upgrade |
Update the Vite+ toolchain to latest |
vp implode |
Complete removal of Vite+ and all managed runtimes |
vpx <pkg> / vp dlx <pkg> |
Execute a package binary without installing globally |
task-runner.md
Vite+ Task Runner (Vite Task)
vp run executes package.json scripts and tasks defined in vite.config.ts.
It provides built-in caching, dependency ordering, and workspace-aware execution.
Basic usage
vp run <script> # Run a package.json script
vp run <task> # Run a vite.config.ts task
vp run build -v # Verbose output with cache stats
vp run --last-details # View previous run's summaryCaching behavior
| Source | Default caching |
|---|---|
package.json scripts |
Not cached (use --cache to enable) |
vite.config.ts tasks |
Cached by default |
The cache system tracks file modifications and replays cached output when
inputs haven't changed. Commands with && are auto-split into independently
cached sub-tasks.
Cache configuration
run: {
cache: {
scripts: false, // Cache package.json scripts
tasks: true, // Cache vite.config.ts tasks
},
}Or use a boolean to set both: cache: true.
Per-task cache control
run: {
tasks: {
build: {
command: 'vp build',
cache: true,
env: ['NODE_ENV', 'VITE_*'], // Include in cache fingerprint
untrackedEnv: ['HOME'], // Pass but exclude from fingerprint
input: [{ auto: true }], // File tracking (auto-detect by default)
},
dev: {
command: 'vp dev',
cache: false, // Don't cache dev servers
},
},
}Monorepo execution
Flags
| Flag | Purpose |
|---|---|
-r |
Run across all workspace packages in dependency order |
-t |
Run in target package + all its dependencies |
--filter <pattern> |
Select packages by name, directory, or glob (pnpm syntax) |
-w |
Target workspace root package |
--cache |
Enable caching for package.json scripts |
-v |
Verbose output with cache hit rates and timing |
Examples
# Build all packages in dependency order
vp run build -r
# Build one package and its dependencies
vp run build -t --filter my-app
# Run tests only in packages matching a glob
vp run test --filter "packages/*"
# Target workspace root
vp run lint -wDependency ordering
Package execution order derives from standard package.json dependency
declarations (dependencies, devDependencies), not task-runner-specific
dependency graphs. Cross-package task dependencies use the dependsOn field
with "package#task" syntax.
Task definitions
run: {
tasks: {
ci: {
command: 'vp check && vp test && vp build',
dependsOn: ['lint'], // Must complete first
cache: true,
env: ['CI'],
},
lint: {
command: 'vp lint',
cache: true,
},
},
}Nested vp run
When a command contains vp run, Vite Task inlines it as a separate task
rather than spawning a nested process. This keeps output flat and enables
independent caching for each sub-task.
Lifecycle scripts
run: {
enablePrePostScripts: true, // Default: true, workspace root only
}When enabled, running vp run build will automatically run prebuild and
postbuild scripts from package.json if they exist.
Pass-through arguments
Arguments following the task name are forwarded to the underlying command:
vp run test -- --coverage --reporter=verbose Frequently Asked Questions
What is vite-plus?
Use this skill when working with Vite+, vp CLI, or the VoidZero unified toolchain. Triggers on project scaffolding with vp create, migrating existing Vite projects with vp migrate, running dev/build/test/lint/fmt commands, configuring vite.config.ts with lint/fmt/test/run/pack/staged blocks, managing Node.js versions with vp env, monorepo task execution with vp run, and library packaging with vp pack. Also triggers on references to Oxlint, Oxfmt, Rolldown, tsdown, Vitest, or Vite Task in a Vite+ context.
How do I install vite-plus?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill vite-plus in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support vite-plus?
vite-plus works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.