Liferay’s Countries feature was migrated from being a Commerce feature to a DXP feature, thus Commerce’s Countries page was removed. Users that manage Countries will now be able to manage them through the Countries Management page under the Control Panel.
Release Notes
This section contains information about breaking changes in out-of-the-box DXP features and capabilities. For breaking changes or internal code, please check this link.
Content is no longer classified as translated solely upon the translation of its title. Now, when a user translates any field, not just the title, but also the content status changes to "Translating". It will only be considered translated when all fields have been translated.
To bolster permissions management and elevate user awareness concerning content, users will now be prompted to confirm permissions during the initial publishing or saving process, requiring an additional click. Subsequent saving or publishing actions will not require this confirmation.
The "Mine" filter now displays the creation date information instead of the modified date.
The "Recent" filter now displays the creation date information instead of the modified date.
A new SEO menu has been added in Instance Settings with an item selector to include specific Sites or all of them, in the sitemap of the Company through the Company's Virtual Host, and the default site cannot be deleted from the list. If the default site has a Virtual Host defined, it will not be added to the company's XML sitemap although listed in the configuration.
Users are currently presented with a group of features that are not relevant in the configuration page for Utility Pages. These non-applicable features have been removed while preserving the essential HTML Title, HTML Description, and SEO configuration elements.
After searching with a keyword and selecting facets, searching with a new keyword (in either using the header Search Bar or any Search Bar widget instance on a page) will clear all active facet selections.
The old behavior can be enabled via the Search Options widget by ticking Retain Facet Selections Across Searches option.
This affects any custom code using Liferay’s API methods User.getRemotePreference(String) and User.getRemotePreferences().
The API supporting logic has to collect and hold cookies in User object, causing unnecessary CPU and memory overhead. These methods were just a convenient shortcut to get the user's current request's cookies with REMOTE_PREFERENCE_ name prefix. The same logic can be done by directly getting necessary cookies from request.
- What changed? Currently, the translatable object fields use the configured languageId from the user. With this change, it is going to use the preferred Locale given by the DTOConverterContext instead.
- Why was this change made? This change is needed in order to return the appropriate translatable object field values for the language setting in the Accept-Language header.
- Who is affected? Every user that calls the translatable object fields.
- How should I update my features or implementation to better adopt the breaking change? Adding or removing (depends on the cases) the Accept-Language header.
Tag values are now case-sensitive.
The name of the reserved variable ID has always referred to the article ID so it has been changed to: Article ID. A new ID variable has been added that refers to the ID.
Sites are not browsable for non-admin users in Breadcrumb portlet when the site has Membership restricted or private.
The Default Layout permission was replaced with the current Group check.
Disable Group membership checking since it has no relationship to layout browsability.
When we create a new Site the Allow Manual Membership Management option will be disabled by default to avoid uploading malicious files to the Documents and Media portlet.
All filtering in web content now only applies to the current folder. Previously, certain filters exhibited behavior limited to the current folder and now it has been standardized to all filters.
Searching after filtering will clear all existing filters and give a search from the entire data set.
The filtering options for "With approved versions," "With scheduled versions," and "With expired versions” are now designated as "Approved," "Scheduled," and "Expired," respectively. Rather than filtering all web content with a given status, it now distinctly displays content or versions in the specified status.
From now on, the segments tab for the Administrator role will no longer be displayed in the assignees' tab. Assigning the Administrator role through segments is not allowed.
The guest role from the role selector was disabled since it is not possible for it to work. |
The configuration sections in Utility Pages are not enabled, as the other pages, due to their use being more restricted. The implementation of these settings should occur by analyzing each case.
As mentioned in the new features section the following properties having been transformed in configurations, so they are no longer available in the properties files:
session.timeout.auto.extendsession.timeout.auto.extend.offset
Previously our AB Testing feature supported multivariate testing. With the addition of multiple variants, the time to completion and the calculations required would increase exponentially. This caused many issues for our customers. As such we have decided to pare back this functionality to provide a higher quality experience for our users. Now our AB Testing feature only supports 1 variant, in addition to the control. This makes our feature truly an AB Test rather than a Multivariate Test. There is the possibility of re-enabling multivariate testing in the future, but that will depend on the needs from our customers.
We changed the default configuration such that if a Menu Display widget is placed on a Page Template, the default configuration for it will be "Pages Hierarchy" (unless there are no Pages at all on the Site). It will display as "Pages Hierarchy" even if Private Pages are enabled. If Private Pages are enabled, an alert will appear on the Page Template letting the user know that the Menu Display may appear different if the inherited page has the opposite privateLayout value to the menu currently being rendered.
When a Page inherits this Page Template, the alert message does not display on the Page, and the Navigation Menu will be configured for either Public Pages Hierarchy or Private Pages Hierarchy depending on whether the page is public.
Current options in System Settings > Documents and Media > Cache Control are:
- Public
- Private
And Private is the default option.
From now on, we are adding a new option No Cache that will allow configure this option to “private, no-cache, no-store, must-revalidate" and it will be used as default value, so it changes current default behavior:
With the upgrade of the client libraries, the minimum compatible Elasticsearch minor version shits to 7.17.x.
When the server is lower than the expected version, the DXP won't start-up, but fail with an error in the DXP console:
10-22 10:45:22.619 ERROR [main][ElasticsearchSearchEngine:375] Elasticsearch node es-node-1 does not meet the minimum version requirement of 7.17
The self bootstraping style *SearchRegistrar has been changed to service collecting of ModelSearchConfigurator.
Indexer registration code for custom entities has to be adjusted to become an OSGi service of type ModelSearchConfiguratorand to move all previous ModelSearchConfigurator setter call parameter as corresponding ModelSearchConfigurator getter return value.
This change was made in order to prevent fragment changes propagation when a user changes the cacheable option and then saves it. This was creating performance issues for some customers.
This change will benefit customers in terms of performance, as unnecessary propagations will no longer occur when the cacheable option is changed.
No changes are expected for customers' implementations. Just the awareness that this option is now somewhere else.
Support for these application servers is removed from 2024.Q3 or later since they are no longer receiving updates from the vendor.
Wildfly 26.1 and Jboss EAP 7.4 remain fully supported
With the new support of Java JDK 17 and 21 runtimes, Java 11 will no longer be supported for DXP runtime on 2024.Q3 or later.
Liferay Workspace offers support for re-compiling custom modules on JDK 17 or 21.
What changed?
From Liferay DXP 2024Q2 onwards, localizable object entry fields now default to the instance's language setting, replacing the previous user-language default.
Why was this change made? Is the new behavior better for users?
This change was implemented to ensure consistent language configuration. The new behavior is indeed better for users because:
It prevents discrepancies that could occur when users with different language settings interacted with the same object entry fields.
It provides a unified experience across all user interactions.
Who is affected?
Customers using or upgrading from versions prior to Liferay DXP 2024Q2 are affected by this change.
How should I update my features or implementation to better adopt the breaking change?
To adapt to the new behavior:
Check your existing localizable object entries' default language settings.
Adjust these settings to match the instance language if needed.
This ensures consistent language defaults and creates a uniform experience for all users.
The AMBackwardsCompatibilityHtmlContentTransformer class was introduced in the Adaptive Media release (~7 years ago) to manage content created before Adaptive Media was implemented. This approach helped to avoid a costly upgrade at the time. However, since much time has passed and newer content no longer requires this processing, we are disabling the AM backward compatibility HTML content transformer by default.
The primary reason for this change is performance: the content transformer can consume significant CPU resources, especially under heavy traffic.
The content transformer can be enabled in Instance Settings > Adaptive Media if necessary.
The "Save as Draft" and "Cancel" options are no longer visible when editing Web Content. Instead, the content is automatically saved as a draft.
With the implementation of autosaving, users no longer need to worry about losing their progress when editing content. Autosaving ensures that all changes are continuously saved in the background, providing peace of mind and reducing the risk of data loss due to unexpected interruptions.
The JVM java.locale.providers setting for DXP has been restored to the default value to account for the move to Java JDK 17 and 21.
Previously, DXP and Portal shipped with and recommended setting java.locale.providers=JRE,COMPAT,CLDR to provide consistent locale behavior for Java 8 and 11 since JRE was previously the default provider. With Java 17 and 21, JRE is now deprecated and the CLDR locale provider becomes the default and recommended provider. See further information from Oracle.
The new recommended value is java.locale.providers=CLDR,COMPAT as it is the new JVM default. The Liferay Tomcat bundles for 2024.Q4 will ship without this JVM property set, since we are using the default.
With this change the default provider, some locale information in the system might display with modified formatting. For example, a Date and Time display may have previously shown as “9/12/24 9:10 PM” but now displays as “9/12/24, 9:10 PM”. This is the expected result from moving to the latest Java locale provider that meets modern language standards.
Fixed a bug that was causing some 404 redirects to direct back to the previous page instead of to the 404 error page.
If any implementations were relying on users being redirected back to the previous page, they might need to be updated to account for the new redirect to the 404 page.
This is a breaking change for Data Sets that are under BETA FF
Anybody who created data sets before this epic will not be able to see them in Data Set Manager anymore.
Data Set fragment configuration will no longer display previous data sets as options.
Data Set fragment placed on a page will no longer show anything.
The Data Set Views have been removed. From now on a Data Set has only a view.
New Data Set endpoints are available and working under
datas-et-admin(ex: http://localhost:8080/o/api?endpoint=http://localhost:8080/o/data-set-admin/data-sets/openapi.json)All Data Set endpoints are still available and working under
data-set-managerbut not used by the Data Set Manager or Frontend Data Set. Information from created Data Sets before this change is stored in them (ex: http://localhost:8080/o/api?endpoint=http://localhost:8080/o/data-set-manager/data-sets/openapi.json)
More Info: LPD-29979
What changed?
Javascript from fragments is now included in the page using a <script> of type module, instead of embedding the code in a functionWhy was this change made?
We wanted to leverage all the features available in the javascript modules: JavaScript modules - JavaScript | MDN
For example: the ability to use import statementsWhat is affected?
Code that is not supported directly in a <script> tag of type module
For example:returnstatements outside the scope of a functionAutomatic variable declaration, for example
myVariable = 'value'
How should I update my features or implementation to better adopt the breaking change?
Code should be fairly easy to migrate, just remove any return statement, and for the variable declaration you either useletorconstnext to the variable nameconst myVariable = 'value'
As a temporary workaround (would be removed soon), we have added disable to this feature. You have to go to Instance Settings -> Page Fragments -> Fragment Javascript and disable the checkbox
Changed the methods of adding a Collection to specify the ERC when is created. If a customer has Java code that is using these services they should modify it to specify the ERC (or Null) when is called.
The functionality of the Date Facet widget introduced under a Developer FF in LPS-153839 in 2024.Q1, has been integrated into the Custom Facet and now available as GA. The Date Facet widget is no longer available.
Refer to the Date Range and Range Aggregation in the Custom Facet under Search for more details.
Until now, when we had 2 ItemSelectorViews with the same name, only one of them was taken into account when rendering. This is more noticeable now with the CMS where we have object definitions like Blogs. In order to allow the users to select all the object definitions and legacy entities, now they appear duplicated when they have the same name.
We recently updated our tracking logic within documents, replacing the previewed event with a new event: impressionMade. To align with this change, we also updated our current API to include a new metric — impressionMadeMetric — which consolidates impressions by summing both the new impressionMade events and the legacy previewed events.
What Changed?
The Configuration Headless API now exposes and manages site-scoped configurations that were previously unavailable through export/import operations. During import, existing configurations for a site are now overridden with the incoming configuration data based on groupId scope matching.
Why Was This Change Made?
This change ensures that site migrations are more complete and consistent, including configuration data that was previously missing.
How should I update my features or implementation?
No changes are needed.
The results of a search haven’t to be shown the content of a fragment is within a collection display and is not indexed.
The system-wide Mail Settings for DXP were migrated to use the standard system configuration framework.
The system options in Server Administration > Mail were moved to System Settings > Email > Virtual Instance Scope > Mail Settings
The existing settings from previous releases will be automatically migrated during the database upgrade process.
The following portal properties were removed since they are now defined by configuration properties:
LIST OF PROPERTIES
Following standard configuration patterns, Instance Settings > Email > Mail Settings will have default values inherited from the System Settings. The administrator for Portal Instances can now view the default values, override, or reset to default.
Please refer to Configuring Mail - Liferay Official Documentation for additional details.
The Object Inheritance feature has been updated to support more flexible scenarios, which introduces changes to the previous behavior:
Child definitions can now be associated with multiple parent definitions.
Previously, a child could only inherit from a single parent.Child entries can now exist without a parent (standalone entries).
Before this change, every child entry was required to belong to a parent.The relationship field is no longer mandatory at the object-definition level.
Previously, the relationship field was always required when inheritance was enabled.
Now, it becomes mandatory only when the entry is created in the context of a parent.Permission and configuration inheritance now depends on whether the child entry has a parent.
Standalone entries no longer inherit permissions or configuration from a root object.
When users have an object entry related to another system object entry, users now need the VIEW resource permission of the related entry in order to add the object entry.
This change was made to enforce data integrity standards across DXP covering potential security breaches our users could encounter. This will affect all object admins modeling object definitions related to the following asset types
Accounts
Organizations
Picklists
Postal Addresses
Roles
When object entries are related to an asset in the aforementioned list, users must now have the VIEW resource permission on the related asset in order to ADD the object entry. This also applies to users who are trying to import an object entry with a related asset from the list.
The official AWS SDK for Java 1.x went End-of-Life on 12/31/2025. The AWS SDK for Java 2.0 is the actively maintained solution for connecting to AWS with our Java platform. We have migrated our Amazon AWS S3 store connector to use SDK for Java version 2.0.
No new configuration keys added for AWS SDK v2 and Liferay still uses a single S3 configuration for both IBM S3 store and AWS S3 store. |
Based on feedback from our users, we have made some changes to the default behavior of the Database Upgrade Tool to improve usability and performance of the upgrade process.
|
The following features will be removed in the upcoming Liferay Developer Studio (LDS) release:
Why is this happening? What this means for our users?
Note: Developers still requiring these features can remain on their current version of LDS until they have completed their code migration or AlloyUI related tasks. |
As it was communicated in 2025, Elasticsearch 7 has reached end-of-life on Jan 15, 2026 and is no longer available as a supported search engine for Liferay DXP. 2026.Q1 ships with a native Elasticsearch 8 connector as the default, bundled integration allowing to operate Liferay with Elasticsearch 8.19.
Deployments currently operating Liferay DXP with Elasticsearch 7 have to upgrade their Elastic stack to Elasticsearch 8.19 before upgrading Liferay DXP to 2026.Q1. Learn more under the Native Elasticsearch 8 entry in this Release Notes.
|
What changed?The Edit and Edit in P1 actions in the Publications review screen now redirect users to the appropriate editing experience, depending on the page type:
Previously, users were often redirected to configuration screens even when they needed to edit layout or content. Why was this change made?Reviewers frequently need to make small fixes while reviewing changes. Sending users to the wrong screen slowed down reviews and increased frustration. This update aligns the edit action with user intent, allowing faster corrections and keeping users inside the Publications workflow. No changes are required. |
What changed: Leftover utility classes previously duplicated between portal-kernel and the Petra libraries (petra-string, petra-reflect, etc.) have been removed from portal-kernel.
Why: The duplicated classes were not adding value; removing them simplifies the codebase.
Who is affected: Developers importing these utilities directly from the old portal-kernel packages.
How to adopt: Update imports to the equivalent Petra package. This is a package name change only — no behavioral changes are required.
What changed: All findByXxx_PrevAndNext and filterFindByXxx_PrevAndNext methods have been completely removed from generated persistence classes (*Persistence, *PersistenceImpl, and *Util) for entities utilizing Service Builder 7.4+. Previously, these methods returned a 3-element array containing the previous, current, and next neighboring entities from an ordered result set.
Why: To significantly reduce codebase bloat. Within DXP, these methods generated over 600,000 lines of code but were only used in three internal places. Existing finder methods easily replicate this behavior.
Who is affected: Developers using Service Builder on 7.4 or Quarterly releases who currently rely on PrevAndNext finder methods in their custom logic.
How to migrate:
Choose one of two methods based on your dataset size:
List Lookup (Recommended): Fetch the current entity using
findByPrimaryKey, then retrieve the full matching list using standardfindByXxxmethods. Find the current entity's index to grab the previous (index - 1) and next (index + 1) items.DSL Queries (For large datasets): Use
dslQuerywith a limit of 1 to execute two targeted database queries — one fetching the immediate previous entry, and one fetching the immediate next entry.
As part of a major search and re-indexing performance optimization, several public search and indexing APIs have been simplified.
Custom indexer implementations extending
BaseIndexermust rename theirdoReindex(String[] ids)override todoReindexCompany(long companyId).Modules using
ModelIndexerWriterContributorwill need minor updates as helper classes (BatchIndexingActionable,ModelIndexerWriterDocumentHelper) have been removed in favor of direct use of their underlying equivalents.The Queries OSGi service has been replaced by the static
QueriesUtil, and a small number of other search API methods have had parameters removed or their types updated to reflect their actual usage
Please see full breaking changes list for details.
File system artifacts are now deleted when a company partition is removed.
Previously, removing a Virtual Instance (company) with Database Partitioning enabled only dropped the database schema, leaving behind file system artifacts such as Document Library files (data/document_library/{companyId}), search indexes, and configuration files.
Action required: If Database Partitioning is enabled, ensure any needed data is backed up before deleting a partition, as file system artifacts will no longer be recoverable after deletion.
Tag filter widget used to sort tags in alphabetical order but it seems customers expect to see the tags with more uses first. We think this change make sense so we have modified the behavior for this widget.
What Changed?
Previously, some Modification Conflicts and all Modification Deletion conflicts required manual resolution. These cases would show up in the Checking Changes screen, requiring manual user action to be resolved. They are now automatically resolved by overwriting production with the changes made in the publication and won't be displayed in the Checking Changes screen.
Why Was This Change Made?
The previous behavior required users to manually address many types of conflicts, which was usually a time-consuming effort. The new behavior reduces the friction in the publishing process while guaranteeing publications’ users they will be able to publish the needed modifications.
Who Is Affected?
All publication users are affected, but the focus is on the ones responsible for solving the conflicts and publishing the content.
How Should I Update My Features or Implementation to Better Adopt the Breaking Change?
Consider that now Publications’s users have more power to overwrite production changes. If you understand that the end-user scenario still requires human verification in Modification Deletion cases, the previous behavior can be restored by using the Modification Deletion Conflicts Toggle on Instance Settings > Publications.
What Changed?
The Out-of-date feature, which allows publications to be labeled as “Out-of-date“ and prevents Users from publishing their content, is now off by default.
Why Was This Change Made?
The users still wanted to be able to publish publications created before Liferay upgrades, and now the conflict management improvements make this possible and safe.
Who Is Affected?
Users who have upgraded or plan to upgrade Liferay while having ongoing publications.
How should I update my features or implementation to better adopt the breaking change?
If needed, this feature can be enabled/disabled through the toggle on Instance Settings > Schema Version Check Enabled, which is off by default.
The two separate configuration menus in the widgets of content page has been merged into a single menu.
According to the deprecation feature flag pattern definition, the feature flag has been moved under Instance Setting.
The Collection Page has been removed from the page administrator. An upgrade path substitutes the Collection Pages for Content Pages with a collection display without any functional change.