cx-composer
❯ cx-composer build # inside client-extensions/my-widget/
Right-click a client-extension.yaml → CX Composer: Build This Extension → terminal runs blade gw buildClientExtensionZip inside just that extension folder → build/my-widget-1.0.0.zip appears in the tree, status bar flips to 'built · just now'.
$ blade gw buildClientExtensionZip → build/my-widget-1.0.0.zip ✓ built in 3.2s (this CX only, not the whole workspace)
08 · Build

Per-extension build.

Runs the Gradle task inside the specific CX folder. In monorepos, right-click the folder or the manifest — it targets exactly that project.

at a glance
# ────── step by step ──────

How Build works, in 6 steps.

    01

    Right-click the target

    Right-click a client-extension.yaml or its folder → CX Composer: Build This Extension.

    02

    Runs Blade inside that folder

    blade gw buildClientExtensionZip is invoked with the extension folder as the cwd — not the workspace root.

    03

    Monorepo-aware

    Even when you have 30 CX folders side-by-side, the task targets exactly the one you clicked. No workspace-wide rebuilds.

    04

    Progress in the Terminal panel

    Standard VS Code integrated terminal — full Gradle output, ANSI colours, and copyable paths.

    05

    Zip lands in build/

    Output at build/<extension-id>-<version>.zip, ready to upload to your Liferay server or Liferay Cloud service.

    06

    Workspace view flips to built

    The Extensions in Workspace sidebar auto-refreshes on the new zip — the row status goes green.