Exam Area: Area 2 – Installation, Operation & Configuration (20%) Reference: https://docs.developers.optimizely.com/content-management-system/docs/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
| Add-on | NuGet Package | Purpose |
|---|---|---|
| Optimizely Search & Navigation | EPiServer.Find | Full-text search, faceted search |
| Optimizely Forms | EPiServer.Forms | Form builder for editors |
| Optimizely CMS TinyMCE | EPiServer.CMS.TinyMce | Rich text editor |
| Optimizely CMS UI React | Optimizely.CMS.UI.React | Headless / SPA editing support |
| Optimizely CMS Commerce | Mediachase.Commerce | E-commerce capabilities |
| Optimizely Visitor Groups | EPiServer.Personalization.CMS | Personalisation engine |
| Optimizely Content Delivery API | EPiServer.ContentDeliveryApi.Core | Headless REST API |
| Optimizely CMS AddOn Directory | (in Admin UI) | Browse/install add-ons from marketplace |
# .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();
/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.
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>
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.
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.
# 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)
module.config used for? (Registering client-side assets (JS, CSS) for an add-on)/modules/_protected/ directory)