Blogs
We are pleased to announce the release of Liferay Portal 7.4 CE GA1!

Announcing Liferay Portal 7.4 CE GA1
Liferay Portal 7.4 CE GA1 marks the first major release in the 7.4 release cycle. Although released later than hoped, Liferay Portal 7.4 CE GA1 continues following the rolling release cycle announced last year for 7.3. Liferay Portal 7.4 CE GA1 contains many exciting new features across almost every aspect of the platform with many new features being based on feedback received from our community.
Please see below for instructions on getting started as well as a comprehensive list of all of the great new features found in the release.
Download options
Liferay Portal and Liferay Commerce share the same Bundle and Docker image. To get started using either Liferay Portal or Liferay Commerce, choose the best download option suited for your environment below.
Docker image
To use Liferay Portal 7.4 CE GA1:
docker run -it -p 8080:8080 liferay/portal:7.4.0-ga1
For more information on using the official Liferay docker image see the liferay/portal repo on Docker Hub.
Bundles and other download options
If you are used to binary releases, you can find the Liferay Portal 7.4 CE GA1 and Liferay Commerce 4.0 release on the download page. If you need additional files (for example, the source code, or dependency libraries), visit the release page.
Dependency Management
If you are developing on top of Liferay Platform using Liferay Workspace, you will only need to define a single dependency artifact by adding the following line to each modules build.gradle file:
dependencies { compileOnly group: "com.liferay.portal", name: "release.portal.api" }
By setting a product info key property it will be possible to update all dependencies to a new version by updating the liferay.workspace.product property in the liferay workspace projects gradle.property file:
liferay.workspace.product = portal-7.4-ga1
When using an IDE such as Eclipse or IntelliJ all apis are immediately available in autocomplete for immediate use.
Liferay Portal Features
Experience Management
Experiences Flexibility
Personalization is one of the most powerful means marketers have when it comes to engaging their audience. Adapting content to the target segment of content has become a standard, but the effort involved is not always profitable.
To facilitate and speed up the reuse of experiences, now you can duplicate any experience on a page, and thus take advantage of any given content or fragment combination that you had already worked on.
Besides this, now you can create experiences without defining the audience in the first place, or to target “Anyone”. Just create the new experience and keep the proposed value for “Audience” -- “Anyone”. It will be created below the default one and so it won’t be active until the moment that you move it up in the list. This new feature allows several teams to work on different experiences for the same page without having them “activated” until they’re ready for publication.
More accurate content audits
As content audits involve analyzing contents by crossing two vocabularies, there’s an opportunity to also spot all that content that hasn’t been correctly categorized. That’s why we’ve got content that is categorized only with one audited vocabulary represented in the Content Audit Tool too. You’ll easily locate it through the “No vocabulary Specified” legends, and see the number of pieces of content with the grey bars.
We’ve also made it easier to select the vocabularies to audit and to flip axes: you’ll find the buttons right in the Content Audit Tool area.
And last but not least, now you can filter the list of content by clicking on a particular bar in the graph, so the matching filters will be applied.
We know it will never get funny but… have a happier content audit!
Integration with external video services
LPS-107020
Video is becoming more and more important at the time of creating great experiences and now Liferay makes it easier to use all your corporate videos to create content. This feature allows you to create shortcuts to videos stored in the most popular video services (Youtube, Vimeo, Facebook and Twitch) that will become part of your document library. In combinations with our tagging and categorization capabilities, it will help users search for the videos and reuse them in different pages or content.
Additionally, a Java API is provided to allow developers to include other video providers.
Manage document title and filename independently for exposing more human readable names
LPS-116505
It is very common to store documents in the document library that are meant to be accessible to external users and for them, the filename might not be enough to understand clearly what is the purpose of the document. In order to help you associate documents with a more meaningful name, we have decoupled the filename from the title and now Liferay manages both fields independently.
Native support for Adaptive Media in Content Pages and DPTs
LPS-112796
Automatic selection of image resolution and size for any image added to a Content Page, and Display Pages based on the Viewport Width.
Adaptive media currently allows to define image resolutions to fit automatically a given device screen size (viewport). Hence if a user is visualizing a web page from a Mobile or a Desktop the image size and resolution will be adapted automatically.
With Adaptive Media for content pages, content creators will now be able to benefit from its power without any extra effort, it will be supported natively in Pages. Once an image is added to a content page, the application works behind the scenes to deliver an adapted image appropriate to the device in use. The image resolution and image size are provided as well to provide a way to control them. If the content creator wants to take the lead and take control over the chosen resolution he/she can also do it and pick manually the adequate resolution.
Note that Adaptive Media is supported for all types of images in particular background images as shown below.
Forms-builder Experience for Web Content Structures and Document Types
Improved experience for editing content structures and creating reusable FieldSets
Define a FieldSet once and reuse it in other structures
A FieldSet is a group of fields that can be reused several times inside and outside the web content structure used for creating it. Once created it can still be edited and modified. A typical example would be a fieldset made of a “Title”, a “Picture” and “Description”. Let's say now you would like to reuse this group in another web content structure then you could just reuse it as it will be visible straight from the web content structure editor.
Propagate FieldSet modifications to all structures
Any change done to a FieldSet can be propagated seamlessly. You now want to add a “Summary” field to the fieldset made of a “Title”, a “Picture” and “Description” and used in several web content structures. The user only needs to add it to the fieldset and it can be propagated to all the Web Content Structures using it.
Web Content Structure editor usability
The previous Web Content Structure Editor had the inconvenience of making it difficult for users to drag and drop fields for building the structure, in particular when the structure was really long. We have enhanced the usability of the web content structure editor by leveraging the new design from the form builder. The new web content structure editor allows users to drag and drop structure fields and fieldsets, and is also more generally intuitive to use.
Localizable editables and fragments configurations
Localize images’ description and editable links for a full multi-language experience
LPS-114124
With this feature we have added support to have “Images” and “External Links” fully localizable so that users can have different links and different image descriptions for each language.
Previous to having that feature implemented, adding a fragment to a page in the default language and then creating an external link, or a link to a downloadable document for the other languages, the links were getting updated for all the languages. Sometimes this is useful (for example for untranslated links), but oftentimes it is not as we may need different links based on the locale. It was also necessary to allow the same for image descriptions.
Define specific fragment configurations as suitable for localization
LPS-124167
With this feature Marketers can configure a fragment and keep the configuration for a given locale.
Currently if you add a fragment to a page in the default language and then change the configuration of that fragment in a different language, it updates the corresponding fragment configs for all languages. Sometimes this is expected, but oftentimes it is not as we may need different config values based on the locale.
Let say you have a heading H1 that you would like to use for English and you would like to use H2 for Spanish, then a developer could just make the config field value configurable by locale by setting the field “localizable”: true, and content editors will be able to set the appropriate heading configuration for each locale. Note that this is just an example of usage, any type of configuration could become localizable in particular style configurations.
Other Enhancements
"Include “widget categories" and "fragment collections" in fragment search results
View items usage and re-assign them to Display Page Template
Support re-ordering the fragment editables within a Fragment
Order page search results using "most relevant" criteria when using keywords search
Allow scheduling a task at a precise configured datetime leveraging Cron Tabs
Digital Operations
See in which language each Forms response was submitted
LPS-122472
Previously, when creating localizable Forms with multiple different languages, it was not possible to identify through the UI the language applied by users during the submission of each Forms response. We have fixed this on 7.4 and now it's possible to see in which language each response was submitted, allowing Forms admins to easily understand what languages are being used the most by submitters, what languages are not being used by the Forms target audience and in which language each submission was probably written in. These information are available through the "View Entries" page of each Form.
File upload for guests in Forms
LPS-122760
As much requested, we improved the Upload Field Type to allow guest users to submit files in Forms. To set an Upload Field to allow guest submissions, the user only needs to select the option to ''Allow Guest Users to Send Files''.
Customize the label of Forms submit button
LPS-116866
If you don't feel comfortable with the out-of-the-box labels of Forms submit button, now it's possible to customize it through the interface and define the best label to adapt to each form context. This option is available in the Personalization tab of the Form Settings and you can define a label for each language supported by the Form.
Platform Improvements
Headless Delivery APIs
Exposing site pages and experiences APIs
LPS-98650
We continue to enhance our headless APIs and the latest addition to the headless delivery API is allowing developers to access the information of the pages published. Access either the page definition of the fragments included in a page or the HTML of the content of the page so you can embed it easily in your application. Find all the information about the endpoints with the API explorer.
Access the available languages of sites and asset libraries
LPS-124381
We have included an API to access the available languages configured at site or asset library level, so developers can request this information to build language selectors for their application, for example or to identify to which languages content can be created or translated.
Headless content management APIs
Access the different versions of a structured content
LPS-125608
For 7.4, we are introducing a new set of APIs to support content management use cases that will allow developers to control the whole publication process, content versioning, etc. This is the first step in that path, so now it is possible to check the different versions of a structured content, retrieve contents that are in draft or pending status, and so on.
Staging support for Asset Libraries
LPS-121502 and LPS-121328
Asset libraries were introduced in 7.3 to help users organize in a better way the content and assets meant to be reused across sites. Now it is possible to control when the content is available and connect your asset library with sites with local or remote staging enabled and keep the content synced.
This feature has been backported to 7.3 GA7 as well.
Site Templates enhancements
The main focus is on performance improvements:
Partial site template propagation filtered by last propagation date
Controlling when the changes from a site template are propagated by one click
Showing an alert about the possible consequences at switching the propagation off
Staging enhancements
The main focus is on performance improvements:
However, there is one modification that is about getting rid of confusions with clearing distinction among Staging and Publications UI labels and phrases.
OAuth2
LPS-126596
Trusted applications in OAuth2: there is no manual authentication grant that the user must take as a step.
This feature is added to be able to mark as trusted OAuth2 applications to avoid the manual authorization process during the process of obtaining a token.
It is useful for different types of customers, who want to manage in which cases an authorization by the user would not be necessary. Trusted applications feature is useful for pure JS Single Page Applications that execute features from an OAuth2 application.
LPS-126597
Remember my authorization grant for a specific application/client id on a specific device.
This feature is added to be able to remember the manual authorization to an OAuth2 application from a user in a device, it will avoid the manual authorization the following times trying to request a new token from that same device.
It is useful for different types of customers, who want to manage in which cases an authorization by the user in a device would be necessary only once during the time when their session in Portal is active. Remember my authorization grant feature is useful for pure JS Single Page Applications that execute features from an OAuth2 application.
LPS-129398
Remember my authorization grant for multiple application/client id on a specific device. This is an improvement for the previous single application/client id solution.
LPS-129395
In a new column in the registered application list administrators can see if the specific app is marked as trusted or allowed to have the remember my authorization for them immediately. That helps administrators to realize them without going to their detailed page and so make it easier to handle them.
LPS-129397
Function for being able to purge all the current authorizations for a specific app from the list of the registered apps.
This feature is a usability enhancement to make it possible to revoke all authorizations with a single click at the OAuth2 application list through an entry in the list items’ kebab menu also.
It is useful for OAuth2 administrators who can revoke all access to an application in a very quick way.
Remove IE11 support
LPS-121721
Over the years, support for the IE11 browser has led to many workarounds, polyfills and even specific settings to build Javascript in order to overcome IE11 limitations. From 7.4 onwards, all these bits have been removed from our codebase, leading to a cleaner, more modern compiler output. IE11 has been removed from our 7.4 compatibility matrix, nevertheless, it still remains in the matrix for 7.3 and below.
Remove Flash support
LPS-121730
Adobe stopped distributing and updating Flash Player after December 31, 2020 (“EOL Date”). Additionally, different browsers have already issued end of support notices or already removed support. Therefore, in Liferay 7.4, we removed all traces of Flash from our codebase. There is no feature which depends on Flash, no Flash applications (.swf) are distributed with DXP, and the mechanisms to include and serve Flash content have been removed.
Remove Soy support and update clay tags
LPS-122954 (and LPS-121933, LPS-121932, LPS-112468)
Soy templates support has been removed. This includes the Soy template engine and the SoyPortlet. Please note that using Soy client-side components is still possible because metal and metal-soy are still available. This means that a metal+soy component can be built and will run in the client just like before, however, metal is also on the way for deprecation.
As a consequence, all soy-supporting tags have been upgraded to work without the Soy Engine for an easier upgrade path.
Remove BS3-BS4 compat layer
LPS-123359
To facilitate theme upgrade from Bootstrap 3 to 4, we added a compatibility layer in the form of some CSS files in the styled, classic and admin themes, which allowed us to use Bootstrap 3 styles. This layer consumed unnecessary resources and could conflict with other styles. As a result of this removal, admin and classic themes become simpler and lighter, and all BS3 styles in the portal have been updated to use BS4.
Simplify JS Minification
LPS-122883
For many years, DXP has had a complex minification scheme that involves minifying resources on the fly in the server. This has caused plenty of performance and runtime issues over time and has even stalled progress because the minifiers are outdated and don't support new language features. Now, JS minification is done at build time according to the NODE_ENV variable. As a result, If it is set to production, the build process will minify all js files after building them. Otherwise it will not, leaving modules unminified. Run-time minification logic has been turned off by default, and marked as deprecated.
Consolidate SCSS compilation
LPS-122900
SASS file compilation has been added to the build process for npm-scripts, meaning that all SASS processing has been consolidated in a single, JS-based tooling, which is now used by the portal build process. In addition, the old node-sass scss processor, recently deprecated, has been replaced with the more modern dart-sass.
Data Integration
Data Integration Modules
Beginning with Liferay Portal 7.4 CE GA1 the data integration module is now available in Portal for everyone to use. Schedule integration jobs, integrate with connectors like Talend and Mulesoft, and schedule regular data syncs.
Use Dispatch Portlet to Have Insight Into All Scheduled Tasks
Build and package data and use any user-defined process such as Talend or Mulesoft to import and export data packages. Configure triggers to run jobs and have visibility into when jobs are executing next, run time, and the status of the job. With the Dispatch Portlet, you have visibility into all scheduled jobs and configured triggers.
Documentation
All documentation for Liferay Portal and Liferay Commerce can now be found on our documentation site: learn.liferay.com. For more information on upgrading to Liferay Portal 7.4 CE GA1 see refer to the Upgrade Overview.
Compatibility Matrix
Liferay's general policy is to test Liferay Portal and Liferay Commerce against newer major releases of operating systems, open source app servers, browsers, and open source databases (we regularly update the bundled upstream libraries to fix bugs or take advantage of new features in the open source we depend on).
Liferay Portal 7.4 CE GA1 and Liferay Commerce 4.0 were tested extensively for use with the following Application/Database Servers:
Application Server
Tomcat 9.0
Wildfly 17.0
Database
HSQLDB 2 (only for demonstration, development, and testing)
MySQL 5.7, 8.0
MariaDB 10.2, 10.4
PostgreSQL 12.x, 13.x
JDK
IBM J9 JDK 8
Oracle JDK 8
Oracle JDK 11
All Java Technical Compatibility Kit (TCK) compliant builds of Java 11 and Java 8
Source Code
Source is available as a zip archive on the release page, or on its home on GitHub. If you're interested in contributing, take a look at our contribution page.
Bug Reporting
If you believe you have encountered a bug in the new release you can report your issue by following the bug reporting instructions.
Getting Support
Support is provided by our awesome community. Please visit helping a developer page for more details on how you can receive support.