iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
To create a Liferay Client Extension, put a project in a Liferay Workspace’s client-extensions/ directory, define the extension in client-extension.yaml, implement its use case, and build it into a Liferay Universal File Format Archive (LUFFA) ZIP. Then deploy that archive using the workflow for your hosting model: SaaS, PaaS, or self-hosted.
What a Client Extension project does
Liferay describes Client Extensions as a way to extend the platform without deploying code directly to Liferay. They integrate with Liferay APIs while aiming to remain loosely coupled from the platform implementation. That makes them a different approach from deploying OSGi modules directly; it does not mean every kind of customization can be implemented identically.
In a workspace, a Client Extension project belongs under client-extensions/. Its client-extension.yaml file declares one or more extensions, and each extension’s type tells Liferay how to handle it. The project must also contain the implementation and configuration its particular use case requires. [Liferay Client Extensions overview; Getting started]
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Choose a project type before generating files
The Liferay CLI’s liferay new flow can start a Client Extension or Liferay Platform project. It is a project starter, not a command that automatically completes and deploys an extension for every use case. The choice affects the project setup: the selected target platform sets default dependencies and build rules. [Liferay getting-started guide]
#1 Best Overall
Remote App Client Extension
Choose a Remote App when the application runs outside Liferay and connects to the platform through the supported integration points. This keeps the application’s runtime separate from DXP or Portal.
Liferay Platform project
Choose a Liferay Platform project when the extension is intended to be deployed to DXP or Portal. Confirm that the project type and extension configuration are compatible with your target release before building.
Prepare the workspace and declare the extension
Start with a Liferay Workspace and use the Java release supported for your target DXP or Portal version. The required Java version is version-dependent; check Liferay’s compatibility matrix rather than assuming one release works for every workspace. SaaS deployment also requires the lcp CLI. [Liferay getting-started guide]
-
Create or use a Liferay Workspace, then place the project in its
client-extensions/directory. -
Use
liferay newif its project starter fits your needs, and select the appropriate project type and target platform. You can also adopt an existing project, provided it follows the workspace and configuration requirements. -
In the project’s
client-extension.yaml, declare the extension or extensions and configure each one for its intended type and use case. -
Implement the extension’s assets or application behavior. A generated project does not replace this step.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Build the project using the workspace Gradle wrapper. The resulting deployable artifact is a LUFFA ZIP archive.
Project grouping has compatibility constraints: placing incompatible extension types together can cause a build to fail. Check the current documentation for the chosen extension types and target platform before grouping projects. [Liferay getting-started guide]
Deploy according to your Liferay hosting model
The archive format does not make the deployment process interchangeable. Use the path for the environment where the extension will run. The exact commands and pipeline conventions can change with the Liferay release and service configuration, so verify them against the documentation for your target. [Deploying Client Extensions]
| Hosting model | Documented deployment path |
|---|---|
| SaaS | Build from client-extensions/ with the workspace Gradle wrapper, then deploy the generated archive using lcp deploy --extension [extension-zip-file]. The lcp CLI is required. [Liferay getting-started guide] |
| PaaS | Commit the projects under the service workspace’s client-extensions/ directory, push the changes, and use the service’s normal build and deployment workflow. The Client Extension pipeline creates a distinct build. [Deploying Client Extensions] |
| Self-hosted | For a workspace bundle, the guide documents clean distBundleZip. For manual archive deployment, run clean build, then copy the project ZIPs from dist/ to Liferay Home/osgi/client-extensions. [Liferay getting-started guide] |
Use a small CSS extension as a first example
Liferay’s CSS walkthrough demonstrates the workflow in a manageable case: begin with its sample workspace, build and deploy the CSS extension with Gradle, and check the change in a local Liferay instance. It is useful for understanding the sequence from workspace project to visible result, even if your eventual extension uses another type. [Customizing Liferay with a Client Extension]
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallThe walkthrough’s example container tag is liferay/portal:7.4.3.132-ga132. Treat that as the version used in the example, not as a recommendation for a current production deployment. Use a Portal or DXP version that matches your environment and verify its compatibility requirements.
Best Value
- Book - 1, 000 books to read before you die: a life-changing list (1000 before you die)
- Language: english
- Binding: hardcover
Check these details when a build or deployment fails
-
Build failure after grouping projects: review whether the extension types in the project are compatible together.
-
Java or dependency errors: confirm the Java release, target platform, and dependencies against the compatibility information for your specific DXP or Portal version.
-
SaaS deployment command unavailable: install or configure the required
lcpCLI, then build the archive before running the documented deploy command.Recommended Free Tools
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Archive not appearing in the target environment: confirm that you used the deployment route for SaaS, PaaS, or self-hosted rather than assuming the same ZIP is installed the same way everywhere.
Why use the documented project workflow?
Hand-assembling extension files leaves you to manage the workspace layout, extension declaration, build configuration, and deployment artifact yourself. A workspace project and client-extension.yaml provide the documented structure, while the project build produces the archive expected by the deployment process. The CLI can help start a suitable project, but the extension still needs correct configuration and an implementation designed for its use case.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

