Skip to content

OSGi Modules

Command: blade create -t api [name]
Purpose: Creates a standalone API module to expose interfaces or utilities for other modules.
Use Case: Define shared interfaces, DTOs, or utilities consumed by multiple modules (e.g., OSGi services).


Command: blade create -t control-menu-entry [name]
Purpose: Adds custom entries to Liferay’s Control Menu (top-right gear icon).
Use Case: Add shortcuts (e.g., “Admin Tools”) to the Control Menu for specific roles.


Command: blade create -t form-field [name]
Purpose: Extends Liferay Forms with custom field types.
Use Case: Create reusable form fields (e.g., a color picker or geo-location input).


Command: blade create -t fragment [name]
Purpose: Creates a Liferay Fragment project for reusable UI components.
Use Case: Build drag-and-drop content fragments (e.g., banners, FAQs) for Page Builder.


Command: blade create -t js-theme [name]
Purpose: Generates a JavaScript-based theme using Liferay’s Theme Builder.
Use Case: Modern theme development with npm/webpack (replaces traditional Freemarker themes).


Command: blade create -t js-widget [name]
Purpose: Creates a JavaScript portlet (Widget) using React/Vue/Angular.
Use Case: Build lightweight, framework-based portlets with liferay-portal.js.


Command: blade create -t layout-template [name]
Purpose: Defines custom page layouts (e.g., 2-column, grid-based).
Use Case: Design reusable layouts for pages in Liferay Sites.


Command: blade create -t modules-ext [name]
Purpose: Extends or overrides Liferay core modules (OSGi components).
Use Case: Modify core behavior (e.g., override JournalArticleLocalService).


Command: blade create -t mvc-portlet [name]
Purpose: Generates a traditional JSP-based portlet (Liferay MVC).
Use Case: Legacy portlet development with JSPs and Portlet API.


Command: blade create -t npm-angular-portlet [name]
Purpose: Scaffolds an Angular-based portlet using Liferay’s JS Toolkit.
Use Case: Build Angular apps integrated into Liferay (e.g., admin UIs).


Command: blade create -t npm-react-portlet [name]
Purpose: Creates a React-based portlet with Liferay’s JS Toolkit.
Use Case: Modern React apps embedded in Liferay (most popular JS approach).


Command: blade create -t npm-vuejs-portlet [name]
Purpose: Scaffolds a Vue.js portlet using Liferay’s JS Toolkit.
Use Case: Vue.js applications within Liferay.


Command: blade create -t panel-app [name]
Purpose: Adds custom entries to Liferay’s Product Menu (left sidebar).
Use Case: Admin panels (e.g., “Analytics Dashboard”) for specific roles.


Command: blade create -t portlet-configuration-icon [name]
Purpose: Adds icons to a portlet’s configuration menu (wrench icon).
Use Case: Custom actions (e.g., “Export Data”) in portlet configuration.


Command: blade create -t portlet-provider [name]
Purpose: Dynamically contributes portlets to Liferay’s Add Panel.
Use Case: Show/hide portlets based on context (e.g., permissions).


Command: blade create -t portlet-toolbar-contributor [name]
Purpose: Adds buttons to a portlet’s toolbar (e.g., “Publish”).
Use Case: Extend default portlet actions (e.g., custom “Share” button).


Command: blade create -t rest [name]
Purpose: Creates a REST service using JAX-RS.
Use Case: Expose Liferay data via REST APIs (e.g., /api/users).


Command: blade create -t rest-builder [name]
Purpose: Generates REST APIs from OpenAPI (Swagger) YAML files.
Use Case: Design-first API development with automatic scaffolding.


Command: blade create -t service [name]
Purpose: Creates an OSGi service (declarative or programmatic).
Use Case: Business logic encapsulation (e.g., UserNotificationService).


Command: blade create -t service-builder [name]
Purpose: Scaffolds a Service Builder project for database operations.
Use Case: CRUD apps with generated persistence layers (e.g., *LocalService).


Command: blade create -t service-wrapper [name]
Purpose: Overrides/extends existing Liferay OSGi services.
Use Case: Modify core services (e.g., logging or validation hooks).


Command: blade create -t simulation-panel-entry [name]
Purpose: Adds entries to Liferay’s Device Simulation panel.
Use Case: Custom device profiles (e.g., “Kiosk Mode”).


Command: blade create -t spring-mvc-portlet [name]
Purpose: Generates a Spring MVC-based portlet.
Use Case: Portlets using Spring Framework (alternative to Liferay MVC).


Command: blade create -t template-context-contributor [name]
Purpose: Injects variables into FreeMarker/Soy templates.
Use Case: Add dynamic data to themes or fragments (e.g., userTimeZone).


Command: blade create -t theme [name]
Purpose: Creates a traditional Freemarker-based theme.
Use Case: Custom site styling (legacy alternative to JS themes).


Command: blade create -t theme-contributor [name]
Purpose: Adds resources (CSS/JS) to all themes.
Use Case: Global styling/scripts (e.g., corporate fonts).


  • Modern vs. Legacy: Prefer OSGi (e.g., mvc-portlet) over WAR-based modules.
  • JavaScript: Use npm-react-portlet or js-widget for modern UIs.
  • Extensibility: Modules like service-wrapper or control-menu-entry enable customization.