cx-composer
❯ cx-composer scaffold objectAction --with-code=ts
CX Composer scaffolding an Object Action in VS Code: command palette → type picker → wizard prompts → resulting file tree (client-extension.yaml, handler.ts, package.json, tsconfig, Dockerfile, LCP.json) + terminal success output.
my-action/ client-extension.yaml # my-action + my-action-oauth-agent handler.ts # Express, typed payload, mounted at resourcePath package.json tsconfig.json Dockerfile # two-stage: tsc build → node:20-alpine .dockerignore ✓ Object Action + paired oAuthApplicationUserAgent (Node.js or TypeScript)
01 · Scaffold

Scaffold real microservices, not just yaml.

Object Action, Workflow Action, Notification Type, Object Validation, Object Entry Manager, CAPTCHA, and every Commerce integration scaffold a full Node.js or TypeScript starter — Express handler, package.json, Dockerfile — with the paired oAuthApplicationUserAgent auto-declared in the same yaml. resourcePath you enter is what the handler mounts on.

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

How Scaffold works, in 6 steps.

    01

    Open the wizard

    Command Palette (⌘⇧P) → CX Composer: Scaffold New Project, or right-click any folder → Scaffold New Project.

    02

    Pick one of 28 CX types

    Filterable list grouped by category (Frontend, Configuration, Microservice, Batch, Commerce, Audiences).

    03

    Choose "With code" or "Yaml only"

    Microservice types offer Node.js or TypeScript. Frontend types offer a working Custom Element scaffold.

    04

    Answer type-specific prompts

    Only the fields Liferay actually requires for that type. resourcePath becomes the mount point in the generated handler.

    05

    Pick destination folder

    QuickPick lists candidate workspace folders (recommends client-extensions/). Escape hatch opens the native file picker.

    06

    Files are written

    client-extension.yaml + working code + Dockerfile + LCP.json + paired OAuth entry. Ready to blade gw buildClientExtensionZip.