Optimizely Content Management System (CMS) has a flexible user interface where you can easily add your own components.
To enable partner developers to easily extend the CMS user interface, plug-in areas have been added at common extension points. There is an Asynchronous Module Definition (AMD) module for each plug-in area that can be required during initialization; at which time it is possible to add custom commands to the plug-in area.
The plug-in areas **only** accept command prototypes; see the documentation on the [command pattern](🔗) for more information on how to create a command. You should **only** command prototypes are added to the plug-in area since they will be constructed at runtime. When constructed they are set with a model specific to the plug-in area.
## Add a command to a plug-in area
You should add your command prototypes to the plug-in area [during module initialization](🔗). This is done by requiring the plug-in area AMD module and adding the command prototype via the `add
` method. Here is an example of adding the reload children command to the navigation tree:
## Available plug-in areas
The following is a list of the available plug-in areas, a description of where the plug-in area appears, the AMD module ID, and an example of the model that the registered commands will receive.
### Navigation tree
Used for plugging into the context menu and component menu of the navigation tree. In CMS, this is the _page tree_ and in Optimizely Customized Commerce, this is the _catalog tree_.
#### Module id
### Project overview
Used for plugging into the main menu and project items menu of the project overview.
#### Module id
### Assets pane
Used for plugging into the context menu of assets pane.
#### Module id
### Edit notifications
Used for plugging edit notifications.
#### Module id
The following example shows how to add command to all plugin areas: