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.
Content types always have feature columns
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, database lifecycle hooks are triggered differently with the various Document Service API methods.
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).
In Strapi 5, the Entity Service API is deprecated in favor of the new Document Service API.
In Strapi 5, the `helper-plugin` is removed. A whole migration reference is available for plugin developers, and codemods will automatically handle some changes.
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, it's no longer possible to get all localized versions with the '?locale=all' parameter.
In Strapi 5, the lockIcon property is replaced by licenseOnly, which affects how the addMenuLink(), addSettingsLink(), and addSettingsLinks() methods from the Admin Panel API work.
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, the shared population strategy is not supported anymore, so components and dynamic zones must be explicitly populated using `on` fragments.
In Strapi 5, users can only use the `better-sqlite3` package for SQLite databases, and the `client` value for it must be set to `sqlite`.
In Strapi 5, only the mysql2 package is supported for MySQL databases.
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, all proxy configuration options are now configured through the 'server.proxy' object in the '/config/server.js|ts' instead of having various option names such as 'globalProxy' and 'proxy' in Strapi v4.
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.
Follow this step-by-step guide to upgrade from Strapi v4 to Strapi 5
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.
Templates have been fully rewritten in Strapi 5 and now are standalone, regular Strapi applications, making it easier to create, distribute, and re-use them.
In Strapi 5, webhooks have been refactored and the `webhook.populateRelations` option will become redundant. This might affect lifecycles expecting the returned relations of create, update and delete to be populated.
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.
Strapi 5 detects what package manager you are using to run the CLI, and uses this package manager to install dependencies.
In Strapi 5, the redux store for the Content Manager has been changed and some redux actions were removed.
In Strapi 5, the getWhere() for permission provider instances has been removed, and users should use provider.values().filter() to replace it.
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 Users & Permissions plugin's `register.allowedFields` configuration option defaults to [].
In Strapi 5, it is not possible to upload a file while creating an entry, so users must upload the file first, and then create the entry with the created file id.
In Strapi 5, Vite is the default bundler and replaces webpack.
A simplified approach of aliasing in Strapi v5.
Strapi 5 brings many new features and improvements, and this page quickly highlights the most important documentation changes.