Skip to content

Migrate all starter kits to Vite+#60

Draft
WendellAdriel wants to merge 14 commits intomainfrom
feat/vite-plus
Draft

Migrate all starter kits to Vite+#60
WendellAdriel wants to merge 14 commits intomainfrom
feat/vite-plus

Conversation

@WendellAdriel
Copy link
Copy Markdown
Member

@WendellAdriel WendellAdriel commented Mar 25, 2026

Summary

  • Migrates React, Svelte, Vue, and Livewire starter kits from Vite to Vite+ for dev, build, and static checks (lint, format, type-check)
  • Replaces ESLint, Prettier, and framework-specific type-check configs with unified Vite+ lint, fmt, and check configuration in vite.config.ts
  • Updates React kits to @vitejs/plugin-react v6 with @rolldown/plugin-babel for React Compiler support
  • Sorts Tailwind classes via Oxfmt across React, Vue, Svelte, and Livewire kits
  • Updates orchestrator lint-kits and ci:check scripts to use the unified vp check command

Benchmark: Vite Plus vs Main

Comparison of npm run build and npm run check performance between feat/vite-plus (Vite Plus) and main (Vite + ESLint + Prettier).

Per Variant

Kit Build main (ms) Build vite-plus (ms) Build Delta Check main (ms) Check vite-plus (ms) Check Delta
react-blank 707 854 +147 (+20,8%) 1174 1168 -6 (-0,5%)
react 1538 1706 +168 (+10,9%) 2051 1730 -321 (-15,7%)
react-workos 1252 1338 +86 (+6,9%) 1620 1484 -136 (-8,4%)
svelte-blank 631 775 +144 (+22,8%) 1088 1324 +236 (+21,7%)
svelte 2246 2320 +74 (+3,3%) 1812 1341 -471 (-26,0%)
svelte-workos 2088 2248 +160 (+7,7%) 1541 1332 -209 (-13,6%)
vue-blank 566 663 +97 (+17,1%) 1406 1274 -132 (-9,4%)
vue 1030 1234 +204 (+19,8%) 2371 1434 -937 (-39,5%)
vue-workos 886 1080 +194 (+21,9%) 2045 1431 -614 (-30,0%)
livewire-blank 309 393 +84 (+27,2%) N/A N/A N/A
livewire 397 502 +105 (+26,4%) N/A N/A N/A
livewire-components 403 482 +79 (+19,6%) N/A N/A N/A
livewire-workos 396 481 +85 (+21,5%) N/A N/A N/A

Per Stack

Stack Build main (ms) Build vite-plus (ms) Build Delta Check main (ms) Check vite-plus (ms) Check Delta
React 1165 1299 +134 (+11,5%) 1615 1460 -155 (-9,6%)
Svelte 1655 1781 +126 (+7,6%) 1480 1332 -148 (-10,0%)
Vue 827 992 +165 (+20,0%) 1941 1380 -561 (-28,9%)
Livewire 376 465 +89 (+23,7%) N/A N/A N/A

Overall

Metric main (ms) vite-plus (ms) Delta
Build 957 1083 +126 (+13,2%)
Check (Inertia only) 1679 1391 -288 (-17,2%)

Build Overhead Analysis

The build slowdown is not caused by Vite itself being slower. It is a fixed startup overhead from the vp CLI wrapper. An isolated test on the same project (Vue Blank, feat/vite-plus branch) running vp build vs vite build directly confirms this:

Command Run 1 Run 2 Run 3 Run 4 Run 5 Avg
vp build 487ms 443ms 459ms 442ms 443ms ~455ms
vite build 384ms 374ms 363ms 368ms 358ms ~369ms

The vp binary adds a consistent ~80ms startup cost to load and parse the extended config (lint/fmt sections in vite.config.ts), even though those sections are not used during build. The actual Vite build pipeline is unchanged.

Replace ESLint, Prettier, and their plugins with vite-plus which
provides unified linting (Oxlint), formatting (Oxfmt), and type
checking (tsgolint) via a single `vp check` command.

- Switch vite.config.ts defineConfig import to vite-plus
- Add lint and fmt configuration blocks to vite.config.ts
- Replace ~13 ESLint/Prettier devDependencies with vite-plus
- Consolidate scripts to check/check:fix while keeping types:check
- Remove eslint.config.js, .prettierrc, and .prettierignore
- Remove baseUrl from tsconfig.json (flagged by tsgolint)
Replace ESLint, Prettier, and their plugins with vite-plus which
provides unified linting (Oxlint), formatting (Oxfmt), and type
checking (tsgolint) via a single `vp check` command.

- Switch vite.config.ts defineConfig import to vite-plus
- Add lint and fmt configuration blocks to vite.config.ts
- Replace ESLint/Prettier devDependencies with vite-plus
- Consolidate scripts to check/check:fix while keeping types:check
- Remove eslint.config.js and .prettierrc
Replace ESLint, Prettier, and their plugins with vite-plus which
provides unified linting (Oxlint), formatting (Oxfmt), and type
checking (tsgolint) via a single `vp check` command.

- Switch vite.config.ts defineConfig import to vite-plus
- Add lint and fmt configuration blocks to vite.config.ts
- Replace ESLint/Prettier devDependencies with vite-plus
- Consolidate scripts to check/check:fix while keeping types:check
- Remove eslint.config.js
Switch vite.config.js defineConfig import to vite-plus and add
vite-plus as a dependency. Livewire kits only use vp dev/build
with no frontend static checks.
Replace the three separate npm scripts (lint:check, format:check,
types:check) with npm run check (vp check) followed by npm run
types:check for framework-specific type verification via tsc,
vue-tsc, or svelte-check.
Replace separate lint and format passes with a single check:fix
pass that runs vp check --fix (Oxlint + Oxfmt in one step).
Set printWidth: 80, tabWidth: 4, and add fmt ignorePatterns for
UI components, mail views, and GitHub workflows to match the old
.prettierrc and .prettierignore behavior. Enable Tailwind class
sorting and import sorting without newlines between groups.
Automated Tailwind class ordering applied by the Vite+ formatter
(Oxfmt sortTailwindcss) to match the canonical class sort order.
Automated Tailwind class ordering applied by the Vite+ formatter
(Oxfmt sortTailwindcss) to match the canonical class sort order.
With plugin-react v6, Babel support is provided via @rolldown/plugin-babel
instead of the built-in babel option. Updates the vite config to use
reactCompilerPreset() from the new package.
@WendellAdriel WendellAdriel marked this pull request as draft April 3, 2026 13:27
@jrd-lewis
Copy link
Copy Markdown

The Format Frontend and Lint Frontend steps in the Inertia kits' lint.yml GitHub workflow will also have to be updated since the format and lint scripts are removed in package.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants