CX Composer for Liferay
The developer workbench for Liferay Client Extensions — inside VS Code.
Scaffolding for all 28 Liferay Client Extension types. IntelliSense on client-extension.yaml. Per-extension build. Free validators for client-extension.yaml, LCP.json, and Dockerfile.
cxcomposer.dev · Extension reference · hello@cxcomposer.dev
Why CX Composer
Authoring a Liferay Client Extension means writing client-extension.yaml from memory, wiring up assets and Gradle tasks by hand, and hoping the schema you copied from learn.liferay.com is up to date. CX Composer collapses all of that into an editor-first workflow.
- Scaffold once, ship often — pick a target folder, pick a type, answer the required prompts. You get a full project — manifest, README, assets — that builds on first try.
- Never write yaml from memory — completions and Markdown hover for every field on every type, driven by a schema pulled straight from Liferay's official YAML reference and cross-checked against 131 real production files in
liferay/liferay-portal.
- Catch typos before deploy fails —
instanceableq when you meant instanceable? Squiggle on the exact line with a did-you-mean suggestion.
- Per-extension build —
blade gw buildClientExtensionZip runs inside the specific client-extension folder. Monorepo-aware, right-click friendly.
Features
Scaffold every type. One wizard.
Multi-step wizard for all 28 Liferay Client Extension types: Custom Element, IFrame, Global CSS, Global JS, Theme CSS, Theme Favicon, Theme Sprite Map, JS Import Map Entry, Editor Config Contributor, FDS Cell Renderer, FDS Filter, Static Content, OAuth Application (Headless Server / User Agent), Instance Settings, Notification Type, Object Action, Object Validation Rule, Object Entry Manager, Workflow Action, CAPTCHA, Batch, Site Initializer, Commerce Payment Integration, Commerce Checkout Step, Commerce Shipping Engine, Commerce Tax Engine, Audiences Custom Attributes.
Each type gets type-appropriate assets and required prompts.
IntelliSense that reads Liferay's docs
Completions and Markdown hover for every field. Unknown-field detection with did-you-mean suggestions. Missing-required-field diagnostics.
Validate three file types out of the box
client-extension.yaml — full schema, all 28 types
LCP.json — Liferay Cloud service configuration
Dockerfile — instruction ordering, deprecation warnings
Auto-runs on save and open. Explicit Validate File command surfaces every diagnostic in the Problems panel plus a summary toast.
Per-extension build
Runs blade gw buildClientExtensionZip inside the specific client-extension folder — not the whole workspace. In monorepos, right-click any client-extension.yaml and the build targets exactly that project.
Right-click integrations
- Right-click any folder →
Scaffold New Project or Add Client Extension Here
- Right-click a
client-extension.yaml → Add Extension, Validate, Build
- Right-click any file →
Validate File (works on all three supported file types)
Activity Bar panel
Dedicated CX Composer view with grouped actions (Project, Build, License) and a live license status row that shows plan, account, start date, and renewal date.
Free vs. Pro
Free (everyone)
- Validation for
client-extension.yaml, LCP.json, Dockerfile
- Auto-runs on save + open
- Did-you-mean suggestions for typos and unknown fields
- Problems-panel integration
Pro — $15 / year
- Scaffold new projects — all 28 CX types
- Add Client Extension — append blocks or drop new manifests via folder right-click
- Per-extension Build —
blade gw buildClientExtensionZip
- IntelliSense — completions + Markdown hover on
client-extension.yaml
- Snippets — YAML / JS / TS / CSS (
lrcx-* prefixes)
Get a Pro license: store.cxcomposer.dev
Run CX Composer: Activate License and paste your key. Keys are stored securely in VS Code's SecretStorage and re-verified against Gumroad on a 7-day cadence with an additional 7-day offline grace period.
Requirements
- VS Code 1.90+
- Blade CLI on your
PATH — only if you use the Build command (configurable via cxComposer.blade.path)
- Liferay Workspace with the workspace Gradle plugin — only if you build
IntelliSense, hover, validation, and scaffolding need nothing else — no additional VS Code extensions required.
Settings
| Setting |
Default |
Description |
cxComposer.blade.path |
blade |
Path to the Blade CLI executable. |
cxComposer.build.gradleTask |
buildClientExtensionZip |
Gradle task run inside the client extension folder to produce its .zip. |
cxComposer.license.key |
"" |
Legacy setting; prefer Activate License command. |
FAQ
Q. What is a Liferay Client Extension?
A declarative package defined by a client-extension.yaml manifest. There are 28 supported types — frontend widgets (Custom Element, IFrame), theming (Theme CSS, Global CSS/JS), configuration (OAuth apps, Instance Settings), microservices (Object Action, Workflow Action, Notification Type, CAPTCHA), batch (Batch, Site Initializer), and Liferay Commerce integrations. Extensions are built into a .zip with blade gw buildClientExtensionZip and deployed to a Liferay DXP server.
Q. Does CX Composer replace Blade?
No — it complements Blade. CX Composer invokes Blade for build, but adds editor-first IntelliSense, validation, and a wizard-driven scaffold that Blade doesn't provide.
Q. Can I use CX Composer without paying?
Yes. Validation for client-extension.yaml, LCP.json, and Dockerfile is free forever. Everything else requires a Pro license.
Q. What Liferay DXP versions are supported?
CX Composer's schema targets Liferay DXP 2024.Q1+ and Liferay Portal GA100+. The Client Extension format has been stable since DXP 2023.Q4.
Q. Is CX Composer affiliated with Liferay?
No. CX Composer is an independent third-party product. See cxcomposer.dev/legal for the trademark notice.
Q. How is my license key stored?
In VS Code's built-in SecretStorage. Re-verification against Gumroad happens every 7 days with an additional 7-day offline grace period.
Support
Trademark notice
Liferay® and Liferay DXP® are registered trademarks of Liferay, Inc. CX Composer for Liferay is an independent third-party product and is not affiliated with, endorsed by, or sponsored by Liferay, Inc.