vite-plus
The developer experience toolchain - vp commands for linting, testing, typechecking, and formatting.
vite-plus (invoked as vp) is the repository’s developer-experience toolchain. It wraps the Vite/Vitest ecosystem with sensible monorepo defaults, so quality gates work identically across apps and libraries with minimal per-package configuration.
What vp owns
| Gate | Command | Notes |
|---|---|---|
| Lint | vp lint |
The per-package lint script. |
| Lint + fix | vp lint:fix |
Auto-fix lint issues. |
| Test | vp test run |
Run tests once (CI mode). |
| Test (watch) | vp test |
Watch mode for development. |
| Typecheck | tsc --noEmit |
Most packages typecheck with plain tsc. |
| Format | vp fmt . |
Root-level formatting. |
| Format check | vp fmt --check |
Verify without editing. |
How packages wire it
Every app’s package.json follows the same shape:
{
"scripts": {
"lint": "vp lint",
"test": "vp test run",
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"vite": "catalog:",
"vite-plus": "catalog:",
"vitest": "catalog:"
}
}
Because vite, vitest, and vite-plus come from the catalog, every package uses the same tool versions without repeating them.
Tests with vite-plus
Tests run through Vitest, driven by vp test. Package-level config (where relevant) lives in vitest.config.ts at the package root, and setup files like vitest.setup.ts are referenced from there. Tests use @effect/vitest’s expect/it - never Vitest’s own expect (see Testing).
Formatting
Formatting is centralized at the root:
pnpm format # vp fmt .
pnpm format:check # verify only
Run pnpm format before committing to avoid formatting drift in CI.
Conventions
- Use
vpfor installs, builds, tests, lint, and typecheck rather than calling underlying binaries directly (per the repo’s AGENTS.md). - Never bypass the catalog. Adding a different Vite/Vitest version locally breaks the shared toolchain.
- Keep package config minimal. vp’s defaults should cover most needs; only add
vitest.config.tswhen a package genuinely needs it.