What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
You can stop assembling a Liferay Client Extension project file by file: put the project in a Liferay Workspace, use the Liferay CLI when a starter project fits, configure the extension in client-extension.yaml, build it, and deploy it using the steps for your hosting model. The CLI starts a project; it does not automatically implement every extension use case.
What changes when you use a Client Extension workflow?
Liferay describes Client Extensions as a way to extend the platform without deploying code directly to Liferay. Their integration with Liferay APIs is intended to keep extensions loosely coupled from the platform implementation. This is an alternative to deploying OSGi modules directly, not a guarantee that every feature or integration can be built without configuration or code.
As an Amazon Associate I earn from qualifying purchases.
The project workflow replaces manual file assembly with a consistent place to define, build, and package extensions. A Client Extension project belongs in the workspace’s client-extensions/ directory. Its client-extension.yaml file defines one or more extensions, and the extension’s type determines how Liferay handles it. A successful project build produces a Liferay Universal File Format Archive (LUFFA) ZIP. Liferay’s Client Extensions overview and project guidance explain the supported concepts and workflow.
Choose a starter project that matches what you are building
Start with a Liferay Workspace, or adopt an existing one. The Liferay CLI’s liferay new flow can start a Client Extension or Liferay Platform project. The choice depends on where the application runs and how it integrates with Liferay; a Remote App and a Liferay Platform project are distinct starting points. Selecting a target platform sets default dependencies and build rules, so choose the target that matches the Liferay version you intend to use.
#1 Best Overall
Generation gives you a starting structure, not a finished extension. You still need to configure the extension in client-extension.yaml and implement its behavior. A project can define multiple extensions, but not every combination of extension types is compatible; incompatible groupings can cause a build failure. Check the project guidance for the relevant type and target platform before combining them. The official create-and-deploy guide covers project creation and extension configuration.
Build and deploy according to your Liferay hosting model
The archive is the build output, but the route from that ZIP to a running extension differs across SaaS, PaaS, and self-hosted installations. Do not assume a deployment command or pipeline for one model applies to another.
| Hosting model | Build and deployment path |
|---|---|
| SaaS | From client-extensions/, build with the workspace Gradle wrapper, then deploy the generated archive with lcp deploy --extension [extension-zip-file]. This requires the lcp CLI. Use the exact archive path and SaaS procedure documented for your environment. |
| PaaS | Commit Client Extension projects under the service workspace’s client-extensions/ directory and push the changes through the normal service build and deployment workflow. The Client Extension pipeline creates a distinct build. |
| Self-hosted | For a workspace bundle, the documented task is clean distBundleZip. For manual archive deployment, run clean build and copy the project ZIPs from dist/ to Liferay Home/osgi/client-extensions. |
The commands and paths above reflect Liferay’s documented workflows; verify them against the instructions for your platform and release. The SaaS and self-hosted build steps are described in Liferay’s create-and-deploy guide, while the PaaS guide describes the service-workspace pipeline.
Check prerequisites and version compatibility before building
- Java: Use a Java release supported by the compatibility matrix for your target Liferay DXP or Portal version. The required release is version-dependent, so do not infer it from a template or from another project.
- Workspace: Use a supported Liferay Workspace and place extension projects beneath its
client-extensions/directory. - SaaS CLI: Install and configure the
lcpCLI if you are deploying to SaaS. - Target platform: Match the CLI project’s selected target platform to the Liferay version you plan to use; it affects default dependencies and build rules.
- Extension types: Confirm the types in a project are compatible before defining several in the same project.
Because supported Java releases, CLI templates, and platform procedures can change, use the current compatibility matrix and release-specific Liferay documentation rather than treating an example as universal.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Use the CSS walkthrough as a small first project
If you want a concrete starting point, Liferay’s CSS walkthrough uses a sample workspace to build and deploy a CSS Client Extension with Gradle, then check the visual change in a local Liferay instance. It is useful for understanding the workspace, configuration, build, and verification sequence without suggesting that all extension types work the same way. The walkthrough’s example container tag, liferay/portal:7.4.3.132-ga132, is a version-specific example, not a current production-version recommendation. Follow the instructions and version appropriate to your environment. Read the CSS Client Extension walkthrough.
Quick Recap
Best Value
- Book - 1, 000 books to read before you die: a life-changing list (1000 before you die)
- Language: english
- Binding: hardcover
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.




