News

Laravel Starter Kits Now Ship with Vite+

Published
Laravel Starter Kits Now Ship with Vite+ image

Every Laravel starter kit now builds with Vite+, the unified toolchain released in beta on July 2, 2026. Taylor Otwell announced the switch on X:

All Laravel starter kits now ship with Vite+.

The work landed in laravel/maestro#60 from Wendell Adriel, and Maestro synced the change out to the React, Vue, Svelte, and Livewire repositories the same day. The pull request touches all starter kit variants and pins vite-plus at 0.3.0.

Vite+ is a single CLI called vp that wraps Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task, and manages your runtime and package manager alongside them. For the starter kits, the practical result is that ESLint and Prettier are no longer part of the frontend setup.

Four Commands Become Two

The Inertia kits previously carried separate lint, lint:check, format, and format:check scripts. Those collapse into vp check, which formats with Oxfmt, lints with Oxlint, and type checks in one pass:

"scripts": {
"build": "vp build",
"build:ssr": "vp build && vp build --ssr",
"dev": "vp dev",
"check": "vp check",
"check:fix": "vp check --fix",
"types:check": "tsc --noEmit"
}

composer ci:check follows the same path, running npm run check where it used to run npm run lint:check and npm run format:check back to back.

Deleting the old toolchain removed eslint.config.js, .prettierrc, and .prettierignore from each Inertia kit, along with roughly a dozen devDependencies: eslint, typescript-eslint, prettier, prettier-plugin-tailwindcss, the ESLint plugins for React, Vue, Svelte, and imports, and globals. The React kit alone dropped 129 lines of ESLint config.

Lint and Format Rules Move Into vite.config

With the standalone config files gone, the rules now live in vite.config.ts under lint and fmt keys. Warnings are treated as failures, and type-aware linting is on:

import { defineConfig, lazyPlugins } from 'vite-plus';
 
export default defineConfig({
plugins: lazyPlugins(() => [
// ...
]),
lint: {
ignorePatterns: [
'vendor/**',
'bootstrap/ssr/**',
'resources/js/actions/**',
'resources/js/components/ui/*',
'resources/js/routes/**',
'resources/js/wayfinder/**',
],
options: {
denyWarnings: true,
typeAware: true,
},
},
fmt: {
printWidth: 80,
tabWidth: 4,
singleQuote: true,
semi: true,
sortTailwindcss: {
functions: ['clsx', 'cn', 'cva'],
entryPoint: 'resources/css/app.css',
},
},
});

Per-Stack Changes

The React kit moved to @vitejs/plugin-react v6 and now runs the React Compiler through @rolldown/plugin-babel rather than the plugin's babel option:

import babel from '@rolldown/plugin-babel';
import react, { reactCompilerPreset } from '@vitejs/plugin-react';
 
// ...
react(),
babel({
presets: [reactCompilerPreset()],
}),

The Svelte kit swapped lucide-svelte for the supported @lucide/svelte package. The Livewire kit got the smallest diff of the four, since it has no TypeScript to lint: two files changed, moving dev and build to vp and wrapping its plugins in lazyPlugins().

Trying It

New applications generated from the starter kits pick this up automatically. To move an existing Vite project across, VoidZero provides a migration command:

vp migrate

The migration guide notes that complex projects may still need manual follow-up, so read it before running this against production code.

The full diff is in laravel/maestro#60, and the Vite+ documentation lives at viteplus.dev.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Filed in

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Taylor disabled GitHub Issues on most Laravel open-source packages. image

Taylor disabled GitHub Issues on most Laravel open-source packages.

Read article
Exclude Vendor and Default Commands in `php artisan dev` image

Exclude Vendor and Default Commands in `php artisan dev`

Read article
The Laracon Archive image

The Laracon Archive

Read article
Group Adjacent Collection Items in Laravel with chunkBy() image

Group Adjacent Collection Items in Laravel with chunkBy()

Read article
Laravel queue:work Now Prints Why the Worker Stopped image

Laravel queue:work Now Prints Why the Worker Stopped

Read article
Sidecar Brings Statamic's Control Panel to Your Existing Markdown Sites image

Sidecar Brings Statamic's Control Panel to Your Existing Markdown Sites

Read article