Vize

Migrate existing tools

Start with the Vite plugin, build your app, then enable checks. Keep existing custom rules and editor tooling until you have compared results on your project. Vize is actively developed; this guide does not claim complete option or diagnostic parity.

Choose what to replace

Source Target Effect Install
@vitejs/plugin-vue Vize compiler Vue 3 SFC compilation in Vite @vizejs/vite-plugin
vue-tsc script vp run typecheck Native Vue type checking Same integration
Vue lint scripts vp run lint Vize Vue rules plus Oxlint Same integration
Vue format scripts vp run fmt Vize for Vue; Oxfmt for other files Same integration

The last three commands are generated by the Vite+ helper. They are custom tasks, distinct from built-in vp lint, vp fmt, and vp check.

Vite+ project

Install Vize into an existing Vue/Vite+ project:

vp install -D @vizejs/vite-plugin

Change vite.config.ts:

import { defineConfig } from "vite-plus";
import vue from "@vitejs/plugin-vue";
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";

export default defineConfig({
  plugins: [vue()],
  compiler: {},
  server: { port: 3000 },
});

The helper registers the Vize compiler and native tasks. Preserve unrelated plugins, aliases, server settings, and tests. An empty compiler object uses the defaults; you can also omit it.

Move supported plugin options to compiler, rather than retaining two Vue compilers:

  plugins: [vue({ template: { compilerOptions: { whitespace: "preserve" } } })],
  compiler: { whitespace: "preserve" },

Check plugin option coverage before moving other options. Vue 2 compatibility modes and experimental bundlers have a different scope.

Run a production build and compare the checks:

vp build
vp run typecheck
vp run lint
vp run fmt:check
vp run check

Generated task names avoid existing package scripts. If check already exists, run vp run vize:check; explicit run.tasks definitions also take precedence. See task names before replacing a CI command.

Ordinary Vite: replace only the compiler

Keep defineConfig from vite and replace the plugin:

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vize from "@vizejs/vite-plugin";

export default defineConfig({
  plugins: [vue()],
  plugins: [vize()],
});
vp install -D @vizejs/vite-plugin
vp exec vite build

Your lint, formatter, and type-checking commands continue to use their existing tools. Vite plugin options live directly in vize({ ... }). Adopt the Vite+ helper later if you want combined tasks.

Replace a check command after comparing output

In a Vite+ project using the helper, these literal script changes opt into the native tasks. Test each change independently:

  "typecheck": "vue-tsc --noEmit",
  "typecheck": "vp run vize:typecheck",
  "lint": "eslint src",
  "lint": "vp run vize:lint",
  "format": "prettier --write src",
  "format": "vp run fmt"

An existing typecheck or lint script makes the helper generate vize:typecheck or vize:lint. Use those collision-safe names in the actual replacement:

{
  "scripts": {
    "typecheck": "vp run vize:typecheck",
    "lint": "vp run vize:lint",
    "format": "vp run fmt"
  }
}

Keep custom ESLint rules that have no equivalent, compare type diagnostics, and review the formatter diff before changing CI. Formatting writes files; vp run fmt:check checks first without writing.

Migrate standalone config into Vite+

Only a standalone CLI/LSP workflow needs a separate vize.config.ts. For integration tasks, move these settings into vite.config.ts:

import { defineConfig } from "vize";
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";

export default defineConfig({
  linter: { preset: "essential" },
  formatter: { printWidth: 100 },
  typeChecker: { strict: true },
  lint: { vize: { preset: "essential" } },
  fmt: { vize: { printWidth: 100 } },
  typecheck: { strict: true },
});

Move the settings, not just the import: the field names differ. Preserve a standalone config when a separate CLI/LSP consumer still needs it. See Configuration for the canonical location per integration.