Mutable versus Immutable Areas of the Repository

The /apps and /libs areas of AEM are considered immutable because they cannot be changed (create, update, delete) after AEM starts (that is, at runtime). Any attempt to change an immutable area at runtime fails.

Everything else in the repository, /content, /conf, /var, /etc, /oak:index, /system, /tmp, and so on, are all mutable areas, meaning they can be changed at runtime.

WARNING
As in previous versions of AEM, /libs should not be modified. Only AEM product code may deploy to /libs.

Oak Indexes

Oak indexes (/oak:index) are managed by the AEM as a Cloud Service deployment process. The reason is because the Cloud Manager must wait until any new index is deployed and fully reindexed before switching over to the new code image.

For this reason, although Oak indexes are mutable at run time, they must be deployed as code so that they can be installed before any mutable packages are installed. Therefore /oak:index configurations are part of the Code Package and not part of the Content Package as described below.

TIP
For more details about indexing in AEM as a Cloud Service, see Content Search and Indexing.

Experience Manager Project Package Structure

This diagram provides an overview of the recommended project structure and package deployment artifacts.

The recommended application deployment structure is as follows: