HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback

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: