Skip to content
Africa OS Knowledgebase
Esc
navigateopen⌘Jpreview
On this page

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 vp for 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.ts when a package genuinely needs it.

Last updated on August 18, 2026