Liferay reference resources


 A compendium of reference resources found online.


Liferay on Twitter

Liferay on IRC

Liferay Community Forums

Community Forums

Liferay source code

Liferay's main source code resides in two repositories, Liferay Portal and Liferay Plugins, as expanded below. Please note that I have only expanded upon what I have personally referenced. Please expand the index as you reference useful and undocumented areas in the code base.

Liferay maintains several other repositories related to features and supporting documentation.

If you wish to build core Liferay or its plugins, read the CONTRIBUTING guide. It includes details on using the repositories and building the software.

On GitHub...

Liferay Developer Network - User & Admin > User Guide

What is Liferay Portal?

Building a Site with Liferay Web Experience

Using Liferay Portal as a collaborative platform

Using Liferay as a web platform

Extending and customizing Liferay for your own needs


Web Experience Management

Starting Site Development

Creating Sites

Creating and Managing Pages

Displaying Pages on Mobile Devices

Building Sites from Templates

Creating Pages from Templates

Importing/Exporting Pages and Content

Creating Teams for Advanced Site Membership Management

Creating Web Content

Publishing Basic Web Content

Designing Uniform Content

Staging Content for Publication

Enabling Staging

Using the Staging Environment

Scheduling Web Content Publication

Publishing Content Dynamically

Organizing Content with Tags and Categories

Defining Content Relationships

Geolocating Assets

Searching for Content

Publishing Assets

Publishing RSS Feeds

Restoring Deleted Assets

Configuring Applications

Look and Feel Configuration

Exporting/Importing App Data

Communication Between Apps

Sharing Applications with Other Sites

Application Permissions

Application Scope

Configuration Templates

Styling Apps with Application Display Templates


Managing Documents and Media


Creating A Social Network

Business Productivity

Collecting Information from Users

Basic Forms

Creating Advanced Forms

Creating Simple Applications

Creating Data Definitions

Creating Data Lists

Using Templates to Display Forms and Lists

Using Workflow

Enabling Workflow

User Management

Adding and Managing Users

Adding and Managing Organizations

User Groups

Roles and Permissions

Password Policies

Managing Apps

Managing and Configuring Apps

Using the Liferay Marketplace

Installing Apps Manually

Liferay App Types

Configuring Liferay Portal

Setting Up a Liferay Portal Instance

System Wide Settings

Using Liferay’s Script Engine

Using Web Services for Remote Portlets (WSRP)

Custom Fields

Liferay Developer Network - User & Admin > Development

Liferay Developer Network - User & Admin Reference

Liferay Developer Network - User & Admin > Social Office

Liferay Developer Network - Developer > Tutorials

Introduction to Liferay Development


Liferay as a Development Platform

Introduction to Front-End Development

JavaScript in Liferay Portal


Starting Module Development

Configuring Dependencies

Finding Extension Points

From Liferay Portal 6 to 7

What Hasn’t Changed and What Has

Benefits of Liferay Portal CE 7.0 for Liferay Portal 6 Developers

OSGi and Modularity for Liferay Portal 6 Developers

Improved Developer Tooling: Liferay Workspace, Maven Plugins and More

Planning Plugin Upgrades and Optimizations

Upgrading Plugins to Liferay Portal CE 7.0

Adapting to Liferay Portal CE 7.0’s API with the Code Upgrade Tool

Resolving a Plugin’s Dependencies

Upgrading the Liferay Maven Build

Upgrading Your Theme from Liferay Portal 6.1 to 7.0

Upgrading Your Theme from Liferay Portal 6.2 to 7.0

Upgrading Portlet Plugins

Upgrading Hook Plugins

Upgrading Layout Templates

Optimizing Plugins for Liferay Portal CE 7.0

Migrating Traditional Plugins to Workspace Web Applications

Modularizing Plugins

Migrating a Theme from the Plugins SDK to the Liferay Theme Generator

Migrating a Theme from the Plugins SDK to Workspace

Customization with Ext Plugins

Liferay Portal Comparison 6.2 vs 7.0 vs 7.1 Overview

Developing a Web Application

Development Setup Overview

Creating a Working Prototype

Writing Your First Liferay Portal Application

Creating an Add Entry Button

Generating Portlet URLs

Linking to Another Page

Triggering Portlet Actions

Creating a Form

Implementing Portlet Actions

Displaying Guestbook Entries

Generating the Back-end

What is Service Builder?

Generating Model, Service, and Persistence Layers

Implementing Service Methods

Refactoring the Prototype

Organizing Folders for Larger Applications

Defining the Component Metadata Properties

Creating Portlet Keys

Integrating the New Back-end

Updating the View

Fitting it All Together

Writing an Administrative Portlet

Creating the Classes

Adding Metadata

Updating Your Service Layer

Defining Portlet Actions

Creating a User Interface

Using Resources and Permissions

Configuring Your Permissions Scheme

Permissions in the Service Layer

Creating Permissions Helper Classes

Permissions in JSPs

Displaying Messages and Errors

Creating Language Keys

Adding Failure and Success Messages

Adding Messages to JSPs

Leveraging Search

Enabling Search and Indexing for Guestbooks

Enabling Search and Indexing for Guestbook Entries

Updating Your User Interface For Search

Assets: Integrating with Liferay’s Framework

Enabling Assets at the Service Layer

Implementing Asset Renderers

Adding Asset Features to Your User Interface

Generating Web Services

Creating Remote Services with Service Builder

Implementing Permission Checks

Writing an Android App for Liferay Portal

Beginning Android Development for Your Liferay Portal Instance

Setting up the Guestbook Portlet

Building the Guestbook Mobile SDK

Creating the Android Project

Installing the Guestbook Mobile SDK and Liferay Screens for Android

Designing Your App

Using Login Screenlet for Authentication

Creating Guestbook List Screenlet

Getting Started with Guestbook List Screenlet

Creating Guestbook List Screenlet’s UI

Creating Guestbook List Screenlet’s Interactor

Creating Guestbook List Screenlet’s Screenlet Class

Creating Entry List Screenlet

Getting Started with Entry List Screenlet

Creating Entry List Screenlet’s UI

Creating Entry List Screenlet’s Interactor

Creating Entry List Screenlet’s Screenlet Class

Using the Guestbook List and Entry List Screenlets

Understanding GuestbooksActivity’s UI

Preparing GuestbooksActivity for Guestbook List Screenlet

Using Guestbook List Screenlet

Creating a Fragment for Entry List Screenlet

Using Entry List Screenlet


Liferay IDE

Installing Liferay IDE

Creating a Liferay Workspace with Liferay IDE

Setting Proxy Requirements for Liferay IDE

Updating Liferay IDE

Creating Modules with Liferay IDE

Creating Themes with Liferay IDE

Deploying Modules with Liferay IDE

Managing Module Projects with Liferay IDE

Installing a Server in Liferay IDE

Using Gradle in Liferay IDE

Using Maven in Liferay IDE

Enabling Code Assist Features in Your Project

Using Front-End Code Assist Features in IDE

Blade CLI

Installing Blade CLI

Installing Blade CLI with Proxy Requirements

Creating a Liferay Workspace with Blade CLI

Creating Modules with Blade CLI

Deploying Modules with Blade CLI

Managing Your Liferay Server with Blade CLI

Updating Blade CLI

Liferay Workspace

Installing Liferay Workspace

Configuring a Liferay Workspace

Setting Proxy Requirements for Liferay Workspace

Development Lifecycle for a Liferay Workspace

Updating Liferay Workspace


Installing Liferay Maven Artifacts

Generating New Projects Using Archetypes

Creating a Module JAR Using Maven

Deploying a Module Built with Maven to Liferay Portal

Creating a Maven Repository

Deploying Liferay Maven Artifacts to a Repository

Using Service Builder in a Maven Project

Compiling Sass Files in a Maven Project

Building Themes in a Maven Project

Maven Workspace

Liferay Sample Modules


Liferay MVC Portlet

Creating an MVC Portlet

MVC Action Command

MVC Render Command

MVC Resource Command

Liferay Soy Portlet

Creating a Soy Portlet

Spring MVC

JSF Portlets with Liferay Faces

Generating a JSF Project from the Command Line

Generating a JSF Project Using IDE

Creating a JSF Project Manually

Services in JSF

Making URLs Friendlier

Preparing Your JavaScript Files for ES2015

Using ES2015 Modules in your Portlet

Applying Lexicon Styles to your App

Automatic Single Page Applications

Creating Layouts inside Custom Portlets


Overriding Core JSPs

Overriding App JSPs

Overriding Liferay Services (Service Wrappers)

Overriding Language Keys

Overriding MVC Commands

Overriding lpkg files

Creating Model Listeners

Application Display Templates

Implementing Application Display Templates


Android Apps with Liferay Screens

Preparing Android Projects for Liferay Screens

Using Screenlets in Android Apps

Using Views in Android Screenlets

Using Offline Mode in Android

Architecture of Liferay Screens for Android

Architecture of Offline Mode in Liferay Screens

Creating Android Screenlets

Creating Android List Screenlets

Creating Android Views

Packaging Your Android Screenlets

Using Liferay Push in Android Apps

Accessing the Liferay Session in Android

Adding Custom Interactors to Android Screenlets

Rendering Web Content in Your Android App

Adding Offline Mode Support to Your Android Screenlet

Android Best Practices

Liferay Screens for Android Troubleshooting and FAQs

iOS Apps with Liferay Screens

Mobile SDK

Service Builder

What is Service Builder?

Service Builder Persistence

Business Logic with Service Builder

Data Access

Data Scopes

Web Services


Service Builder Web Services

Liferay WebSocket Whiteboard

Asset Framework

Adding, Updating, and Deleting Assets for Custom Entities

Implementing Asset Categorization and Tagging

Relating Assets

Implementing Asset Priority

Rendering an Asset

Liferay’s Workflow Framework

Export/Import and Staging

Decision to Implement Staging

Understanding Staged Models

Generating Staged Models Using Service Builder

Creating Staged Models Manually

Understanding Data Handlers

Developing Data Handlers

Initiating New Processes with ExportImportConfiguration Objects

Using the Export/Import Lifecycle Listener Framework


Making Your Applications Configurable

Implementing Configuration Actions

Transitioning from Portlet Preferences to the Configuration API


Applying Social Bookmarks

Adding Comments to your App

Rating Assets

Implementing Ratings Type Selection and Value Transformation

Item Selector

Selecting Entities Using the Item Selector

Creating Custom Item Selector Entities

Creating Custom Item Selector Views

Liferay Forms

Form Field Types

Creating Form Field Types

Adding Settings to Form Field Types

Introduction to Liferay Search

Customizing Liferay Search

Application Security

Adding Permissions to Resources

Authentication Pipelines

Service Access Policies


Localizing Your Application

Automatically Generating Language Files

Using Liferay’s Language Settings


Adding a WYSIWYG Editor to a Portlet

Modifying an Editor’s Configuration

Adding New Behavior to an Editor


Creating and Contributing new Buttons to AlloyEditor

JavaScript Module Loaders

Configuring Modules for Liferay Portal’s Loaders

Using External Libraries

Liferay AMD Module Loader

Loading Modules with AUI Script in Liferay Portal

Liferay JavaScript API’s

Liferay ThemeDisplay (star)(star)(star)(star)(star)

Working with URLs in JavaScript

Liferay Portal JavaScript Utilities

Invoking Liferay Services

Front-End Taglibs

Using the Liferay UI Taglib

Using the Liferay Util Taglib

HTML Forms

Forms and Validation

Creating Forms with Liferay’s Taglibs

Form Navigator Extensions

Creating Form Navigator Contexts

Themes and Layout Templates


Liferay Theme Generator


Importing Resources with a Theme

Using Developer Mode with Themes

Theme Contributors

Context Contributors


Theme Builder

Creating a Theme Thumbnail

Specifying Color Schemes in your Theme

Layout Templates

Layout Templates with the Liferay Theme Generator

Creating Layout Templates Manually

Portlets and Themes

Theming Portlets

Embedding Portlets in Themes and Layout Templates

Portlet Decorators

Lexicon CSS and Themes

Importing Lexicon CSS into a Theme

Product Navigation

Customizing the Product Menu

Customizing the Control Menu

Extending the Simulation Menu

Providing the User Personal Bar


Unit Testing with JUnit

Liferay Slim Runtime

Arquillian Extension for Liferay Example

Arquillian Example Sample Portlet

Arquillian Integration Test Example

Arquillian Functional Test Example

JaCoCo Code Coverage Example

Running the Arquillian Example

Injecting Service Components into Tests

OSGi Basics for Liferay Development

Adding Third Party Libraries to a Module

Using the WAB Generator

Overriding Reluctant Service References


Resolving Bundle Requirements

Resolving Bundle-SymbolicName Syntax Issues

Why Aren’t my Module’s JavaScript and CSS Changes Showing?

Resolving ClassNotFoundException and NoClassDefFoundError in OSGi Bundles

Why Aren’t JSP overrides I Made Using Fragments Showing?

Connecting to Data Sources Using JNDI

Detecting Unresolved OSGi Components

Adjusting Module Logging

Implementing Logging

Using OSGi Services from EXT Plugins

Calling Non-OSGi Code that Uses OSGi Services

Identifying Liferay Artifact Versions for Dependencies

Declaring Optional Import Package Requirements

Data Upgrades

Creating Data Upgrade Processes for Modules

Upgrading Data Schemas in Development

Customizable Web Applications

Providing Portlets to Manage Requests

Liferay Developer Network - Developer > Reference

Development Reference

Liferay API Modules

Portlet Descriptor to OSGi Service Property Map

Classes Moved from portal-service.jar

Theme Gulp Tasks

Theme Reference Guide

Screenlets in Liferay Screens for Android

Screenlets in Liferay Screens for iOS

Liferay Faces

Liferay Faces Version Scheme

Understanding Liferay Faces Bridge

Understanding Liferay Faces Alloy

Understanding Liferay Faces Portal



Service Builder Plugin

Source Formatter Plugin

Theme Builder Plugin

Project Templates

Activator Template

API Template

Control Menu Entry Template

Form Field Template

Fragment Template

FreeMarker Portlet Template

Layout Template

MVC Portlet Template

Panel App Template

Portlet Configuration Icon

Portlet Template

Portlet Provider Template

Portlet Toolbar Contributor Template

REST Template

Service Template

Service Builder Template

Service Wrapper Template

Simulation Panel Entry Template

Soy Portlet Template

Spring MVC Portlet Template

Template Context Contributor Template

Theme Template

Theme Contributor Template

Sample Modules





Item Selector Criterion and Return Types

Felix Gogo Shell

Breaking Changes

Liferay Developer Network - Developer > Liferaypedia

Liferaypedia is a community driven effort that attempts to describe all terms that are related to Liferay either directly or indirectly.

Various other Liferay resources

Click column headings to sort column...

Title Author Published or
last known update
Parent, Source Site
or Collection
Topic 1 Topic 2

Tutorial: Advanced Navigation in Liferay Themes

kl Hamilton


Tutorial: Advanced Navigation in Liferay Themes – Part 2 kl Hamilton 2013-06-06

Tutorial: Advanced Navigation in Liferay Themes – Part 3 kl Hamilton 2013-06-06

Top 5 DevOps Features in Liferay DXP

Keith O'Connell


Introducing Speedray Architecture Pattern for Liferay DXP

Don Davis


The Top 10 New Features in Liferay DXP 7

Vivek Agarwal


Global Scope

How to use the new Global Scope


localhost REST API
Non-official Liferay Portal CE images on DockerHub! Manuel de la Peña 2017-09-20 Company Blogs

A Checkbox Named Cacheable

Javeed Chida 2017-06-12 JAVEED CHIDA Blog

Crafting document download links in a velocity asset publisher ADT

Javeed Chida 2017-01-19 JAVEED CHIDA Blog Application Display Templates (ADTs)

Stopping By Abou Shousha's On A Snowy Evening

Javeed Chida 2016-12-08 JAVEED CHIDA Blog Categories Tags

Content SEO Title - Putty In Your Hand

Javeed Chida 2016-11-11 JAVEED CHIDA Blog SEO Page Titles

My 27th of September at LSNA2016

Javeed Chida 2016-09-27 JAVEED CHIDA Blog Liferay Symposium 2016

My 26th of September at LSNA2016

Javeed Chida 2016-09-26 JAVEED CHIDA Blog Liferay Symposium 2016

Content SEO - Hidden In Plain Sight

Javeed Chida 2016-09-15 JAVEED CHIDA Blog SEO Metadata

The Glorious Simplicity of Structure Inheritance

Javeed Chida 2016-08-13 JAVEED CHIDA Blog Structures

Fun with Generic Content Templates

Javeed Chida 2016-07-01 JAVEED CHIDA Blog Templates

Smart content using category properties

Javeed Chida 2016-05-18



Liferay Portal CMS Concepts for Non-Technical Users

Javeed Chida 2016-05-12 JAVEED CHIDA Blog Liferay Content Management

Content-driven applications: A Marriage Between CMS Templates and RESTful services

Javeed Chida 2016-04-15 JAVEED CHIDA Blog Templates REST

Oh How I Love Asset Publisher, And Making Peace With Content Friendly URLs

Javeed Chida 2016-02-19 JAVEED CHIDA Blog

Crafting Content Friendly URLs

Javeed Chida 2016-01-22 JAVEED CHIDA Blog

Search-backed and content-driven Megamenus

Javeed Chida 2015-12-28 JAVEED CHIDA Blog

Customizing Liferay search results with a JSP hook & a content template

Javeed Chida 2015-11-30 JAVEED CHIDA Blog

LRNAS2015 left me cautiously craving a 7.0 upgrade

Javeed Chida 2015-11-25 JAVEED CHIDA Blog Liferay Symposium 2015

Necessary SiteMinder Configuration..

David H Nebinger 2017-09-08



Building JS Portlets Part 2

David H Nebinger 2017-06-27 DAVID H NEBINGER Blog

Building JS Portlets Part 1

David H Nebinger 2017-06-27 DAVID H NEBINGER Blog

Responsive Responsibility

David H Nebinger 2017-06-26 DAVID H NEBINGER Blog

Disabling LPKG Index Validation

David H Nebinger 2017-06-21 DAVID H NEBINGER Blog

Fixing Module Package Access Modifiers

David H Nebinger 2017-06-17 DAVID H NEBINGER Blog

REST Custom Context Providers

David H Nebinger 2017-06-16 DAVID H NEBINGER Blog

Resolving Missing Components

David H Nebinger 2017-06-15 DAVID H NEBINGER Blog

Securing The /api/jsonws UI

David H Nebinger 2017-06-12 DAVID H NEBINGER Blog

ServiceBuilder and Upgrade Processes

David H Nebinger 2017-05-17 DAVID H NEBINGER Blog

Getting Started with Building Liferay from Source

Minhchau Dang 2017-05-18


Divide and Conquer: Rendering Structured Web Content with the Asset Publisher

Eduardo P. Garcia 2017-07-19


Application Display Templates (ADT)

Fantastic Extension Points - And Where to Find Them

Eduardo P. Garcia 2016-12-02 EDUARDO P. GARCIA Blog

Integrating Audience Targeting with your Apps – Part II: Rules

Eduardo P. Garcia 2015-10-18 EDUARDO P. GARCIA Blog

Reach the Right Audience: Integrating Audience Targeting with your Apps

Eduardo P. Garcia 2015-10-04 EDUARDO P. GARCIA Blog

Implementing custom authentication in DXP



Forms in DXP


Liferay DXP and machine learning; Liferay as an integration platform

Carlos Hernandez 2017-07-03


Soy Cheat Sheet

Liferay Themes and Jenkins Auto build Christian Klein
Das Blog

Using the Audience Targeting Appplications (Liferay 6.2)

Debugging Liferay 7 In Intellij David H Nebinger 2016-09-16 DAVID H NEBINGER Blog

Working with JSON in Freemarker ALLEN ZIEGENFUS 2017-04-07 ALLEN ZIEGENFUS Blog Templates JSON
Introducing Liferay DXP Cloud (webinar)
Liferay Commerce
2018-11-02 Github Repository Commerce
Liferay frontend certification notes 1 2019-02-01 Github Repository Frontend Certification
Liferay frontend certification notes 2 Bruno Pineda 2018-10-11 Github Repository Frontend Certification