Apollo Server v3 upgraded to Apollo Server v4
The upgrade from Apollo Server v3 to v4 and graphql ^15 to ^16.
The upgrade from Apollo Server v3 to v4 and graphql ^15 to ^16.
View the list of all breaking changes introduced between Strapi v4 and v5.
In Strapi 5, components and dynamic zones do not return an `id` with REST API requests so it's not possible to partially update them.
In Strapi 5, content-types with Draft & Publish disabled always have the publishedAt value set to a date.
In Strapi 5, core service methods use the Document Service API instead of the Entity Service API.
Database identifiers are shortened in Strapi v5 and can't be longer than 55 characters to avoid issues with identifiers that are too long.
In Strapi 5, the 'defaultIndex' option is removed from the 'public' middleware.
Documents should be called by their documentId in Content API calls (REST API & GraphQL).
Draft & Publish is always enabled in Strapi v5 and this is reflected in the Content API models.
In Strapi 5, the Entity Service API is deprecated in favor of the new Document Service API.
In Strapi 5, the `helper-plugin` is deprecated. A whole migration reference is available for plugin developers.
In Strapi 5, the Content Manager is a plugin, which affects the injectContentManagerComponent() method, replaced by getPlugin('content-manager').injectComponent().
Internationalization (i18n) is now part of the Strapi core and no longer a plugin, and this impacts how the locale parameter is sent and accessed.
In Strapi 5, database lifecycle hooks are triggered differently with the various Document Service API methods, mainly due to the new way the Draft & Publish feature works.
In Strapi 5, it's no longer possible to get all localized versions with the '?locale=all' parameter.
The latest major version of Strapi is Strapi 5. The upgrade tool and its codemods should automate some parts of the migration from v4 to Strapi 5. Additional information is also given below about breaking changes and dedicated migration resources for specific topics.
Modules like `api::myapi` and `plugin::upload` should no longer be accessed in the Strapi config using `api.myapi` and `plugin.upload`, but instead using `api::myapi` and `plugin::upload`.
MySQL v5 is not supported in Strapi v5 anymore.
In Strapi 5, the Entity Service API is deprecated, and for the findPage() method you should use the Document Service API's findMany() method instead.
In Strapi 5,
In Strapi 5, only the mysql2 package is supported for MySQL databases, which is
In Strapi 5, 'publicationState' can no longer be used in Content API calls. The new status parameter can be used and accepts 2 different values, draft and published.
In Strapi 5, some attributes and content types names are reserved, and all fields or content types using the reserved names should be renamed before migrating to prevent data loss.
In Strapi 5, REST API input is validated by default in controllers, instead of accepting invalid data and sanitizing it silently.
The default log level of the middleware logger in Strapi 5 is 'http'.
In Strapi 5, some env-only configuration options are handled by the server configuration
In Strapi 5, some variables have been renamed for the Mailgun provider options, dropping support for some legacy variables that were deprecated in Strapi v4.
In Strapi 5, sorting by id is no longer possible to sort by chronological order, and you should use createdAt instead.
In Strapi 5, the response format has been simplified and flattened, and attributes of requested content are no longer wrapped in an attributes object.
Strapi 5 uses koa-body v6, which updates node formidable to v2.
Strapi 5 uses react-router-dom v6. This impacts the links added to Global Settings or to the Menu using the Admin Panel API.
In Strapi 5, the way import are done, through the application init function or through factories, has been updated.
In Strapi 5, container methods can be accessed directly from the strapi class.
In Strapi 5, the 'strapi-utils' core package has been refactored. This page lists the additions, removals, and other updates.
In Strapi 5, the `strapi.fetch` object is now wrapping node Fetch API instead of node-fetch.
Strapi 5 has strict requirements on the configuration filenames allowed to be loaded.
Breaking change description
In Strapi 5, some admin panel hooks have been removed from the Redux store and a new `useDocumentLayout` hook is introduced.
In Strapi 5, there is no `content-manager_rbacManager` anymore, and the regular permissions system is used instead.
In Strapi 5, the redux store for the Content Manager has been changed and some redux actions were removed.
In Strapi 5, the GraphQL API has been updated. It handles the new, flattened response format, and can also now accept Relay-style queries.
The `isSupportedImage` method is removed in Strapi 5. Users should use `isImage` or `isOptimizableImage` instead.
In Strapi 5, the localizations field does not exist anymore, and queries should use the locale parameter instead. Not all Strapi v4 use cases might be directly achievable.
In Strapi 5, The Users & Permissions plugin's `register.allowedFields` configuration option defaults to [].
In Strapi 5, Vite is the default bundler and replaces webpack.
A simplified approach of aliasing in Strapi v5.
Strapi 5 beta brings many new features and improvements, and this page quickly highlights the most important documentation changes.