diff --git a/docs/release_notes/ibexa_dxp_v5.0.md b/docs/release_notes/ibexa_dxp_v5.0.md
new file mode 100644
index 0000000000..773c4c99a4
--- /dev/null
+++ b/docs/release_notes/ibexa_dxp_v5.0.md
@@ -0,0 +1,360 @@
+---
+description: Ibexa DXP v5.0 incorporates features brought by LTS Updates from previous versions, brings upgrades to the tech stack and improvements to developer experience.
+title: Ibexa DXP v5.0 LTS
+month_change: true
+---
+
+
+
+[[= release_notes_filters('Ibexa DXP v5.0 LTS', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
+
+
+
+[[% set version = 'v5.0.0' %]]
+[[= release_note_entry_begin("Ibexa DXP " + version, '2025-07-22', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
+
+### Notable changes
+
+This version incorporates into the product numerous features brought by [LTS Updates] from previous versions, brings upgrades to the tech stack and improvements to developer experience.
+
+#### AI Actions
+
+The AI Actions feature enhances the usability and flexibility of [[= product_name =]] by harnessing the potential of artificial intelligence to automate time-consuming editorial tasks.
+By default, the AI Actions feature can help users with their work in following scenarios:
+
+- Refining text: when editing a content item, users can request that a passage selected in online editor is modified, for example, by adjusting the length of the text, changing its tone, or correcting linguistic errors
+- Generating alternative text: when working with images, users can ask AI to generate alternative text for them, which helps improve accessibility and SEO
+
+
+
+AI Actions integrate with [Ibexa Connect]([[= connect_doc =]]), giving you an opportunity to build complex data transformation workflows without having to rely on custom code.
+
+For more information, see [AI Actions product guide](ai_actions_guide.md).
+
+#### Discounts [[% include 'snippets/commerce_badge.md' %]]
+
+With Discounts, you can temporarily or permanently reduce prices on specific products or categories, making deals more attractive to potential buyers.
+
+Use them to encourage first-time purchases, reward loyal customers, promote new or slow-moving items, or drive sales during seasonal events.
+
+By displaying discounted prices clearly in the catalog or cart, businesses can create a sense of urgency, increase customer satisfaction, and ultimately boost revenue.
+
+
+
+For more information, see [Discounts product guide](discounts_guide.md).
+
+#### Date and time attribute
+
+The Date and time attributes allow you to represent date and time values as part of the product specification in the [Product Information Management](pim_guide.md) system.
+
+For more information, see [Date and time attributes](date_and_time.md).
+
+#### Symbol attribute
+
+The Symbol attributes allow you to efficiently represent the string-based data as part of the product specification in the [Product Information Management](pim_guide.md) system.
+
+For more information, see [Symbol attributes](symbol_attribute_type.md).
+
+#### Collaboration
+
+With Collaboration, multiple users can invite each other to work on the same content.
+It is a starting point for future functionalities in the collaboration domain.
+
+
+
+For more information, see [Collaboration PHP API](../api/php_api/php_api_reference/namespaces/ibexa-contracts-collaboration.html) and [Share PHP API](../api/php_api/php_api_reference/namespaces/ibexa-contracts-share.html).
+
+### Software architecture upgrades
+
+With improved compatibility, performance and increased security, as well as better developer experience in mind, [[= product_name_base =]] decided to introduce several significant tech stack upgrades.
+
+For a full list of updated system requirements, see [Requirements](../getting_started/requirements.md).
+
+#### Symfony 7.3
+
+With this release, [[= product_name =]] moves to Symfony 7.3 from the previously used versions of Symfony.
+
+For details, see [Symfony 7.3](https://symfony.com/blog/symfony-7-3-curated-new-features).
+
+#### Doctrine 3.9
+
+By moving to Doctrine 3.9, [[= product_name =]] brings developers better performance, cleaner code, and stronger foundation for a more modern and maintainable application.
+
+#### PHP 8.3
+
+With performance, coding safety and security in mind, with this version, [[= product_name =]] moves to [PHP 8.3](https://www.php.net/releases/8.3/en.php) and drops support for lower versions of the language.
+
+#### OpenAPI support
+
+Adding support for generating the [OpenAPI](https://www.openapis.org/) specification for our REST API makes future changes more manageable, and helps our partners automatically generate REST API clients.
+
+For more information, see [REST API usage](https://doc.ibexa.co/en/latest/api/rest_api/rest_api_usage/rest_api_usage/#openapi-support).
+
+Support for serialization and deserialization of REST payloads with the [Symfony Serializer](https://symfony.com/doc/current/serializer.html) component improves data reliability and simplifies debugging.
+
+#### React 19
+
+[[= product_name =]]'s Back Office now uses [React 19](https://react.dev/blog/2024/12/05/react-19).
+This upgrade enhances maintainability, unlocks new UI capabilities, and simplifies future feature development.
+
+### Developer experience
+
+#### New packages
+
+The following packages have been introduced in [[= product_name =]] v5.0.0:
+
+- ibexa/collaboration
+- ibexa/connector-ai
+- ibexa/connector-openai
+- ibexa/discounts
+- ibexa/discounts-codes
+- ibexa/product-catalog-date-time-attribute
+- ibexa/product-catalog-symbol-attribute
+- ibexa/share
+
+#### REST APIs
+
+[[= product_name =]] v5.0.0 adds REST API coverage for the following features:
+
+- AI Actions:
+ - Action Configurations
+ - Action Types
+- Discounts
+- Collaboration
+
+#### PHP API
+
+The PHP API has been expanded with the following classes and interfaces:
+
+??? note "AI Actions"
+
+ - [`Ibexa\Contracts\ConnectorAi\Action\Action`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Action.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\ActionContext`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionContext.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\ActionFactoryInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionFactoryInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\ActionHandlerInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionHandlerInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\ActionHandlerResolverInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionHandlerResolverInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\GenerateAltTextAction`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-GenerateAltTextAction.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\LLMBaseActionTypeInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-LLMBaseActionTypeInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\RefineTextAction`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-RefineTextAction.html)
+ - [`Ibexa\Contracts\ConnectorAi\Action\RuntimeContext`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-RuntimeContext.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationCreateStruct`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationCreateStruct.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationCopyStruct`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationCopyStruct.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationListInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationListInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationOptions`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationOptions.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationQuery`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationQuery.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationUpdateStruct`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationUpdateStruct.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionHandlerOptionsFormMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionHandlerOptionsFormMapperInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionTypeOptionsFormMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionTypeOptionsFormMapperInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\OptionsFormatterInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-OptionsFormatterInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionType\ActionTypeFactoryInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-ActionTypeFactoryInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionType\ActionTypeInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-ActionTypeInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionType\ActionTypeRegistryInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-ActionTypeRegistryInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionType\OptionsValidatorError`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-OptionsValidatorError.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionType\OptionsValidatorInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-OptionsValidatorInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionType\OptionsValidatorRegistryInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-OptionsValidatorRegistryInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfigurationInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfigurationInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfigurationServiceDecorator`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfigurationServiceDecorator.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfigurationServiceInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfigurationServiceInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionHandlerRegistryInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionHandlerRegistryInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionResponseInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionResponseInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionServiceDecorator`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionServiceDecorator.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionServiceInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionServiceInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\AdapterAwareActionInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-AdapterAwareActionInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\DataType`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-DataType.html)
+ - [`Ibexa\Contracts\ConnectorAi\PromptResolverInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-PromptResolverInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\Prompt\PromptFactory`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Prompt-PromptFactory.html)
+ - [`Ibexa\Contracts\ConnectorAi\Prompt\PromptInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Prompt-PromptInterface.html)
+ - [`Ibexa\Contracts\ConnectorAi\PromptResolverInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-PromptResolverInterface.html)
+ - [`Ibexa\Contracts\ConnectorOpenAi\ClientProviderInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorOpenAi-ClientProviderInterface.html)
+
+??? note "Discounts"
+
+ - [`Ibexa\Contracts\Discounts\DiscountConditionCriterionMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountConditionCriterionMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\DiscountFormMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\DiscountPrioritizationStrategyInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountPrioritizationStrategyInterface.html)
+ - [`Ibexa\Contracts\Discounts\DiscountServiceDecorator`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceDecorator.html)
+ - [`Ibexa\Contracts\Discounts\DiscountServiceInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html)
+ - [`Ibexa\Contracts\Discounts\DiscountValueFormatterInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountValueFormatterInterface.html)
+ - [`Ibexa\Contracts\Discounts\DiscountVariablesResolverInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountVariablesResolverInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\Form\DiscountValueFormTypeMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-DiscountValueFormTypeMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\Form\FormThemeProviderInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-FormThemeProviderInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\FormMapper\ConditionsMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-ConditionsMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\FormMapper\DiscountValueMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-DiscountValueMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\FormMapper\GeneralPropertiesMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-GeneralPropertiesMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\FormMapper\ProductConditionsMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-ProductConditionsMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\FormMapper\StepDataObjectMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-StepDataObjectMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Admin\FormMapper\UserConditionsMapperInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-UserConditionsMapperInterface.html)
+ - [`Ibexa\Contracts\Discounts\Exception\DiscountConditionNotFoundException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountConditionNotFoundException.html)
+ - [`Ibexa\Contracts\Discounts\Exception\DiscountExpressionInvalidArgumentException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountExpressionInvalidArgumentException.html)
+ - [`Ibexa\Contracts\Discounts\Exception\DiscountExpressionRuntimeException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountExpressionRuntimeException.html)
+ - [`Ibexa\Contracts\Discounts\Exception\DiscountNotFoundException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountNotFoundException.html)
+ - [`Ibexa\Contracts\Discounts\Exception\DiscountRuleNotFoundException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountRuleNotFoundException.html)
+ - [`Ibexa\Contracts\Discounts\Exception\DiscountValueResolutionException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountValueResolutionException.html)
+ - [`Ibexa\Contracts\Discounts\Policy\AbstractDiscountPolicy`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-AbstractDiscountPolicy.html)
+ - [`Ibexa\Contracts\Discounts\Policy\Create`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Create.html)
+ - [`Ibexa\Contracts\Discounts\Policy\Delete`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Delete.html)
+ - [`Ibexa\Contracts\Discounts\Policy\Disable`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Disable.html)
+ - [`Ibexa\Contracts\Discounts\Policy\Enable`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Enable.html)
+ - [`Ibexa\Contracts\Discounts\Policy\Update`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Update.html)
+ - [`Ibexa\Contracts\Discounts\Policy\View`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-View.html)
+ - [`Ibexa\Contracts\Discounts\Value\CartDiscountConditionInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-CartDiscountConditionInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountConditionInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountConditionInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountExpressionAwareInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountExpressionAwareInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountListInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountListInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountRuleInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountRuleInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountTranslationInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountTranslationInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountType`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountType.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountValueInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountValueInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\Struct\DiscountCreateStruct`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountCreateStruct.html)
+ - [`Ibexa\Contracts\Discounts\Value\Struct\DiscountStructInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountStructInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountTranslationStruct`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountTranslationStruct.html)
+ - [`Ibexa\Contracts\Discounts\Value\DiscountUpdateStruct`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountUpdateStruct.html)
+ - [`Ibexa\Contracts\Discounts\Value\TranslationAwareDiscountStructInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-TranslationAwareDiscountStructInterface.html)
+ - [`Ibexa\Contracts\Discounts\Value\TranslationAwareDiscountStructTrait`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-TranslationAwareDiscountStructTrait.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeNotFoundException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeNotFoundException.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeRateLimitExceededException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeRateLimitExceededException.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeUnusableException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeUnusableException.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeUserInvalidArgumentException`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeUserInvalidArgumentException.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Value\DiscountCodeUsageInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-DiscountCodeUsageInterface.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Value\DiscountCodeUser`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-DiscountCodeUser.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Value\Query\DiscountCodeUsageQuery`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Query-DiscountCodeUsageQuery.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Value\Struct\DiscountCodeCreateStruct `](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Struct-DiscountCodeCreateStruct.html)
+ - [`Ibexa\Contracts\DiscountsCodes\Value\StructDiscountCodeUpdateStruct `](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Struct-DiscountCodeUpdateStruct.html)
+
+??? note "PIM Attributes"
+
+ - [`Ibexa\Contracts\ProductCatalogDateTimeAttribute`](../api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalogdatetimeattribute.html)
+ - [Ibexa\Contracts\ProductCatalogSymbolAttribute](../api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalogsymbolattribute.html)
+
+#### Search Criteria
+
+The following search criteria have been added in the v5.0 release:
+
+??? note "AI Actions"
+
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Enabled`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Enabled.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Identifier`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Identifier.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\LogicalAnd`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-LogicalAnd.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\LogicalOr`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-LogicalOr.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Name`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Name.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Type`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Type.html)
+
+??? note "Discounts"
+
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\CreatedAtCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-CreatedAtCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\CreatorCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-CreatorCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\EndDateCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-EndDateCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\IdentifierCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IdentifierCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\IsEnabledCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IsEnabledCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\LogicalAnd`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-LogicalAnd.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\LogicalOr`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-LogicalOr.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\NameCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-NameCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\PriorityCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-PriorityCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\StartDateCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-StartDateCriterion.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\TypeCriterion`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-TypeCriterion.html)
+
+??? note "PIM Attributes"
+
+ - [`Ibexa\Contracts\ProductCatalogDateTimeAttribute\Search\Criterion\DateTimeAttribute`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogDateTimeAttribute-Search-Criterion-DateTimeAttribute.html)
+ - [`Ibexa\Contracts\ProductCatalogDateTimeAttribute\Search\Criterion\DateTimeAttributeRange`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogDateTimeAttribute-Search-Criterion-DateTimeAttributeRange.html)
+ - [`Ibexa\Contracts\ProductCatalogSymbolAttribute\Search\Criterion\SymbolAttribute`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogSymbolAttribute-Search-Criterion-SymbolAttribute.html)
+
+#### Sort Clauses
+
+The following sort clauses have been added in the v5.0 release:
+
+??? note "AI Actions"
+
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\SortClause\Enabled`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Enabled.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\SortClause\Id`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Id.html)
+ - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\SortClause\Identifier`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Identifier.html)
+
+??? note "Discounts"
+
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\CreatedAt`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-CreatedAt.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\EndDate`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-EndDate.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Id`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Id.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Identifier`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Identifier.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Priority`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Priority.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\StartDate`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-StartDate.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Type`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Type.html)
+ - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\UpdatedAt`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-UpdatedAt.html)
+
+#### Events
+
+The following events have been added in the v5.0 release:
+
+??? note "AI Actions"
+
+ - [`\Ibexa\Contracts\ConnectorAi\Action\Event\BeforeExecuteEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Event-BeforeExecuteEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\Action\Event\ExecuteEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Event-ExecuteEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\BeforeCreateActionConfigurationEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-BeforeCreateActionConfigurationEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\CreateActionConfigurationEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-CreateActionConfigurationEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\BeforeUpdateActionConfigurationEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-BeforeUpdateActionConfigurationEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\UpdateActionConfigurationEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-UpdateActionConfigurationEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\BeforeDeleteActionConfigurationEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-BeforeDeleteActionConfigurationEvent.html)
+ - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\DeleteActionConfigurationEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-DeleteActionConfigurationEvent.html)
+ - [`Ibexa\Contracts\ConnectorAi\Events\ContextEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Events-ContextEvent.html)
+ - [`Ibexa\Contracts\ConnectorAi\Events\ResolveActionConfigurationWidgetConfigEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Events-ResolveActionConfigurationWidgetConfigEvent.html)
+ - [`Ibexa\Contracts\ConnectorAi\Events\ResolveActionHandlerEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Events-ResolveActionHandlerEvent.html)
+
+??? note "Discounts"
+
+ - [`\Ibexa\Contracts\Discounts\Event\BeforeCreateDiscountEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeCreateDiscountEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\CreateDiscountEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\BeforeDeleteDiscountEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeDeleteDiscountEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\DeleteDiscountEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-DeleteDiscountEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\BeforeUpdateDiscountEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeUpdateDiscountEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\UpdateDiscountEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-UpdateDiscountEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\CreateDiscountCreateStructEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountCreateStructEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\CreateDiscountUpdateStructEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountUpdateStructEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\CreateFormDataEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateFormDataEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\MapDiscountToFormDataEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-MapDiscountToFormDataEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\Step\CreateFormDataEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateFormDataEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\Step\MapCreateDataToStructEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapCreateDataToStructEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\Step\MapDiscountToFormDataEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-MapDiscountToFormDataEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Event\Step\MapUpdateDataToStructEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapUpdateDataToStructEvent.html)
+ - [`\Ibexa\Contracts\Discounts\Admin\Form\Event\PreDiscountCreateEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Event-PreDiscountCreateEvent.html)
+ - [`\Ibexa\Contracts\DiscountsCodes\Event\BeforeDiscountCodeApplyEvent`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Event-BeforeDiscountCodeApplyEvent.html)
+
+#### Twig functions
+
+The following Twig functions have been added in the v5.0 release:
+
+- [`ibexa_ai_config`](../templating/twig_function_reference/ai_actions_twig_functions.md#ibexa_ai_config)
+- [`ibexa_render_discount_rule_type`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_render_discount_rule_type)
+- [`ibexa_discounts_render_discount_badge`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_render_discount_badge)
+- [`ibexa_get_original_price`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_get_original_price)
+- [`ibexa_format_discount_value`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_format_discount_value)
+- [`ibexa_discounts_is_active`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_is_active)
+- [`ibexa_discounts_form_themes`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_form_themes)
+- [`ibexa_discounts_can_edit`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_can_edit)
+- [`ibexa_discounts_can_enable`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_can_enable)
+- [`ibexa_discounts_can_disable`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_can_disable)
+- [`ibexa_discounts_can_delete`](../templating/twig_function_reference/discounts_twig_functions.md#ibexa_discounts_can_delete)
+
+#### Other upgrades
+
+This release brings other minor upgrades intended to improve the developer's experience:
+
+- To improve code clarity, reliability, and error detection, type hint declarations that specify the expected data type have been added in multiple places throughout the product
+- Developer experience has improved with capabilities offered by PHP in version 8.3. For example, the `AsTwigComponent` attribute [facilitates autoconfiguration](components.md#php-code) of Twig components
+- With protection against breaking changes and easier refactoring in mind, [TypeScript](https://www.typescriptlang.org/) can now be used to extend the Back Office
+- [[[= product_name_base =]] Rector package](https://github.com/ibexa/rector) has been introduced that is based on [Rector](https://github.com/rectorphp) and comes with additional rules for working with Ibexa code. You can use it to get rid of PHP code deprecations
+- [New icons](../templating/twig_function_reference/icon_twig_functions.md#icons-reference) replace the ones found in previous versions and serve as a highlight of a future system design
+
+### Deprecations
+
+Refer to [Ibexa DXP v5.0 renames, deprecations and removals](ibexa_dxp_v5.0_deprecations.md) for a full list of changes and how they influence your project.
+
+### Full changelog
+
+[[% include 'snippets/release_50.md' %]]
+
+To update your application, see the [update instructions](../update_and_migration/from_4.6/update_to_5.0.md).
+
+[[= release_note_entry_end() =]]
+
+
diff --git a/docs/release_notes/ibexa_dxp_v5.0_deprecations.md b/docs/release_notes/ibexa_dxp_v5.0_deprecations.md
new file mode 100644
index 0000000000..bb6c79075e
--- /dev/null
+++ b/docs/release_notes/ibexa_dxp_v5.0_deprecations.md
@@ -0,0 +1,578 @@
+
+
+# Ibexa DXP v5.0 renames, deprecations and removals
+
+This page lists backwards compatibility breaks and deprecations introduced in [[= product_name =]] v5.0.
+
+!!! tip "Upgrade to v5"
+
+ For a guide on moving your project to v5.0,
+ see [Update and migration instructions](../update_and_migration/from_4.6/update_to_5.0.md).
+
+[[= product_name =]] v5.0 introduces further modifications to significant parts of the code to align with the ones introduced in previous versions.
+
+These changes include dropped packages, changing database table and column names, field identifiers, namespaces, function names, and others.
+
+## Dropped packages
+
+[[= product_name =]] v5.0 no longer includes legacy Commerce packages.
+The solution has been replaced with [Commerce](commerce.md) that is included as standard and has been continuously developed since v4.4.
+
+Also, packages `compatibility-layer` and `icons` have been dropped.
+
+## Database table and column names
+
+A number of database table and column names have changed.
+If your custom code directly queries them, you need to update the code.
+
+| Old name | New name |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `ezbinaryfile` | `ibexa_binary_file` |
+| `ezcobj_state` | `ibexa_object_state` |
+| `ezcobj_state_group` | `ibexa_object_state_group` |
+| `ezcobj_state_group_language` | `ibexa_object_state_group_language` |
+| `ezcobj_state_language` | `ibexa_object_state_language` |
+| `ezcobj_state_link` | `ibexa_object_state_link` |
+| `ezcontent_language` | `ibexa_content_language` |
+| `ezcontentbrowsebookmark` | `ibexa_content_bookmark` |
+| `ezcontentclass` | `ibexa_content_type` |
+| `ezcontentclass_attribute` | `ibexa_content_type_field_definition` |
+| `ezcontentclass_attribute.contentclass_id` | `ibexa_content_type_field_definition.content_type_id` |
+| `ezcontentclass_attribute_ml` | `ibexa_content_type_field_definition_ml` |
+| `ezcontentclass_attribute_ml.contentclass_attribute_id` | `ibexa_content_type_field_definition_ml.content_type_field_definition_id` |
+| `ezcontentclass_classgroup` | `ibexa_content_type_group_assignment` |
+| `ezcontentclass_classgroup.contentclass_id` | `ibexa_content_type_group_assignment.content_type_id` |
+| `ezcontentclass_name` | `ibexa_content_type_name` |
+| `ezcontentclass_name.contentclass_id` | `ibexa_content_type_name.content_type_id` |
+| `ezcontentclassgroup` | `ibexa_content_type_group` |
+| `ezcontentobject` | `ibexa_content` |
+| `ezcontentobject.contentclass_id` | `ibexa_content.content_type_id` |
+| `ezcontentobject_attribute` | `ibexa_content_field` |
+| `ezcontentobject_attribute.contentclassattribute_id` | `ibexa_content_field.content_type_field_definition_id` |
+| `ezcontentobject_link` | `ibexa_content_relation` |
+| `ezcontentobject_link.contentclassattribute_id` | `ibexa_content_relation.content_type_field_definition_id` |
+| `ezcontentobject_name` | `ibexa_content_name` |
+| `ezcontentobject_trash` | `ibexa_content_trash` |
+| `ezcontentobject_tree` | `ibexa_content_tree` |
+| `ezcontentobject_version` | `ibexa_content_version` |
+| `ezdatebasedpublisher_scheduled_entries` | `ibexa_scheduler_scheduled_entries` |
+| `ezdfsfile` | `ibexa_dfs_file` |
+| `ezeditorialworkflow_markings` | `ibexa_workflow_markings` |
+| `ezeditorialworkflow_transitions` | `ibexa_workflow_transitions` |
+| `ezeditorialworkflow_workflows` | `ibexa_workflow_workflows` |
+| `ezform_field_attributes` | `ibexa_form_field_attributes` |
+| `ezform_field_validators` | `ibexa_form_field_validators` |
+| `ezform_fields` | `ibexa_form_fields` |
+| `ezform_form_submission_data` | `ibexa_form_form_submission_data` |
+| `ezform_form_submissions` | `ibexa_form_form_submissions` |
+| `ezform_forms` | `ibexa_form_forms` |
+| `ezgmaplocation` | `ibexa_map_location` |
+| `ezimagefile` | `ibexa_image_file` |
+| `ezkeyword` | `ibexa_keyword` |
+| `ezkeyword_attribute_link` | `ibexa_keyword_field_link` |
+| `ezmedia` | `ibexa_media` |
+| `eznode_assignment` | `ibexa_node_assignment` |
+| `eznotification` | `ibexa_notification` |
+| `ezpackage` | `ibexa_package` |
+| `ezpage_attributes` | `ibexa_page_attributes` |
+| `ezpage_blocks` | `ibexa_page_blocks` |
+| `ezpage_blocks_design` | `ibexa_page_blocks_design` |
+| `ezpage_blocks_visibility` | `ibexa_page_blocks_visibility` |
+| `ezpage_map_attributes_blocks` | `ibexa_page_map_attributes_blocks` |
+| `ezpage_map_blocks_zones` | `ibexa_page_map_blocks_zones` |
+| `ezpage_map_zones_pages` | `ibexa_page_map_zones_pages` |
+| `ezpage_pages` | `ibexa_page_pages` |
+| `ezpage_zones` | `ibexa_page_zones` |
+| `ezpolicy` | `ibexa_policy` |
+| `ezpolicy_limitation` | `ibexa_policy_limitation` |
+| `ezpolicy_limitation_value` | `ibexa_policy_limitation_value` |
+| `ezpreferences` | `ibexa_preferences` |
+| `ezrole` | `ibexa_role` |
+| `ezsearch_object_word_link` | `ibexa_search_object_word_link` |
+| `ezsearch_object_word_link.contentclass_id` | `ibexa_search_object_word_link.content_type_id` |
+| `ezsearch_object_word_link.contentclass_attribute_id` | `ibexa_search_object_word_link.content_type_field_definition_id` |
+| `ezsearch_word` | `ibexa_search_word` |
+| `ezsection` | `ibexa_section` |
+| `ezsite` | `ibexa_site` |
+| `ezsite_data` | `ibexa_site_data` |
+| `ezsite_public_access` | `ibexa_site_public_access` |
+| `ezurl` | `ibexa_url` |
+| `ezurl_object_link` | `ibexa_url_content_link` |
+| `ezurlalias` | `ibexa_url_alias` |
+| `ezurlalias_ml` | `ibexa_url_alias_ml` |
+| `ezurlalias_ml_incr` | `ibexa_url_alias_ml_incr` |
+| `ezurlwildcard` | `ibexa_url_wildcard` |
+| `ezuser` | `ibexa_user` |
+| `ezuser_accountkey` | `ibexa_user_accountkey` |
+| `ezuser_role` | `ibexa_user_role` |
+| `ezuser_setting` | `ibexa_user_setting` |
+
+## Field type identifiers
+
+Several field type identifiers have changed.
+
+| Old identifier (`legacy_alias`) | New identifier (`alias`) |
+|:--------------------------------|:--------------------------------|
+| `ezauthor` | `ibexa_author` |
+| `ezbinaryfile` | `ibexa_binaryfile` |
+| `ezboolean` | `ibexa_boolean` |
+| `ezcontentquery` | `ibexa_content_query` |
+| `ezcountry` | `ibexa_country` |
+| `ezdate` | `ibexa_date` |
+| `ezdatetime` | `ibexa_datetime` |
+| `ezemail` | `ibexa_email` |
+| `ezfloat` | `ibexa_float` |
+| `ezform` | `ibexa_form` |
+| `ezgmaplocation` | `ibexa_gmap_location` |
+| `ezimage` | `ibexa_image` |
+| `ezimageasset` | `ibexa_image_asset` |
+| `ezinteger` | `ibexa_integer` |
+| `ezisbn` | `ibexa_isbn` |
+| `ezkeyword` | `ibexa_keyword` |
+| `ezlandingpage` | `ibexa_landing_page` |
+| `ezmatrix` | `ibexa_matrix` |
+| `ezmedia` | `ibexa_media` |
+| `ezobjectrelation` | `ibexa_object_relation` |
+| `ezobjectrelationlist` | `ibexa_object_relation_list` |
+| `ezrichtext` | `ibexa_richtext` |
+| `ezselection` | `ibexa_selection` |
+| `ezstring` | `ibexa_string` |
+| `eztext` | `ibexa_text` |
+| `eztime` | `ibexa_time` |
+| `ezurl` | `ibexa_url` |
+| `ezuser` | `ibexa_user` |
+
+## PHP API classes and methods
+
+!!! note "[[= product_name_base =]] Rector"
+
+ [[[= product_name_base =]] Rector package](https://github.com/ibexa/rector) has been introduced that is based on [Rector](https://github.com/rectorphp) and comes with additional rules for working with Ibexa code.
+ You can use it to get rid of PHP code deprecations.
+
+### `ibexa/admin-ui`
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface::getContentCreateLimitations`| `\Ibexa\AdminUi\Permission\LimitationResolverInterface::getContentCreateLimitations` |
+| `\Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface::getContentUpdateLimitations` | `\Ibexa\AdminUi\Permission\LimitationResolverInterface::getContentUpdateLimitations` |
+| `\Ibexa\Contracts\AdminUi\UniversalDiscovery\Provider::getRestFormat` | Removed |
+| `\Ibexa\AdminUi\Form\Type\Search\DateIntervalType` | `\Ibexa\AdminUi\Form\Type\Date\DateIntervalType`|
+| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteaccessesForLocation`| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesList`|
+| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteaccesses`| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesList`|
+| `\Ibexa\AdminUi\Specification\AbstractSpecification`| `\Ibexa\Contracts\Core\Specification\AbstractSpecification`|
+| `\Ibexa\AdminUi\Specification\AndSpecification` | `\Ibexa\Contracts\Core\Specification\AndSpecification` |
+| `\Ibexa\AdminUi\Specification\NotSpecification` | `\Ibexa\Contracts\Core\Specification\NotSpecification` |
+| `\Ibexa\AdminUi\Specification\OrSpecification` | `\Ibexa\Contracts\Core\Specification\OrSpecification` |
+| `\Ibexa\AdminUi\Specification\SpecificationInterface` | `\Ibexa\Contracts\Core\Specification\SpecificationInterface` |
+| `\Ibexa\AdminUi\Tab\Dashboard\PagerContentToDataMapper` | `\Ibexa\AdminUi\Tab\Dashboard\PagerLocationToDataMapper` |
+| `\Ibexa\AdminUi\Translation\Extractor\LimitationTranslationExtractor` | Removed |
+| `\Ibexa\AdminUi\Translation\Extractor\PolicyTranslationExtractor` | Removed |
+| `\Ibexa\AdminUi\UI\Dataset\ContentDraftsDataset` | `\Ibexa\AdminUi\UI\Dataset\ContentDraftListDataset` |
+| `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::relations` | `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::relationList` |
+| `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::contentDrafts` | `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::contentDraftList` |
+| `\Ibexa\AdminUi\UI\Value\ValueFactory::createRelation` | `\Ibexa\AdminUi\UI\Value\ValueFactory::createRelationItem` |
+| `\Ibexa\AdminUi\Validator\ValidationErrorsProcessor` | `\Ibexa\ContentForms\Validator\ValidationErrorsProcessor` |
+| `\Ibexa\AdminUi\Validator\Constraints\FieldTypeValidator` | `\Ibexa\ContentForms\Validator\Constraints\FieldTypeValidator` |
+
+### `ibexa/cart`
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Cart\Money\MoneyFactory`| `\Ibexa\ProductCatalog\Money\IntlMoneyFactory`|
+
+### `ibexa/content-forms`
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\ContentForms\Controller\UserRegisterController`| `\Ibexa\Bundle\User\Controller\UserRegisterController`|
+| `\Ibexa\ContentForms\User\View\UserRegisterConfirmView`| `\Ibexa\User\View\UserRegisterConfirmView`|
+| `\Ibexa\ContentForms\User\View\UserRegisterFormView`| `\Ibexa\User\View\UserRegisterFormView`|
+
+### `ibexa/core`
+
+Support for facet search has been dropped, use the `Aggregation` API instead.
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\Core\DependencyInjection\Security\PolicyProvider\RepositoryPolicyProvider`| Removed |
+| `\Ibexa\Bundle\Core\Imagine\VariationPathGenerator`| `\Ibexa\Contracts\Core\Variation\VariationPathGenerator`|
+| `\Ibexa\ContentForms\User\View\UserRegisterFormView`| `\Ibexa\User\View\UserRegisterFormView`|
+| `/Ibexa\Bundle\Debug\Collector\PersistenceCacheCollector::getCount` | `\Ibexa\Bundle\Debug\Collector\PersistenceCacheCollector::getStats` |
+| `\Ibexa\Bundle\RepositoryInstaller\Installer\Installer::createConfiguration` | Deprecated |
+| `\Ibexa\Contracts\Core\FieldType\FieldStorage::getIndexData` | `\Ibexa\Contracts\Core\FieldType\Indexable` |
+| `\Ibexa\Contracts\Core\FieldType\BinaryBase\PathGenerator` | `\Ibexa\Contracts\Core\FieldType\BinaryBase\PathGeneratorInterface` |
+| `\Ibexa\Contracts\Core\IO\BinaryFile::$mimeType` | `\Ibexa\Core\IO\IOMetadataHandler::getMimeType` |
+| `\Ibexa\Contracts\Core\Persistence\Handler::beginTransaction` | `\Ibexa\Contracts\Core\Persistence\TransactionHandler::beginTransaction` |
+| `\Ibexa\Contracts\Core\Persistence\Handler::commit` | `\Ibexa\Contracts\Core\Persistence\TransactionHandler::commit` |
+| `\Ibexa\Contracts\Core\Persistence\Handler::rollback` | `\Ibexa\Contracts\Core\Persistence\TransactionHandler::rollback` |
+| `\Ibexa\Contracts\Core\Persistence\Bookmark\Bookmark::$name` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\Bookmark\CreateStruct::$name` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\Content\ContentInfo::STATUS_ARCHIVED` | `\Ibexa\Contracts\Core\Persistence\Content\ContentInfo::STATUS_TRASHED` |
+| `\Ibexa\Contracts\Core\Persistence\Content\ContentInfo::$isPublished` | Removed. Use `ContentInfo::$status` with value `STATUS_PUBLISHED`. |
+| `\Ibexa\Contracts\Core\Persistence\Content\LoadStruct` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\Content\Location::$pathIdentificationString` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\Content\Location\CreateStruct::$pathIdentificationString` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\Content\Location\Handler::markSubtreeModified` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\FieldType\IsEmptyValue` | Removed |
+| `\Ibexa\Contracts\Core\Persistence\User\Handler::loadPoliciesByUserId` | Removed |
+| `\Ibexa\Contracts\Core\Repository\ContentService::loadContentDrafts` | `\Ibexa\Contracts\Core\Repository\ContentService::loadContentDraftList` |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Location::SORT_FIELD_MODIFIED_SUBNODE` | Removed |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\LogicalOperator::getSpecifications` | Removed |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location\IsMainLocation::createFromQueryBuilder` | Removed. Use the constructor directly. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location\Priority::createFromQueryBuilder` | Removed. Use the constructor directly. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\ContentTypeFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\CriterionFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\DateRangeFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\FieldFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\FieldRangeFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\Location` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\LocationFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\SectionFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\TermFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\UserFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\Location\LocationFacetBuilder` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult::$facets` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult::$spellSuggestion` | `\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult::$spellcheck` |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\ContentTypeFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\CriterionFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\DateRangeFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\FieldFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\FieldRangeFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\LocationFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\RangeFacetEntry` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\SectionFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\TermFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\UserFacet` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Core\Repository\Values\Content\Trash\SearchResult::$count` | `\Ibexa\Contracts\Core\Repository\Values\Content\Trash\SearchResult::$totalCount` |
+| `\Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType::@$isContainer` | `\Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType::isContainer` |
+| `\Ibexa\Contracts\Core\User\Identity` | Removed. Use the `FOSHttpCacheBundle` user context feature. |
+| `\Ibexa\Core\Event\UserService` | Listen to `BeforeUpdateUserPasswordEvent` instead of `BeforeUpdateUserEvent`. |
+| `\Ibexa\Core\Event\UserService` | Listen to `UpdateUserPasswordEvent` instead of `UpdateUserEvent`. |
+| `\Ibexa\Core\FieldType\GatewayBasedStorage` | `\Ibexa\Contracts\Core\FieldType\GatewayBasedStorage` |
+| `\Ibexa\Core\FieldType\StorageGateway` | `\Ibexa\Contracts\Core\FieldType\StorageGatewayInterface` |
+| `\Ibexa\Core\FieldType\Image\Value::@$path` | Equivalent to `$id` or `$inputUri`, depending on which one is set. |
+| `\Ibexa\Core\FieldType\Image\Value::fromString` | `\Ibexa\Core\FieldType\FieldType::acceptValue` |
+| `\Ibexa\Core\Helper\FieldHelper::getFieldDefinition` | If content exists, use `$content->getContentType()->getFieldDefinition($identifier)`. |
+| `\Ibexa\Core\Helper\PreviewLocationProvider::loadMainLocation` | `\Ibexa\Core\Helper\PreviewLocationProvider::loadMainLocationByContent` |
+| `\Ibexa\Core\IO\IOServiceInterface::getExternalPath` | `\Ibexa\Core\IO\IOServiceInterface::loadBinaryFileByUri` |
+| `\Ibexa\Core\IO\IOServiceInterface::getInternalPath` | Removed. Use the `uri` property. |
+| `\Ibexa\Core\IO\MetadataHandler` | Removed |
+| `\Ibexa\Core\IO\MetadataHandler\ImageSize` | Removed |
+| `\Ibexa\Core\IO\Values\BinaryFile::$mimeType` | `\Ibexa\Core\IO\IOServiceInterface::getMimeType` |
+| `\Ibexa\Core\MVC\Symfony\MVCEvents::CACHE_CLEAR_CONTENT` | Removed |
+| `\Ibexa\Core\MVC\Symfony\Event\ContentCacheClearEvent` | Removed |
+| `\Ibexa\Core\MVC\Symfony\Locale\LocaleConverterInterface::convertToEz` | `\Ibexa\Core\MVC\Symfony\Locale\LocaleConverterInterface::convertToRepository` |
+| `\Ibexa\Core\MVC\Symfony\SiteAccess\Matcher\Regex\Host` | Removed |
+| `\Ibexa\Core\MVC\Symfony\SiteAccess\Matcher\Regex\URI` | Removed |
+| `\Ibexa\Core\MVC\Symfony\View\Provider\Content` | Removed |
+| `\Ibexa\Core\MVC\Symfony\View\Provider\Location` | Removed |
+| `\Ibexa\Core\Persistence\Cache\PersistenceLogger::getCount` | `\Ibexa\Core\Persistence\Cache\PersistenceLogger::getStats` |
+| `\Ibexa\Core\Persistence\Legacy\Handler::beginTransaction` | Removed. Use `\Ibexa\Contracts\Core\Persistence\TransactionHandler\TransactionHandler::beginTransaction`. |
+| `\Ibexa\Core\Persistence\Legacy\Handler::commit` | Removed. Use `\Ibexa\Contracts\Core\Persistence\TransactionHandler\TransactionHandler::commit`. |
+| `\Ibexa\Core\Persistence\Legacy\Handler::rollback` | Removed. Use `\Ibexa\Contracts\Core\Persistence\TransactionHandler\TransactionHandler::rollback`. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\AuthorConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\BinaryFileConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\CheckboxConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\CountryConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\DateAndTimeConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter` | Removed the `timestamp` property. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\DateConverter` | Removed the `timestamp` property. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\DateConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\EmailAddressConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\FloatConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\IntegerConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\ISBNConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\KeywordConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\MapLocationConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\MediaConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\NullConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\RelationConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\SelectionConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\TextBlockConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\TextLineConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\TimeConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\UrlConverter::create` | Removed. Use the default constructor. |
+| `\Ibexa\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageMask` | `\Ibexa\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageMaskFromLanguageCodes` |
+| `\Ibexa\Core\Repository\PermissionsCriterionHandler` | Removed |
+| `\Ibexa\Core\Repository\SectionService::countAssignedContents` | Deprecated. Use `SearchService` with `Section` criterion. |
+| `\Ibexa\Core\Repository\Helper\NameSchemaService` | `\Ibexa\Contracts\Core\Repository\NameSchema\NameSchemaServiceInterface` |
+| `\Ibexa\Core\Repository\Helper\RoleDomainMapper` | Removed |
+| `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionUpdate` | `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionFromUpdateStruct` |
+| `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionCreate` | `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionFromCreateStruct` |
+| `\Ibexa\Core\Repository\User\PasswordHashServiceInterface` | `\Ibexa\Contracts\Core\Repository\PasswordHashService` |
+| `\Ibexa\Core\Search\Common\FieldNameResolver::getFieldNamesget` | `\Ibexa\Core\Search\Common\FieldNameResolver::getFieldTypes` |
+| `\Ibexa\Core\Search\Common\IncrementalIndexer::createSearchIndex` | Removed |
+| `\Ibexa\Tests\Integration\Core\Repository\BaseTest::isVersion4` | Removed |
+| `\Ibexa\Tests\Integration\Core\Repository\SearchServiceTest::testDeprecatedCriteriaProperty` | Removed |
+| `\Ibexa\Tests\Core\Repository\Service\Mock\PermissionsCriterionHandlerTest` | Removed |
+| `\Ibexa\Contracts\Core\Repository\Values\Translation` | Implementations must implement `\Stringable` interface. |
+| `\Ibexa\Bundle\Core\ApiLoader\RepositoryConfigurationProvider` | Deprecated. Use `\Ibexa\Contracts\Core\Container\ApiLoader\RepositoryConfigurationProviderInterface`. |
+| `\Ibexa\Bundle\Core\ApiLoader\RepositoryFactory` | Deprecated. Use `\Ibexa\Core\Base\Container\ApiLoader\RepositoryFactory`.|
+
+!!! note "Dropped single colon notation"
+
+ [[= product_name_base =]]-named controllers can no longer be referenced using a single-colon notation.
+ For example, `ibexa_content:viewAction` must be changed to `ibexa_content::viewAction`.
+
+ The change affects the following controllers:
+
+ - ibexa_content
+ - ibexa_query
+ - ibexa_query_render
+ - ibexa.controller.content.preview
+
+### ibexa/corporate-account
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\CorporateAccount\Controller\ApplicationController\PersistenceCacheCollector::alreadyExistsAction`| Removed |
+
+### ibexa/design-engine
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\DesignEngine\Templating\TemplateNameResolverInterface::EZ_DESIGN_NAMESPACE`| Removed. Use the `\Ibexa\Contracts\DesignEngine\DesignAwareInterface::DESIGN_NAMESPACE` constant. |
+
+### ibexa/elasticsearch
+
+Support for facets in `ibexa/elasticsearch` has been dropped, use the `Aggregation` API instead.
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Contracts\Elasticsearch\Query\FacetBuilderVisitor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Contracts\Elasticsearch\Query\FacetResultExtractor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\AbstractTermsVisitor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\ContentTypeVisitor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\DispatcherVisitor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\FilteredFacetVisitorDecorator` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\GlobalFacetVisitorDecorator` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\SectionVisitor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\UserVisitor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\AbstractTermsResultExtractor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\ContentTypeResultExtractor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\DispatcherResultExtractor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\FilteredFacetResultExtractorDecorator` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\GlobalFacetResultExtractorDecorator` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\SectionResultExtractor` | Removed. Use the `Aggregation` API. |
+| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\UserResultExtractor` | Removed. Use the `Aggregation` API. |
+
+### ibexa/fieldtype-page
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\FieldTypePage\DependencyInjection\Compiler\AbstractConfigurationAwareCompilerPass::EXTENSION_CONFIG_KEY` | Removed. Use the `\Ibexa\Bundle\FieldTypePage\DependencyInjection\IbexaFieldTypePageExtension::EXTENSION_NAME` constant. |
+| `\Ibexa\Bundle\FieldTypePage\DependencyInjection\Compiler\BlockDefinitionConfigurationCompilerPass::EXTENSION_CONFIG_KEY` | Removed. Use the `\Ibexa\Bundle\FieldTypePage\DependencyInjection\IbexaFieldTypePageExtension::EXTENSION_NAME` constant. |
+| `\Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Event\Listener\PreviewTemplateEventSubscriber` | Removed |
+| `\Ibexa\FieldTypePage\ScheduleBlock\ScheduleService::distributeItems` | Removed |
+
+### ibexa/fieldtype-query
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\FieldTypeQuery\QueryFieldPaginationService` | Removed |
+| `\Ibexa\FieldTypeQuery\Persistence\Legacy\Content\FieldValue\Converter\QueryConverter::create` | Removed. Use the default constructor. |
+
+### ibexa/fieldtype-richtext
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\FieldTypeRichText\Translation\Extractor\OnlineEditorCustomAttributesExtractor` | Removed |
+| `\Ibexa\FieldTypeQuery\Persistence\Legacy\Content\FieldValue\Converter\QueryConverter::create` | Removed. Use the default constructor. |
+
+!!! note "Missing custom tag configuration error"
+
+ If the stored RichText record includes any custom tags that aren’t configured or recognized, saving the content will cause a validation error.
+
+### ibexa/form-builder
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\FormBuilder\DependencyInjection\Configuration::TREE_ROOT` | Removed. Use the `\Ibexa\Bundle\FormBuilder\DependencyInjection\IbexaFormBuilderExtension::EXTENSION_NAME` constant. |
+| `\Ibexa\FormBuilder\FieldType\Storage\FormStorage::getIndexData` | Removed |
+
+### ibexa/graphql
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\GraphQL\Schema\ImagesVariationsBuilder` | Removed |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentCollectionField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemConnectionField` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentConnection` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemConnectionName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentCreateInputName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemCreateInputName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentUpdateInputName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemUpdateInputName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentTypeName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemUpdateInputName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemField` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainMutationCreateContentField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemMutationCreateItemField` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainMutationUpdateContentField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemMutationUpdateItemField` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainGroupName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemGroupName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainGroupTypesName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemGroupTypesName` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionArgsBuilderMapper` | `\Ibexa\Contracts\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionMapper` |
+| `\Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionInputMapper` | `\Ibexa\Contracts\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionMapper` |
+
+### ibexa/measurement
+
+!!! note "Dropped `measurement` product attribute"
+
+ The deprecated product attribute `measurement` has been removed.
+ The change does not affect the [measurement field type](measurementfield.md).
+
+### ibexa/migrations
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Migration\ValueObject\ContentType\Matcher::CONTENT_TYPE_IDENTIFIER` | Removed. Use the `\Ibexa\Migration\StepExecutor\ContentType\IdentifierFinder::CONTENT_TYPE_IDENTIFIER` constant. |
+
+### ibexa/product-catalog
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\ProductCatalog\Bridge` | Migrate data to a local product catalog. |
+
+### ibexa/page-builder
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\PageBuilder\DependencyInjection\IbexaPageBuilderExtension::SESSION_KEY_SITEACCESS` | Removed |
+| `\Ibexa\PageBuilder\PageBuilder\PreviewLanguageCodeResolver` | Removed |
+| `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessForLocation` | `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesListForLocation` |
+| `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessForContent` | `\Ibexa\Contracts\PageBuilder\Siteaccess\SiteAccessResolver::resolveSiteAccessForContent` |
+| `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessBasedOnLanguage` | Removed |
+
+### ibexa/rest
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\Rest\EventListener\CsrfListener::isLoginRequest` | Add `csrf_protection: false` attribute to route definition. |
+| `\Ibexa\Bundle\Rest\EventListener\CsrfListener::isSessionRoute` | Add `csrf_protection: false` attribute to route definition. |
+| `\Ibexa\Bundle\Rest\EventListener\RequestListener::REST_PREFIX_PATTERN` | Use `\Ibexa\Contracts\Rest\UriParser\UriParserInterface::isRestRequest` function. |
+| `\Ibexa\Bundle\Rest\EventListener\RequestListener::hasRestPrefix` | Use `\Ibexa\Contracts\Rest\UriParser\UriParserInterface::isRestRequest` function. |
+| `\Ibexa\Bundle\Rest\RequestParser\Router` | `\Ibexa\Contracts\Rest\UriParser\UriParserInterface` |
+| `\Ibexa\Contracts\Rest\Output\Generator::generateMediaType` | `\Ibexa\Contracts\Rest\Output\Generator::generateMediaTypeWithVendor` |
+| `\Ibexa\Rest\Output\FieldTypeSerializer::serializeFieldValue` | `\Ibexa\Rest\Output\FieldTypeSerializer::serializeContentFieldValue` |
+| `\Ibexa\Rest\Server\Controller\Content::createView` | Forwards the request to the new `/views` location, but returns a 301. |
+| `\Ibexa\Rest\Server\Controller\User::$csrfTokenStorage` | Removed |
+| `\Ibexa\Rest\Server\Controller\User::$sessionController` | Removed |
+| `\Ibexa\Rest\Server\Controller\User::createSession` | `\Ibexa\Rest\Server\Controller\SessionController::refreshSessionAction` |
+| `\Ibexa\Rest\Server\Controller\User::refreshSession` | `\Ibexa\Rest\Server\Controller\SessionController::refreshSessionAction` |
+| `\Ibexa\Rest\Server\Controller\User::deleteSession` | `\Ibexa\Rest\Server\Controller\SessionController::refreshSessionAction` |
+
+### ibexa/ibexa/scheduler
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\Rest\EventListener\CsrfListener::isLoginRequest` | Add `csrf_protection: false` attribute to route definition. |
+
+### ibexa/site-factory
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\SiteFactory\DependencyInjection\Configuration::TREE_ROOT` | Removed. Use the `\Ibexa\Bundle\SiteFactory\DependencyInjection\IbexaSiteFactoryExtension::EXTENSION_NAME` constant. |
+| `\Ibexa\SiteFactory\Event\EventDispatcher` | Removed |
+| `\Ibexa\SiteFactory\ServiceDecorator\SiteServiceDecorator` | Removed |
+| `\Ibexa\SiteFactory\ServiceEvent\Events\BeforeCreateSiteEvent` | Removed |
+| `\Ibexa\SiteFactory\ServiceEvent\Events\BeforeDeleteSiteEvent` | Removed |
+| `\Ibexa\SiteFactory\ServiceEvent\Events\BeforeUpdateSiteEvent` | Removed |
+| `\Ibexa\SiteFactory\ServiceEvent\Events\CreateSiteEvent` | Removed |
+| `\Ibexa\SiteFactory\ServiceEvent\Events\DeleteSiteEvent` | Removed |
+| `\Ibexa\SiteFactory\ServiceEvent\Events\UpdateSiteEvent` | Removed |
+
+### ibexa/solr
+
+Support for facet search has been dropped, use the `Aggregation` API instead.
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Solr\Handler::$resultExtractor` | Use `$contentResultExtractor` or `$locationResultExtractor`. |
+| `\Ibexa\Solr\Gateway\UpdateSerializer` | `\Ibexa\Solr\Gateway\UpdateSerializer\XmlUpdateSerializer` |
+| `\Ibexa\Solr\Query\FacetBuilderVisitor` | Use `Aggregation API`. |
+| `\Ibexa\Solr\Query\FacetFieldVisitor` | Use `Aggregation API`. |
+| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\Aggregate` | Use `Aggregation API`. |
+| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\ContentType` | Use `Aggregation API`. |
+| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\Section` | Use `Aggregation API`. |
+| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\User` | Use `Aggregation API`. |
+| `\Ibexa\Solr\Query\Content\CriterionVisitor\Field` | `\Ibexa\Solr\Query\Common\CriterionVisitor\Field` |
+
+### ibexa/storefront
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Contracts\Storefront\Repository\TaxonomyTreeServiceInterface::getPath` | `\Ibexa\Contracts\Taxonomy\Service\TaxonomyServiceInterface::getPath` |
+
+### ibexa/system-info
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Bundle\SystemInfo\SystemInfo\Collector\IbexaSystemInfoCollector::CONTENT_PACKAGES` | Removed. Use the `\Ibexa\Bundle\SystemInfo\SystemInfo\Collector\IbexaSystemInfoCollector::HEADLESS_PACKAGES` constant. |
+| `\Ibexa\Bundle\SystemInfo\SystemInfo\Collector\IbexaSystemInfoCollector::ENTERPRISE_PACKAGES` | Removed. Use `IbexaSystemInfoCollector::EXPERIENCE_PACKAGES` or `IbexaSystemInfoCollector::HEADLESS_PACKAGES` constant. |
+| `\Ibexa\Bundle\SystemInfo\SystemInfo\Value\IbexaSystemInfo::$stability` | `\Ibexa\Bundle\SystemInfo\SystemInfo\Value\IbexaSystemInfo` is considered internal. |
+
+### ibexa/workflow
+
+| Old FQN | New FQN / Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `\Ibexa\Contracts\Workflow\Service\WorkflowServiceInterface::loadWorkflowMetadataOriginatedByUser` | Removed |
+| `\Ibexa\Contracts\Workflow\Service\WorkflowServiceInterface::loadAllWorkflowMetadata` | Removed |
+
+## Services
+
+The following service definitions have been removed:
+
+| Service name | Comment |
+|:------------------------------------------------------|:------------------------------------------------------------------------|
+| `ibexa.cart.number_formatter.currency.factory` | Removed |
+
+## JavaScript classes and functions
+
+|Old class or function|New class or function|
+|:----|:----|
+| `formatLine` const in `/src/bundle/Resources/public/js/scripts/helpers/form.error.helper.js` | Removed |
+| `parseAll` const in `/src/bundle/Resources/public/js/scripts/helpers/middle.ellipsis.js` | Removed |
+| `fileSizeToString` const in `src/bundle/ui-dev/src/modules/multi-file-upload/helpers/text.helper.js` | Use `fileSizeToString` function from `/src/bundle/ui-dev/src/modules/common/helpers/text.helper.js`. |
+| `src/bundle/ui-dev/src/modules/common/components/backdrop/backdrop.js` | Use the `ibexa.core.Backdrop` component. |
+| `src/bundle/ui-dev/src/modules/page-builder/components/block/sidebar.block.js` | `src/bundle/ui-dev/src/modules/page-builder/components/block/block.js` |
+| `src/bundle/ui-dev/src/modules/page-builder/components/block/sidebar.blocks.group.js` | `src/bundle/ui-dev/src/modules/page-builder/components/block/blocks.group.js` |
+| `src/bundle/ui-dev/src/modules/page-builder/components/sidebar/sidebar.js` | `src/bundle/ui-dev/src/modules/page-builder/components/toolbox.js` |
+| `src/bundle/ui-dev/src/modules/tree-builder/components/indentation-vertical/indentation.vertical.js)`| `src/bundle/ui-dev/src/modules/tree-builder/components/indentation-horizontal/indentation.horizontal.js` |
+| `src/bundle/ui-dev/src/modules/tree-builder/components/portal-provider/portal.provider.js` | `tree-builder/src/bundle/ui-dev/src/modules/tree-builder/components/portal/portal.js` |
+| `src/bundle/ui-dev/src/modules/tree-builder/hooks/usePortal.js` | `tree-builder/src/bundle/ui-dev/src/modules/tree-builder/components/portal/portal.js` |
+
+## Configuration keys
+
+| Old name | New name |
+|:----|:----|
+| `ibexa.system.*.database.*` | `ibexa.repositories` |
+| `ibexa.system.*.session_name` | `ibexa.system.*.session.name` |
+| `ibexa.site_access.config.default.user_registration.group_id` | `ibexa.site_access.config.default.user_registration.group_remote_id` |
+| `ezpublish_http_basic` | Use `http_basic` in `security.yml` directly. |
+
+
+## CSS settings
+
+|Old setting|New setting|
+|:----|:----|
+| `ibexa-alert--complementary` | `ibexa-alert--info` |
+| `sidebar-drag-items` | `toolbox-drag-items` |
+| `sidebar-drag-items-group` | `toolbox-drag-items-group` |
+| `sidebar-drag-item` | `tooblox-drag-item` |
+| `/src/bundle/Resources/public/scss/mixins/_font.scss` | Removed |
+| `/src/bundle/Resources/public/scss/_iframe-backdrop.scss` | Removed |
+
+## Twig templates, functions and filters
+
+The global Twig variable `ez_richtext_config` has been renamed to `ibexa_richtext_config`.
+
+| Old name| New name / Comment |
+|:----|:----|
+| `\Ibexa\Core\MVC\Symfony\Templating\Twig\Extension\` | Removed `ezplatform` variable, use the `ibexa` global variable. |
+| `\Ibexa\Core\MVC\Symfony\View\ParametersInjector\ViewbaseLayout\` | Removed `pagelayout` variable, use `page_layout`. |
+| `/src/bundle/Resources/views/themes/admin/account/form_fields.html.twig` | Deprecated, extend `@ibexadesign/ui/form_fields.html.twig` directly. |
+| `/src/bundle/Resources/views/themes/admin/content/edit/content_header.html.twig` | Removed |
+| `/src/bundle/Resources/views/themes/admin/ui/footer.html.twig` | Deprecated |
+| `/src/bundle/Resources/views/themes/corporate/customer_portal/registration/registration_already_exists.html.twig` | Removed |
+| `/src/bundle/Resources/views/block_preview.html.twig` | Removed |
+| `\Ibexa\Scheduler\Dashboard\AllScheduledTab` | Removed `type` variable. Use `content_type.name`. |
+| `\Ibexa\Scheduler\Dashboard\MyScheduledTab` | Removed `type` variable. Use `content_type.name`. |
+| `\Ibexa\Bundle\User\Controller\DefaultProfileImageController` | Removed `type` variable. Use `text_color`. Remove `default(text)` from `initials.svg.twig`. |
+| `\Ibexa\Bundle\User\Controller\DefaultProfileImageController` | Removed `background` variable, use `background_color`. Remove `default(background)` from `initials.svg.twig`. |
diff --git a/docs/release_notes/img/5.0_collaborative_invitation.jpg b/docs/release_notes/img/5.0_collaborative_invitation.jpg
new file mode 100644
index 0000000000..20c2b3976e
Binary files /dev/null and b/docs/release_notes/img/5.0_collaborative_invitation.jpg differ
diff --git a/docs/release_notes/release_notes.md b/docs/release_notes/release_notes.md
index 0f84faedde..4378a2b657 100644
--- a/docs/release_notes/release_notes.md
+++ b/docs/release_notes/release_notes.md
@@ -5,10 +5,11 @@ page_type: landing_page
# Release notes
-The latest stable and LTS (Long Term Support) version of [[= product_name =]] is [[[= product_name =]] v4.6](ibexa_dxp_v4.6.md).
+The latest stable and LTS (Long Term Support) version of [[= product_name =]] is [[[= product_name =]] v5.0](ibexa_dxp_v5.0.md).
[[= cards([
+ "release_notes/ibexa_dxp_v5.0",
"release_notes/ibexa_dxp_v4.6",
"release_notes/ibexa_dxp_v3.3",
], columns=2) =]]
diff --git a/docs/snippets/release_50.md b/docs/snippets/release_50.md
new file mode 100644
index 0000000000..ea3290086f
--- /dev/null
+++ b/docs/snippets/release_50.md
@@ -0,0 +1,13 @@
+[[% if version is not defined %]]
+ [[% set version = '' %]]
+[[% endif %]]
+
+To learn more about all the included changes, see the full release change logs:
+
+- [[[= product_name_headless =]] [[= version =]]](https://github.com/ibexa/headless/releases/tag/[[= version =]])
+- [[[= product_name_exp =]] [[= version =]]](https://github.com/ibexa/experience/releases/tag/[[= version =]])
+- [[[= product_name_com =]] [[= version =]]](https://github.com/ibexa/commerce/releases/tag/[[= version =]])
+
+[[% if version != 'v5.0.0' %]]
+To update your application, see the [update instructions](../update_and_migration/from_4.6/update_to_5.0.md#[[= version_to_anchor(version) =]]).
+[[% endif %]]
diff --git a/mkdocs.yml b/mkdocs.yml
index 4aec29ef29..652b2b0085 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -880,6 +880,8 @@ nav:
- Product guides: product_guides/product_guides.md
- Release notes:
- Release notes: release_notes/release_notes.md
+ - Ibexa DXP v5.0 LTS: release_notes/ibexa_dxp_v5.0.md
+ - Ibexa DXP v5.0 deprecations and BC breaks: release_notes/ibexa_dxp_v5.0_deprecations.md
- Ibexa DXP v4.6 LTS: release_notes/ibexa_dxp_v4.6.md
- Ibexa DXP v4.5: release_notes/ibexa_dxp_v4.5.md
- Ibexa DXP v4.4: release_notes/ibexa_dxp_v4.4.md