Follow this article to receive email notifications when Optimizely Content Management System (SaaS) features are available for 2026.
May 11
Manage styles with Opal tools
Use the new CMS (SaaS) Opal tools to list, view, create, and update styles for rows, columns, sections, and content types, all directly through Opal chat. Combined with Opal's existing ability to create and manage CMS content, you can now handle the full content creation and editing experience without leaving Opal.
- List available styles – Ask Opal to return all styles available in your instance, including what content they apply to, whether they are set as default, and a summary of their settings.
- View style details – Ask Opal for the full details of any style, including its settings and available choices.
- Create a style – Describe the style you want, including its name, what it applies to, settings, and choices. Opal creates it for you.
- Update an existing style – Change a style's name, default state, or settings without rebuilding it from scratch.
Bug fixes
-
CMS-50522 – Fixed an issue where the
cms_create_content_itemOpal tool accepted invalid locales or locales that were not enabled in the instance. The tool now validates the locale against the instance's enabled locales and returns an error listing the available options when the locale is not enabled.
May 5
JavaScript SDK is now generally available
Build content-driven experiences faster with the JavaScript SDK, now generally available. Developers can model, fetch, and render CMS content using a modern, React-ready SDK that reduces manual overhead.
- Structured content modeling – Define content types, property groups, and display templates for clean, predictable content.
- Simple content fetching – Fetch, filter, and sort content with built-in utilities and webhook support.
- Modern rendering – Render pages, experiences, and rich text with live preview and DAM asset support.
- Developer-friendly tooling – Take advantage of full TypeScript support with autocomplete, error handling, and detailed logs.
- Faster workflows – Use CLI tools to sync content and content types directly from CMS.
April 21
Access your CMP DAM library from CMS
The CMP Library picker is now available as a full asset selection option directly within the CMS editor. Alongside the existing Content Manager picker, you can browse and select CMP DAM assets without leaving the CMS editor, giving you more flexibility in how you find and manage assets across both systems, all in one place.
Access the CMP Library picker by clicking Browse DAM from supported content types in the CMS editor.
Assets are validated against Optimizely Graph before being applied. Renditions are not supported. The Browse action now fulfils the role previously held by the legacy Replace command.
View open-source license agreements in CMS
You can now access open-source license agreements for third-party packages directly from the Help menu in edit mode (go to Help > License Agreement). This gives you visibility into the licenses behind the software delivered to your browser, without needing to look elsewhere.
Bug fixes
- CMS-41162 – Fixed the issue where the Select Content tree for a content area with allowed experience types only displayed experiences directly under the root page, rather than all matching content.
- CMS-46562 – Fixed the issue where duplicate content loading during delta synchronization caused content items to be re-indexed multiple times in the same sync cycle.
-
CMS-48944 – Fixed the issue where the
UnstructuredDataproperty was incorrectly shown as a mapping option when converting a page to an experience in Settings > Convert Pages. - CMS-49311 – Fixed the issue where the Compare tool displayed empty properties and images due to race conditions in the async loading chain when toggling the Compare view.
- CMS-49330 – Fixed the issue where Undo and Redo did not work in Visual Builder after an autosave.
- CMS-49456 – Fixed the issue where hovering over a property overlay in Visual Builder caused the page to scroll unexpectedly to that property.
- CMS-49671 – Fixed the issue where variation names longer than 50 characters caused content indexing to fail. Variation names are now limited to 50 characters.
-
CMS-50192 – Increased the service bus
PrefetchCountto improve message consumption throughput under high load, such as during large content imports. - CMS-50326 – Optimized the URL address SQL lookup query to significantly reduce logical reads and SQL Server resource utilization during address resolution.
-
CMS-50454 – Fixed the crash in the
RequiredTypevalidator that occurred when aContentReferenceproperty contained an external reference to a non-existing content item, such as after an export, import, or database restoration. - CMS-50978 – Fixed the issue where expanding or embedding content area item properties in nested page content areas was incorrectly blocked.
March 28
Manage API keys without impersonation
The impersonation option is no longer available when creating or managing API keys. This aligns the UI with the deprecation of this feature at the API level.
Navigate CMS modules with cleaner URLs
URL paths for the following CMS modules now align with the Optimizely brand, delivering a cleaner navigation experience. These changes affect URL segments only. Underlying package, assembly, and class names remain unchanged, so no compatibility issues or breaking changes are introduced.
The following updates are formatted as module – new URL segment.
-
EPiServer.Cms.UI.Admin–Settings -
EPiServer.Cms.UI.Settings–Profile -
EPiServer.Cms.UI.VisitorGroups–VisitorGroups -
EPiServer.Cms.UI.ContentManager–ContentManager -
EPiServer.Cms.Forms.UI–Forms -
EPiServer.Cms.UI.Webhooks–Webhooks -
EPiServer.Cms.UI.Credentia–Credentials -
Optimizely.Graph.Cms–GraphQL -
Optimizely.Cms.OpalChat–OpalChat -
EPiServer.Cms.TinyMce–TinyMce -
EPiServer.Cms.UI.Extensibility–Extensibility -
EPiServer.Cms.DamIntegration.UI–DamIntegration
Import content with greater file control
Content import now enforces the AllowedFileExtensions allow list. Any file with an extension not on the allowlist is blocked, while all other valid files continue to import as normal. A message identifies any blocked files so you know exactly what to address.
Keep choice property values consistent
CMS now validates values provided for select list and dropdown list choice properties, including those submitted through the API, against their predefined selectable options. This prevents invalid values from being applied to content instances and keeps your content data consistent.
Avoid disruption from deprecated API endpoints
The preview2 version of the CMS REST API reached end-of-life on December 1, 2025, and is no longer available. Update any integrations still using preview2 endpoints to avoid service disruption. See the July 3, 2025 enhancements for guidance on migrating to a supported version.
Bug fixes
- CMS-26909 – Fixed an issue where user deletion did not adhere to the same access control policies as user update and creation. User handling now applies consistent access control for delete, update, and create operations.
- CMS-28236 – Fixed an issue where scheduled jobs that stopped running (for example, due to a server restart) did not display a clear status. Now, the Scheduled Jobs page includes a new Unresponsive status to indicate when a job is no longer running as expected.
- CMS-40097 – Fixed an issue where the authentication token renewal flow could leave you in a logged-in state with an expired authentication token. Now, improved error handling guarantees that either the token renewal succeeds or your authentication cookie is invalidated, triggering a re-authentication challenge.
- CMS-43990 – Fixed an issue where you could not scroll inside drop-down lists, preventing you from accessing all available choices. You can now scroll within drop-down lists.
- CMS-44592 – Fixed an issue where the Translate button was incorrectly enabled when a user without permission to the active language tried to translate content into that language. The button is now disabled in this scenario, and the warning message has been updated to inform users that they do not have the necessary language permissions to perform the translation.
- CMS-44606 – Fixed an issue where the Translate button was incorrectly disabled when a user viewed a page that existed only in a language they did not have permission to edit. Users can now use the Translate button to translate that content into a language they have access to, even when the source language is read-only for them.
-
CMS-46541 – Fixed an issue where you received an error and could not save a
ContentReferenceproperty that references an external content item that no longer exists. Now, the system handles unresolved content references gracefully, letting you save theContentReferenceproperty while providing appropriate warnings about broken references. - CMS-46610 – Fixed an issue that prevented users from saving external links exceeding 255 characters. The system now supports external links up to 2000 characters, enabling users to share full URLs without encountering saving restrictions.
- CMS-48035 – Fixed an issue where the number of failed items in the delta indexing job output was printed twice, displaying an incorrect count (for example, 303303 instead of 303). The output now correctly displays the number of failed items once (for example, 303).
- CMS-48891 – Fixed an issue where some properties did not load correctly for variations when several variation versions were loaded in a batch.
- CMS-49280 – Fixed an issue where changes did not save to nested blocks within content areas. Now, you can save all modifications to such nested blocks, improving content-editing reliability in CMS.
- CMS-49418 – Fixed an issue where content serialization to Optimizely Graph failed when an XHTML string property contained an invalid or malformed link. Now, the serialization process gracefully handles invalid links within XHTML strings, ensuring you can publish content without errors.
-
CMS-49486 – Fixed an issue where internal permanent link formats were incorrectly exposed in Optimizely Graph indexing. Now, these internal permanent links are exposed as
internal, improving the consistency and security of Optimizely Graph. - CMS-49693 – Fixed an issue where XHTML string parsing failed to recognize a link to a content image when TinyMCE sent it as an absolute URL with the CMS hostname.
February 24
Enforce consistent properties across content types
Contracts now let you define shared interfaces that enforce common properties across multiple content types, keeping your editing experience and metadata consistent at scale. Contracts also integrate directly with Optimizely Graph, automatically generating GraphQL schemas so developers can query all implementing content types through a single unified query. This reduces complexity, improves code reusability, and decouples frontend development from specific content type implementations.
February 13
Build content experiences with the JavaScript SDK
The JavaScript SDK is now generally available, giving developers a modern, React-ready toolkit for modeling, fetching, and rendering CMS content. It reduces manual overhead and accelerates the creation and maintenance of content-driven experiences.
- Structured content modeling – Define content types, property groups, and display templates for clean, predictable content.
- Simple content fetching – Fetch, filter, and sort CMS content with built-in utilities and webhook support.
- Modern rendering – Render pages, experiences, and rich text with live preview and DAM asset support.
- Developer-friendly tooling – Take advantage of full TypeScript support with autocomplete, error handling, and detailed logs.
- Faster workflows – Use CLI tools to sync content and content types directly from the CMS.
Create dynamic forms
You can now configure rules that dynamically show, hide, enable, or disable form fields based on the values of other fields, all directly in the form builder. This lets you control which fields are visible or active depending on user input.
- Personalized form experiences – Display only relevant fields to reduce clutter and increase completion rates.
- Intuitive configuration – Set up conditions with AND/OR logic and comparison types, including equals, not equals, contains, and regular expressions.
Bind block properties in Visual Builder
You can now bind block properties in the Visual Builder, similar to content binding. This applies to first-level content such as pages or shared blocks.
Nested block properties within content areas, lists of blocks, or blocks used as sections are not supported.
Save content connections within nested block dialogs
Content connections in nested block dialogs now save together with other property changes, following the standard save-and-cancel workflow, rather than saving immediately on entry.
Bug fixes
- CMS-39991 – Fixed an issue where hyperlinks in the user interface (UI) were incorrect (like the feedback link). The affected links are now updated, improving consistency in CMS.
- CMS-43532 – Fixed an issue where the Link Validation job incorrectly displayed broken link warnings across all language versions of a page, even when the broken link only existed in a specific language version. Broken link warnings now accurately display only in the content version containing the invalid link.
- CMS-44090 – Fixed an issue where the API incorrectly returned an HTTP 500 error when you created a variation version and then tried to update its variation key. The API now correctly returns an HTTP 400 error with the message "Variation key cannot be changed once variation version has been created."
- CMS-46270 – Fixed an issue where CMS incorrectly reported "This item is not used anywhere" for media files linked within blocks, specifically when the external link included a URL with spaces. The system now accurately identifies and displays all instances where a media item is referenced, ensuring users receive correct usage information.
- CMS-46633 – Fixed an issue where the system automatically published copy-and-pasted content for editors with publish permissions, preventing necessary review and updates to fields, like Page Title and Page URL. Duplicated content now remains in draft status, allowing authors to review and edit before publication.
-
CMS-46811 – Fixed an issue where content failed validation if you removed a
DisplaySettingfrom itsDisplayTemplate. This occurred because obsolete settings were incorrectly persisted in the layout information. The system now correctly handles the removal ofDisplaySettings, preventing validation failures. -
CMS-46881 – Fixed an issue where removing a choice from a
DisplaySettingin aDisplayTemplatecaused content previously saved with that setting to block publishing with an unclear validation error. The system now provides a validation warning instead of blocking publication. - CMS-47137 – Fixed an issue where the Last changed by date in the user interface (UI) displayed an incorrect date that did not align with a user’s server time settings. The date now accurately reflects the server's time settings.
- CMS-47166 – Fixed an issue where the edit dialog box for an inline block failed to open, and an error message displayed during data binding, when the inline block was within a content area on a page that had undergone multiple publish, remove, and re-create cycles, particularly when the source and target blocks had a binding definition.
- CMS-47171 – Fixed an issue where you could not open a newly created inline block, nested within another inline block in a Content Area, immediately after its creation.
- CMS-47188 – Fixed an issue where the system lost mapping definitions for block properties when you updated composition settings, properties, child content types, or permissions in the target content type.
- CMS-47269 – Fixed an issue where Cloudflare could cache login redirects or protected media files, potentially blocking access for authenticated users or exposing restricted content. Protected files without public access now include no-cache headers.
- CMS-47320 – Fixed an issue where a missing content source in Optimizely Graph caused an error loading edit mode and the broken links gadget on the dashboard.
- CMS-47349 – Fixed an issue where the edit dialog box for an inline block did not open, resulting in a console error, when attempting to edit an inline block nested within a Content Area property of a block used on a page in edit view.
- CMS-48580 – Fixed an issue in the API where the creation of experiences with nested block structures could fail, throwing a 500 response.
February 3
Integrate external content sources with CMS
You can now connect external content sources, such as Digital Asset Management (DAM) and Product Information Management (PIM), directly to CMS (SaaS). Configure data synchronization, map external content types to CMS content types, and use synced assets within CMS without duplicating content across systems.
Filter content by source in Content Manager
Content Manager now lets you filter content by source (All, CMS, DAM, and OCP). This lets you locate and manage content from different sources without navigating away from CMS.
Customize columns in Content Manager table view
The Content Manager table view now supports dynamic column display and personalized customization. Columns default intelligently based on the content source, and you can add, remove, and reorder columns with preferences saved between sessions. Additional options include reset to default, select all columns, and a sticky first column for consistent reference while scrolling.
Bind blocks and content to data sources in Visual Builder
You can now bind blocks and content instances to data sources directly in the Visual Builder edit view.
- Visual data binding – A link badge next to the block or content title indicates when an instance is data-bound. This badge is visible on content area items and when the block is open in quick edit.
- Connection management – For unbound blocks or content, select Connect content to open a filtered Content Manager picker. For bound items, select Replace or Disconnect to manage the data source.
- Read-only mapped properties – Properties configured in the data source mapping are read-only, preserving data integrity.
- Platform support – Data-bound content loading is supported in ContentLoader and Graph indexing, with separate caching for bound and unbound models.
Automatically provision content sources and shadow content types
Content Sources and Shadow content types are now created automatically for each content type indexed in Graph. This removes the need for manual provisioning when connecting content sources.
Bug fixes
- CMS-45965 – Fixed the issue where the content selector dialog closed without adding the selected image to the content area when an image was selected from search results and the content area was limited to a single content type.
- CMS-46164 – Fixed the issue where the Save and Cancel buttons in the edit dialog for nested blocks were unreachable when the dialog exceeded screen dimensions at 1280x800 resolution.
- CMS-46387 – Fixed the {contentType} placeholder that remained in the content type deletion warning message in the Page Type Settings view. It now shows the name of the content type.
- CMS-46456 – Fixed an issue where background tasks could encounter conflicts, particularly with database contexts, due to running in shared environments with other parallel threads or tasks. This fix ensures that all background tasks now execute within an isolated context, preventing such conflicts and improving overall system stability and data integrity.
- CMS-46562 – Fixed degraded performance and increased resource usage that occurred when referenced content was repeatedly loaded and re-indexed during delta synchronization due to a missing de-duplication check.
-
CMS-46880 – Fixed the issue where validation for
DisplaySettingsfailed for checkbox settings that lacked associated choices. - CMS-46919 – Fixed the validation error The identifier for Composition nodes must be formatted as a GUID (UUID) that occurred when publishing pages with node IDs in the API format. The system now supports node IDs in both dashed and undashed UUID formats.
-
CMS-46881 – Fixed an issue where removing a choice from a
DisplaySettingin aDisplayTemplatecaused content previously saved with that setting to block publishing with an unclear validation error. The system now provides a validation warning instead of blocking publication. - CMS-47171 – Fixed an issue where a newly created inline block, nested within another inline block in a Content Area, could not be opened for editing immediately after its creation.
- CMS-47349 – Fixed an issue where the edit dialog box for an inline block did not open, resulting in a console error, when attempting to edit an inline block nested within a Content Area property of a block used on a page in Edit view.
- CMS-48710 – Fixed an issue where the edit view re-rendered and updated content value during autosave, even when the value from the backend was not different. This caused problems with focus, mouse cursor, and expand-collapse list properties. The system only re-renders when the value is different.
- CMS-48967 – Fixed an issue where the edit dialog for a newly added block in a content area did not open for new blocks that you added to a page with existing blocks in its content area. Now, you can open the edit dialog and successfully edit any block on the page.
-
CMS-49004 – Fixed an issue where the
XhtmlStringfield refreshed, and the cursor jumped to the top or disappeared when adding a table. Now, the cursor remains in the same position, and the table is created in the correct location.
January 28
Track AI traffic and optimize content with GEO Analytics
The new Generative Engine Optimization (GEO) Analytics dashboard in Optimizely Reporting gives you visibility into how AI platforms interact with your site. Use it to track AI traffic trends, identify the most active AI agents, and discover which pages are most frequently visited by AI platforms. This lets you refine your content strategy for AI optimization and improve overall engagement.
See your top AI platforms in the Crawl-to-Refer Ratio dashboard
The Crawl-to-Refer Ratio dashboard now displays the top six AI platforms by request volume, aligned with the top six entries in the AI-Agent Analysis table. This gives you a consistent view of AI platform activity across both reports.
January 27
Manage CMS content directly from Opal
Five new Opal system tools for CMS let you create, update, publish, delete, and retrieve CMS content without leaving the Opal interface. All tools support all base content types, including pages, blocks, components, and media.
-
cms_create_content_item– Create a new empty draft content instance based on an existing content type. Specify a language branch, an optional container, and an initial collection of properties. You must manually publish drafts in the CMS UI. -
cms_update_content_item– Update property values on a content item using its content key, version, and language. If the current version is published, a new draft is created automatically; if a draft already exists, it is updated. Also supports updating the outline for an Experience. This tool uses the Preview3 API. -
cms_publish_content_item– Publish a specific content instance programmatically. Specify the language branch and an optional container. -
cms_delete_content_item– Move a specific content instance to recoverable trash. Accepts the content item's ID and an optional language branch. -
cms_get_content_data– Retrieve content data for a specific content item. Include aContentVersionto retrieve a specific version, or omit it to retrieve the published version.
Please sign in to leave a comment.