⚙️ Installation & Configuration
Addons Management
📖 Docs

Add-ons Management - Optimizely CMS 12

Exam Area: Area 2 – Installation, Operation & Configuration (20%) Reference: https://docs.developers.optimizely.com/content-management-system/docs/add-ons


1. What are Add-ons?

Add-ons are NuGet packages that extend Optimizely CMS functionality beyond the core. They follow the same module registration pattern as the CMS itself:

NuGet package install → ServiceCollectionExtensions → IConfigurableModule

2. Common Official Add-ons

Add-onNuGet PackagePurpose
Optimizely Search & NavigationEPiServer.FindFull-text search, faceted search
Optimizely FormsEPiServer.FormsForm builder for editors
Optimizely CMS TinyMCEEPiServer.CMS.TinyMceRich text editor
Optimizely CMS UI ReactOptimizely.CMS.UI.ReactHeadless / SPA editing support
Optimizely CMS CommerceMediachase.CommerceE-commerce capabilities
Optimizely Visitor GroupsEPiServer.Personalization.CMSPersonalisation engine
Optimizely Content Delivery APIEPiServer.ContentDeliveryApi.CoreHeadless REST API
Optimizely CMS AddOn Directory(in Admin UI)Browse/install add-ons from marketplace

3. Installing an Add-on via NuGet

# .NET CLI
dotnet add package EPiServer.Find --version 16.*

# Package Manager Console (Visual Studio)
Install-Package EPiServer.Find -Version 16.*

Most add-ons include an IConfigurableModule that registers services automatically. Some require explicit registration in Program.cs:

// EPiServer.Find example
builder.Services.AddFind();

// EPiServer.Forms example
builder.Services.AddEpiServerForms();

4. CMS Add-on Manager (Admin UI)

/episerver/cms/admin → Add-ons
  → Browse available add-ons from Optimizely marketplace
  → Install (downloads and installs NuGet packages)
  → Update installed add-ons
  → View installed versions

Note: In modern CMS 12 projects, it is recommended to manage add-ons via NuGet in your project file (for better version control) rather than through the Admin UI installer.


5. module.config

Add-ons register their client-side assets via module.config:

<!-- module.config (in add-on's protected modules folder) -->
<?xml version="1.0" encoding="utf-8"?>
<module productName="MyAddOn" version="1.0">
  <clientResources>
    <add name="myaddon-styles" resourceType="Style"
         path="ClientResources/styles.css" />
    <add name="myaddon-js" resourceType="Script"
         path="ClientResources/main.js" />
  </clientResources>
</module>

6. Protected Modules

Client-side resources for add-ons are placed in /modules/_protected/:

MyProject/
  modules/
    _protected/
      MyAddOn/
        module.config
        ClientResources/
          main.js
          styles.css

These are served through a protected handler that respects CMS authentication.


7. Version Compatibility

Always verify add-on compatibility when updating CMS core:

Core package version ←→ Add-on version must match major version

EPiServer.CMS  12.x.x  ←→  EPiServer.Find  16.x.x  (major version depends on vendor)
EPiServer.CMS  12.x.x  ←→  EPiServer.Forms 6.x.x

Check the release notes and compatibility matrix on Optimizely's documentation portal.


8. Uninstalling an Add-on

# Remove NuGet package
dotnet remove package EPiServer.Find

# Remove service registration from Program.cs
# Remove module.config and ClientResources
# Clean up any module tables from SQL (if needed — check add-on uninstall guide)

Review Questions

  1. What is the recommended way to manage add-on packages in CMS 12? (Via NuGet in the project file — not through the Admin UI installer)
  2. What is module.config used for? (Registering client-side assets (JS, CSS) for an add-on)
  3. Where are protected module files served from? (/modules/_protected/ directory)
  4. What should you check before updating a CMS add-on? (Version compatibility with the CMS core package — check the release notes)
  5. What NuGet package provides full-text search in CMS 12? (EPiServer.Find)