Capability

Development and Tooling

Liferay offers a comprehensive toolkit to extend or customize your digital experience. Build applications quickly with low-code/no-code features like Objects, or leverage developer tools like Liferay Workspace and Blade CLI for further customizations.

For users on PaaS or running Self-Hosted, Liferay also offers tools deploying customizations.

Category
Category
Development
Development Liferay's development platform makes developers faster and more efficient by providing a baseline set of features to build upon. Rather than start from scratch, you can start instead...
Defining a Custom Data Schema
Defining a Custom Data Schema The ticketing application requires custom data fields and selections. You use Liferay objects and picklists to define a custom data schema. Creating Custom Picklists...
Deploying a Custom Application
Deploying a Custom Application You can use a custom element client extension to render a JavaScript application as a widget on a Liferay site page. The application is served by Liferay and...
Ticket Management with Cron Jobs
Ticket Management with Cron Jobs Use Cron jobs to automate managing tickets. For example, have a job to run at a regular schedule to delete any tickets that have a resolution type of duplicate or...
Implementing a Documentation Referral System
Implementing a Documentation Referral System The ticketing system can be further enhanced with a documentation referral system. The system searches automatically for relevant documentation based on...
Client Extension Reference
Client Extension Reference Liferay Self-Hosted Liferay SaaS Liferay PaaS Liferay 7.4 You can find code examples for all types of client extensions in liferay-portal Frontend Client Extensions ...
Packaging Client Extensions
Packaging Client Extensions Liferay Self-Hosted Liferay SaaS Liferay PaaS Liferay 7.4 Client extension projects are built as deployable archives called Liferay Universal File Format Archives...
Working with Client Extensions
Working with Client Extensions Liferay Self-Hosted Liferay SaaS Liferay PaaS Liferay 7.4 Using client extensions, you can extend Liferay without deploying OSGi modules. Just like traditional...
Building a Time Off Requester
Building a Time Off Requester Liferay 7.4+ With Liferay Objects, you can build entire applications without writing code or deploying modules. Here, create a Time Off Request application using...
Using Object Data with React Charts
Using Object Data with React Charts Here you'll use Objects, Headless APIs, and custom element remote applications to create a dynamic chart for data dashboards. First, you'll set up a new DXP...
Configuration as Code
Configuration as Code Liferay Self-Hosted Liferay SaaS Liferay PaaS Liferay 7.4 Liferay instance configurations are deployable with client extensions. For example, you can deploy OAuth2...
Client Extensions
Client Extensions Liferay Self-Hosted Liferay SaaS Liferay PaaS Liferay 7.4 When you want to extend Liferay, either by modifying its look and feel or by calling functions outside of Liferay, you...
Instance Settings YAML Configuration Reference
Instance Settings YAML Configuration Reference You can use an instance settings client extension to configure a wide variety of Liferay configurations. Each configuration is referenced by its PID...
OAuth Headless Server YAML Configuration Reference
OAuth Headless Server YAML Configuration Reference You can define an OAuth headless server client extension with a client-extension.yaml file. Usage Details This client-extension.yaml file defines...
Micro Frontends
Micro Frontends Micro frontends extend the concept of microservices to the frontend side of development. You can build a fully-featured and powerful browser application that uses a microservice...
OAuth User Agent YAML Configuration Reference
OAuth User Agent YAML Configuration Reference You can define an OAuth user agent client extension with a client-extension.yaml file. Usage Details This client-extension.yaml file defines an OAuth...
JavaScript Import Map Entry YAML Configuration Reference
JavaScript Import Map Entry YAML Configuration Reference Usage Details This client-extension.yaml file defines a JavaScript import map entry client extension: assemble: - from: build/static ...
Language Client Extensions
Language Client Extensions Liferay DXP 2025.Q1+/Portal GA132+ A language client extension adds new language keys or overrides existing keys and their translations. For example, you can translate...
Customizing Liferay's Look and Feel
Customizing Liferay's Look and Feel One of the easiest ways to get started developing on Liferay's platform is to modify its look and feel. You can change everything from its favicon to its entire...
Bundling Resources in a JavaScript Import Map Entry Client Extension
Bundling Resources in a JavaScript Import Map Entry Client Extension Liferay DXP 2023.Q1+/Portal GA92+ JavaScript import map entry client extensions make JavaScript code or resources available to...
Client Extensions UI Reference
Client Extensions UI Reference Liferay's widget client extensions (custom element and iframe) register applications with Liferay, adding them as widgets to site pages. Additionally, you can style...
Traditional Java-Based Development
Traditional Java-Based Development Liferay is a complex open-source platform built on several key technologies and architectural principles. Liferay is written mostly in Java and built on the OSGi...
Configuration Framework
Configuration Framework Setting and Accessing Configurations Categorizing a Configuration Scoping Configurations Portlet Level Configuration Configuration Form Renderer DDM Form Annotations ...
Categorizing a Configuration
Categorizing a Configuration When you register a configuration interface, the UI for your application is generated in System Settings → Platform → Third Party. If you prefer a different section and...
Node Version Information
Node Version Information Liferay DXP uses Node (and NPM) for many different frontend components. Specifically, the Liferay Theme Generator and Liferay's JavaScript application tools require the use...
Core Frameworks
Core Frameworks
Using the Bootstrap 3 Compatibility Layer in Liferay 7.4
Using the Bootstrap 3 Compatibility Layer in Liferay 7.4 As of Liferay DXP 7.4 GA1, the Bootstrap 3 compatibility layer is removed from the built-in packages in Liferay frontend applications. If...
Completely Custom Configuration
Completely Custom Configuration A configuration UI is generated automatically when you create a configuration interface. But in some cases you want a completely custom UI for your configuration....
Configuration Model Listener Reference
Configuration Model Listener Reference Use model listeners in your own configurations to listen for events and execute code in response. Creating a model listener requires only three steps: ...
Configuration Form Renderer
Configuration Form Renderer When you create a configuration interface, a configuration UI is automatically generated. But in some cases you want customize the look and feel of the UI. For example,...
DDM Form Annotations
DDM Form Annotations The auto-generated configuration interface UI may be too simplistic for some configurations. You can use the Dynamic Data Mapping (DDM) form annotations to customize your...
Field Options Provider
Field Options Provider You can populate a drop-down list manually in the @Meta.AD annotation of the configuration interface. But you can also populate the option labels and values automatically...
Hiding the Configuration UI
Hiding the Configuration UI Liferay generates a configuration UI automatically after a configuration interface deploys. But you may have certain use cases where you want to hide the UI. For...
Dependency Injection
Dependency Injection
Portlet Level Configuration
Portlet Level Configuration With the configuration framework, you can set your application's configuration for different levels of scope. Where Instance and Site-scoped configurations use...
Scoping Configurations
Scoping Configurations In Liferay DXP, you can set an application's configuration to different levels of scope: System, Instance, Site, or Portlet. For example, if you create an application to have...
Setting and Accessing Configurations
Setting and Accessing Configurations You can use Liferay's configuration framework to add a settings UI for a MVC Portlet. See the Example Portlet Then, follow these steps: Download and unzip...
Using Direct Synchronous Messaging in Previous Versions
Using Direct Synchronous Messaging in Previous Versions Liferay DXP 7.4 U48/Portal GA49 and Below Direct synchronous messaging is the easiest way to block processing until all listeners receive a...
Portlets
Portlets Liferay DXP started off as a portal server for Java-based web applications called portlets (see JSR 168, JSR-286, and JSR-362). Portlets process requests and generate responses like any...
Logs
Logs The OSGi Log Service Extender enables bundles to provide OSGi logging configuration using embedded properties files META-INF/osgi-logging.properties or META-INF/osgi-logging-ext.properties....
Message Bus
Message Bus The Message Bus provides a loosely coupled way to exchange messages. A class sending a message invokes the Message Bus to send the message to a destination, while other classes...
Using Asynchronous Messaging
Using Asynchronous Messaging Message Bus's asynchronous option provides fire and forget behavior; send a message and continue processing without waiting for a response. An asynchronous message is...
Listening for Messages
Listening for Messages You can listen for messages sent to any registered Message Bus destination, whether it's built-in to DXP/Portal, defined by third-parties, or created by you. Messages sent to...
Listening for Registration Events
Listening for Registration Events Liferay DXP 2023.Q3/Portal GA92 and Below The messaging API supports listening for destination and message listener registration events. Here are some reasons to...
Tuning Messaging Performance
Tuning Messaging Performance Liferay DXP 2023.Q3/Portal GA92 and Below Messaging performance is tuned at the destinations. Performance depends on the destination type, the amount of processing the...
Using Default Synchronous Messaging in Previous Versions
Using Default Synchronous Messaging in Previous Versions Liferay DXP 7.4 U48/Portal GA49 and Below In default synchronous messaging, the sender blocks while a Message Bus thread dispatches the...
Portlet Descriptor to OSGi Service Property Map
Portlet Descriptor to OSGi Service Property Map Here's a map of portlet XML descriptor values to OSGi service properties for publishing OSGi Portlets. The properties centralize and simplify portlet...
Portlet 3.0 API Opt In
Portlet 3.0 API Opt In A portlet must specify version 3.0 to opt in to the Portlet 3.0 API. The 3.0 Portlet API version can be specified in the following ways. Standard Portlet @PortletApplication...
Portlet IDs
Portlet IDs Below is a listing of the portlet IDs for the default portlets in Liferay DXP. You can use these IDs to embed portlets in your theme's sitemap. Collaboration PortletID...
Servlets
Servlets
Data Frameworks
Data Frameworks
Asset Framework
Asset Framework The asset framework is behind many of Liferay's most powerful features. It provides tools for displaying and interacting with any type of content and data. For example, if you build...
Enabling Assets
Enabling Assets Many of Liferay's applications (e.g. Blogs, Documents and Media, Message Boards, etc.) are asset-enabled out of the box. You can publish assets with the Asset Publisher widget or...
Cache
Cache
Data Scopes
Data Scopes
Service Builder
Service Builder An application without reliable business logic or persistence isn't much of an application at all. Unfortunately, writing your own persistence code often takes a great deal of time....
Expando
Expando Accessing Custom Fields with Expando
Accessing Custom Fields With Expandos
Accessing Custom Fields With Expandos When you need additional fields in your application, you can always add them in your service model definition and re-run Service Builder. This adds new columns...
Implementing an Item Selector
Implementing an Item Selector Item selectors are pop-up dialogs for selecting assets, such as documents, videos, or users. By configuring the item selector's criteria and defining its usage, you...
Advanced Queries
Advanced Queries Service Builder doesn't limit you to elements in service.xml. If simple finders aren't sufficient for getting data out of your application, there are three other ways to make the...