Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 46 additions & 23 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,54 +87,77 @@ Tests use Vitest with:

# Using Vite+, the Unified Toolchain for the Web

This project is using Vite+, a modern toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, and Oxfmt. Vite+ wraps these tools and package manager commands in a single, global CLI called `vite`. Vite+ is distinct from Vite, but it invokes Vite through `vite dev` and `vite build`.
This project is using Vite+, a unified toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Vite+ wraps runtime management, package management, and frontend tooling in a single global CLI called `vp`. Vite+ is distinct from Vite, but it invokes Vite through `vp dev` and `vp build`.

## Vite+ Workflow

`vite` is a global binary that handles the full development lifecycle. Run `vite help` to print a list of commands and `vite <command> --help` for information about a specific command.
`vp` is a global binary that handles the full development lifecycle. Run `vp help` to print a list of commands and `vp <command> --help` for information about a specific command.

### Start

- create - Create a new project from a template
- migrate - Migrate an existing project to Vite+
- config - Configure hooks and agent integration
- staged - Run linters on staged files
- install (`i`) - Install dependencies
- env - Manage Node.js versions

### Vite+ Commands
### Develop

- dev - Run the development server
- build - Build for production
- check - Run format, lint, and TypeScript type checks
- lint - Lint code
- test - Run tests
- fmt - Format code
- lib - Build library
- new - Create a new monorepo package (in-project) or a new project (global)
- run - Run tasks from `package.json` scripts
- test - Run tests

### Execute

- run - Run monorepo tasks
- exec - Execute a command from local `node_modules/.bin`
- dlx - Execute a package binary without installing it as a dependency
- cache - Manage the task cache

### Build

These commands map to their corresponding tools. For example, `vite dev --port 3000` runs Vite's dev server and works the same as Vite. `vite test` runs JavaScript tests through the bundled Vitest. The versions of individual tools can be checked using `vite <command> --version`. For example, `vite lint --version` prints the bundled Oxlint version, and `vite test --version` prints the bundled Vitest version. This is useful when researching documentation, features, and bugs.
- build - Build for production
- pack - Build libraries
- preview - Preview production build

### Package Manager Commands
### Manage Dependencies

Vite+ automatically detects and wraps the underlying package manager such as pnpm, npm, or Yarn through the `packageManager` field in `package.json` or package manager-specific lockfiles.

- install - Install all dependencies, or add packages if package names are provided
- add - Add packages to dependencies
- remove - Remove packages from dependencies
- dlx - Execute a package binary without installing it as a dependency
- info - View package information from the registry, including latest versions
- link - Link packages for local development
- remove (`rm`, `un`, `uninstall`) - Remove packages from dependencies
- update (`up`) - Update packages to latest versions
- dedupe - Deduplicate dependencies
- outdated - Check for outdated packages
- list (`ls`) - List installed packages
- why (`explain`) - Show why a package is installed
- info (`view`, `show`) - View package information from the registry
- link (`ln`) / unlink - Manage local package links
- pm - Forward a command to the package manager
- unlink - Unlink packages
- update - Update packages to their latest versions
- why - Show why a package is installed

### Maintain

- upgrade - Update `vp` itself to the latest version

These commands map to their corresponding tools. For example, `vp dev --port 3000` runs Vite's dev server and works the same as Vite. `vp test` runs JavaScript tests through the bundled Vitest. The version of all tools can be checked using `vp --version`. This is useful when researching documentation, features, and bugs.

## Common Pitfalls

- **Using the package manager directly:** Do not use pnpm, npm, or Yarn directly. Vite+ can handle all package manager operations.
- **Always use Vite commands to run tools:** Don't attempt to run `vite vitest` or `vite oxlint`. They do not exist. Use `vite test` and `vite lint` instead.
- **Running scripts:** Vite+ commands take precedence over `package.json` scripts. If there is a `test` script defined in `scripts` that conflicts with the built-in `vite test` command, run it using `vite run test`.
- **Always use Vite commands to run tools:** Don't attempt to run `vp vitest` or `vp oxlint`. They do not exist. Use `vp test` and `vp lint` instead.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use “Vite+ commands” wording for consistency.

“Always use Vite commands” conflicts with the rest of the page’s vp/Vite+ terminology.

Based on learnings, this repo standardizes on Vite+ (vp) workflows and commands.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CLAUDE.md` at line 150, Replace the phrase "Always use Vite commands to run
tools:" with "Always use Vite+ commands to run tools:" to match the repo's
`vp`/Vite+ terminology, and keep the examples that follow (`vp vitest`/`vp
oxlint` -> `vp test` and `vp lint`) unchanged; specifically edit the string
"Always use Vite commands to run tools:" so it reads "Always use Vite+ commands
to run tools:" wherever that sentence appears (the line that currently lists `vp
vitest` and `vp oxlint` should continue to be corrected to `vp test` and `vp
lint` as shown).

- **Running scripts:** Vite+ built-in commands (`vp dev`, `vp build`, `vp test`, etc.) always run the Vite+ built-in tool, not any `package.json` script of the same name. To run a custom script that shares a name with a built-in command, use `vp run <script>`. For example, if you have a custom `dev` script that runs multiple services concurrently, run it with `vp run dev`, not `vp dev` (which always starts Vite's dev server).
Comment on lines 149 to +151
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The updated “Common Pitfalls” guidance says not to use pnpm/npm/Yarn directly (line 149), but the earlier “Common Commands” section at the top of this document still instructs using pnpm install / pnpm test. Please align these sections (e.g., update the earlier commands to vp install / vp test, or clarify when direct pnpm usage is acceptable) to avoid contradictory contributor guidance.

Copilot uses AI. Check for mistakes.
- **Do not install Vitest, Oxlint, Oxfmt, or tsdown directly:** Vite+ wraps these tools. They must not be installed directly. You cannot upgrade these tools by installing their latest versions. Always use Vite+ commands.
- **Use Vite+ wrappers for one-off binaries:** Use `vp dlx` instead of package-manager-specific `dlx`/`npx` commands.
- **Import JavaScript modules from `vite-plus`:** Instead of importing from `vite` or `vitest`, all modules should be imported from the project's `vite-plus` dependency. For example, `import { defineConfig } from 'vite-plus';` or `import { expect, test, vi } from 'vite-plus/test';`. You must not install `vitest` to import test utilities.
- **Type-Aware Linting:** There is no need to install `oxlint-tsgolint`, `vite lint --type-aware` works out of the box.
- **Type-Aware Linting:** There is no need to install `oxlint-tsgolint`, `vp lint --type-aware` works out of the box.

## Review Checklist for Agents

- [ ] Run `vite install` after pulling remote changes and before getting started.
- [ ] Run `vite lint`, `vite fmt`, and `vite test` to validate changes.
- [ ] Run `vp install` after pulling remote changes and before getting started.
- [ ] Run `vp check` and `vp test` to validate changes.
<!--VITE PLUS END-->

<!--injected-by-vite-plus-v0.1.8-->
Comment on lines +159 to 163
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLAUDE.md now has two Vite+ sections: one ending at <!--VITE PLUS END--> (line 161) and another injected section starting immediately after <!--injected-by-vite-plus-v0.1.8--> (line 163). The injected section contains different guidance (e.g. its “Running scripts” bullet differs), so readers may get conflicting instructions. Consider removing the duplicate section and keeping a single canonical Vite+ block (or ensure the injected block is the only one and is up to date).

Copilot uses AI. Check for mistakes.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

It appears the vp config command, which refreshed this file, has duplicated the 'Using Vite+' section. The duplicated content starts on the next line (164). Please remove the duplicated block from line 164 to 241 to keep the documentation clean.

Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,12 @@
"tshy": "^3.3.2",
"tshy-after": "^1.4.1",
"typescript": "^5.9.3",
"vite-plus": "^0.1.12",
"vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.12"
"vite-plus": "^0.1.13",
"vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.13"
},
"overrides": {
"vite": "npm:@voidzero-dev/vite-plus-core@^0.1.12",
"vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.12"
"vite": "npm:@voidzero-dev/vite-plus-core@^0.1.13",
"vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.13"
},
"tshy": {
"exports": {
Expand All @@ -121,8 +121,8 @@
"packageManager": "pnpm@10.32.1",
"pnpm": {
"overrides": {
"vite": "npm:@voidzero-dev/vite-plus-core@^0.1.12",
"vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.12"
"vite": "npm:@voidzero-dev/vite-plus-core@^0.1.13",
"vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.13"
},
"peerDependencyRules": {
"allowAny": [
Expand Down
Loading
Loading