Vue 3.6 Swaps Rollup for Rolldown and Adopts Vite Plus in a Full Toolchain Overhaul
Framework maintainers who still juggle Rollup, esbuild, and a patchwork of npm scripts can see a concrete, working alternative where one Rust bundler handles every build target and one config file drives the entire developer workflow.
Vue 3.6's beta toolchain drops Rollup and esbuild for the Rust-based Rolldown bundler and adopts Vite Plus for linting, formatting, and Git hooks. A walkthrough of the new monorepo build scripts, macro-based environment stripping, and automated release pipeline shows how the framework now targets seven output formats from a single Rolldown-driven codebase.
The migration centers on a pnpm monorepo where each package declares its own build formats via a `buildOptions` field. A custom `scripts/build.js` parses CLI flags to drive Rolldown, replacing macro constants like `__DEV__` at the AST level to produce separate development and production artifacts for CJS, ESM bundler, ESM browser, and IIFE global builds. Type declarations are generated by oxc's isolated-declaration transformer and then bundled with `rolldown-plugin-dts`.
Developer tooling is consolidated under Vite Plus: a single `vite.config.ts` controls lint rules, formatting preferences, staged pre-commit hooks, and Vitest test globals. The release script uses `semver` and `enquirer` for interactive version bumping, runs `conventional-changelog`, and publishes all workspace packages to npm with automatic tag assignment and rollback on failure.
Rolldown's module graph is designed as a long-lived first-class citizen, which is what lets a single tool handle both one-shot production builds and persistent dev watch mode — a capability Rollup's architecture never supported.
Offloading correctness lint rules to `tsc --noEmit` and disabling them in the faster linter is a pragmatic split that avoids duplicating type-level checks while keeping formatting and style rules fast.
Using `workspace:*` in monorepo dependencies and letting pnpm resolve the actual version at publish time eliminates the manual version-bumping chore that plagues many multi-package projects.
The `externalLiveBindings: false` setting is a small but meaningful optimization: it prevents Rolldown from wrapping re-exports in `Object.defineProperty` getters, shrinking CJS output with no runtime downside for a framework like Vue.