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
Poshi Layers
Poshi Layers
Running a Test
Running a Test Open the poshi-ext.properties file on your poshi-standalone directory and add the following line, replacing the TestCaseFileName#TestCaseName with the one you created in Creating A...
Syntax Validation
Syntax Validation The Poshi Standalone grade projects includes a validation task that can be used to check your code for syntax errors before running your test. To use this, simply run ./gradlew...
Poshi Basics
Poshi Basics New features, improvements, and system upgrades can sometimes introduce unexpected behaviors and bugs. Running suites of automated tests is an advantageous method of identifying issues...
Setup
Setup Prerequisites A supported version of Java. Google Chrome. Gradle or Gradle Wrapper 6.6.1 or higher. Setting up the Poshi Standalone Gradle Project Create a new directory, example...
Functions
Functions In Poshi, Functions handle extra WebDriver commands that an element might require to interact with a page object or element. Functions combine the basic methods defined in the...
Testcases
Testcases A testcase file in Poshi is a collection of test scenarios grouped in blocks of code called test blocks. The three main test blocks: setUp, test, and tearDown, are made up of multiple...
Paths
Paths A path is an element on a page that a test will interact with. An element can be a button, text field, link, image, paragraph, or just about anything you would need to assert, click, or type...
Using Variables
Using Variables Though not a Poshi layer, variables are a large part of Poshi tests. Variables, like in other programming languages, are used to store data which can be referenced and reused in...
Configuration
Configuration In order to give test writers easy access to commonly used functions, paths, or macros, Poshi resources were created to store existing Poshi files as dependencies. These resources can...
Poshi Resources
Poshi Resources To give Poshi test writers easy access to commonly used functions or other files, Poshi resources were created to store existing Poshi files as dependencies that can be loaded apart...
Using Poshi Resources
Using Poshi Resources Once the Poshi resources jar file is loaded onto your Poshi project, you are now able to use Liferay's commonly used functions, paths, and macros. To distinguish between files...
Macros
Macros A macro is a set of functions that perform a task. Macros are where locators (paths) and functions are brought together to script interactions that a user performs on the system being...
Reference
Reference Node Version Information
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...
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: ...
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...
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,...
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...
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 ...
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...
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...
Building Applications
Building Applications For maximum compatibility with all of Liferay's deployment options, you can combine Liferay's Objects, Client Extensions, and other features and tools to build real-world...
Building a Custom Ticketing System
Building a Custom Ticketing System Liferay makes it easy for you to build digital solutions. For example, you can create a custom ticketing application with the styling and features needed for your...
Applying a Custom Theme
Applying a Custom Theme You can use different front-end client extensions to customize the look and feel of your site. Specifically, theme CSS type client extension can be used as an alternative to...
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...
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...
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...
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...
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...
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...
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...
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 ...
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...
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 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...
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...
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...
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...
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...
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...
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...
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 ...
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...
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...
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 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...
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....
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...
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...
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...
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...
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...
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...