This guide provides guidance for updating the Vendure Framework to a newer version.
First, check the changelog for an overview of the changes and any breaking changes in the next version.
In your project's package.json file, find all the @vendure/... packages and change the version
to the latest. All the Vendure packages have the same version, and are all released together.
Then run npm install or yarn install depending on which package manager you prefer.
Vendure v4 raises the minimum Node.js version and moves the Dashboard's build tooling to Vite 8, which bundles with Rolldown. Apart from updating the @vendure/... packages, make the following changes to your project.
Vendure v4 requires Node.js >=22.12.0. Node.js v20 reached end-of-life on 30 April 2026 and is no longer supported.
@vendure/dashboard declares vite as a peer dependency (^8.0.0), so your project's own vite dependency drives the Dashboard build. Projects created with @vendure/create before v4 list vite at ^7. Update it:
If your vite.config.mts uses __dirname, use import.meta.dirname instead. Vite 8 warns about , because its planned native config loader does not support it:
__dirnameIf your Vite config adds @vitejs/plugin-react itself, update it to v6. Version 6 no longer accepts a babel option; Babel plugins go through @rolldown/plugin-babel instead. Options under build.rollupOptions are now build.rolldownOptions.
The Dashboard compiles Lingui macros (in its own source and in your Dashboard extensions) with Babel. In v3 a file that Babel failed to compile was logged and skipped. In v4 the error fails the build, with the file and location of the problem.
If you test your plugins with Vitest, update to Vitest 4, which is the first version that supports Vite 8. See the Vitest 4 migration guide for its other changes.
If you use unplugin-swc to compile decorators in your tests, update it to v2:
Older unplugin-swc versions only turn off esbuild, which Vite 8 no longer uses. Vite's own Oxc transform then compiles your TypeScript before SWC does, so SWC options such as useDefineForClassFields: false are no longer reliably applied. See the Testing guide for a complete configuration.
Vendure generally follows the SemVer convention for version numbering. This means that breaking API changes will only be introduced with changes to the major version (the first of the 3 digits in the version).
However, there are some exceptions to this rule:
Any instances of these exceptions will be clearly indicated in the Changelog. The reasoning for these exceptions is discussed in the Versioning policy RFC.
Major version upgrades (e.g. v1.x to v2.x) can include:
Every release will be accompanied by an entry in the changelog, listing the changes in that release. And breaking changes are clearly listed under a BREAKING CHANGE heading.
Database changes are one of the most common causes for breaking changes. In most cases, the changes are minor (such as the addition of a new column) and non-destructive (i.e. performing the migration has no risk of data loss).
However, some more fundamental changes occasionally require a careful approach to database migration in order to preserve existing data.
The key rule is never run your production instance with the synchronize option set to true. Doing so can cause inadvertent data loss in rare cases.
For any database schema changes, it is advised to:
If you are using a code-generation tool (such as graphql-code-generator) for your custom plugins or storefront, it is a good idea to re-generate after upgrading, which will catch any errors caused by changes to the GraphQL schema.
If you are using Vendure providers (services, JobQueue, EventBus etc.) in your custom plugins, you should look out for breakages caused by changes to those services. Major changes will be listed in the changelog, but occasionally internal changes may also impact your code.
The best way to check whether this is the case is to build your entire project after upgrading, to see if any new TypeScript compiler errors emerge.
Architecture reviews, custom plugin work, migrations, ongoing support. Get a hand from the team that builds Vendure.
Talk to the team