Repository Structure

Last updated on 30th September, 2017 by George Taylor

AEM is built on top of the OAK jcr:repository and even though we speak about applications, assets and content, in the underlying structure everything is a node in the jcr:repository.


AEM has defined a specific structure for where things are stored. The following folders are one that you should know about

  • apps
    • All applications have a folder in here
    • Applications will be discussed later
  • bin
    • All servlets generally point to /bin
    • You shouldn't install anything here
  • content
    • All content is installed here
    • dam
      • The DAM (Digital Asset Management) area is for storing assets
      • Generally you would create a sub folder for your application
    • usergenerated
      • Stores user generated content
      • Generally you would create a sub folder for your application
    • <system>
      • You should have a folder for your system or base site
      • The structure under this is for you to define, however it is generally done in the following
        • /content/<system>/<country>/<locale>/<content>
        • This structure allows for language translations via the translation api
        • While the structure can be anything you want it is best to define it early on as changing the structure at a later date is very problematic
  • etc
    • Additional configuration items
    • There are a lot of different items in the /etc folder and i will only go through the ones i think are important to know about
    • clientlibs
      • These are the system clientlibs and while should NEVER be modified it gives you access to how AEM has done it's own client libs
    • designs
      • This is where the possible designs (css/js/clientlibs) are stored for the different applications
      • It is possible for a single application to have multiple designs for different visual layouts
        • This is used if you have a single application for different countries/companies e.t.c and want to have the same components but also want them to look different
    • map
      • The location of all sling mappings
      • For the publisher i add map.publish to the /etc folder and configure it. This will be discussed in the ui.apps section on sling mappings
    • tags
      • All tags are installed here.
      • While tags are used on the content I haven't had much use for them in the applications
  • home
    • All security objects are stored here
    • users
      • As it is named all users are stored in the users folder
      • It is recommended if you are creating specific users as part of your application deploy to add them to a new folder
      • system
        • System users are stored in the system folder
        • If your application needs to access non standard areas for writing data i.e. /content/usergenerated it is recommended to create a system user to do this work
      • One thing to note is that users id's are very hard to figure out programmatically and when i have created users i generally create them in the useradmin screens and export them from the package manager
      • Each user id MUST be unique
    • groups
      • As it is named all user groups are stored here
      • It is recommended if you are creating specific groups as part of your application deploy to add them to a new folder
      • Groups like users have to have a unique id so it is best to create them in useradmin and export them
  • libs
    • This is where AEM stores it's core components and structures
    • Do not write anything to this area, I will explain later how to modify AEM structures
  • system
    • This is an AEM system folder and should not be used