2025 Optimizely Graph release notes

  • Updated

Follow this article to receive email notifications when new packages are available for Optimizely Graph. Product packages are found on the Optimizely NuGet server and and include updates to the following components:

Are you looking for release notes before January 2024? See the Optimizely Release Notes on the Optimizely World site.

Are you looking for Graph Documentation? See the Optimizely Graph Documentation.

You can find prior versions of user guides and when functionality was released or deprecated at the following locations:

CMS to Graph Integration

November 21

Optimizely.ContentGraph.Cms 4.2.0

Enhancement

  • Improved content language branch creation. This enhancement sends only enabled language information to Optimizely Graph, reducing the overhead of content type synchronization and improving performance. Optimizely Graph now creates a language index when a language is enabled in CMS settings.

Bug fixes

  • CMS-46587 – Fixed the issue where the Delta Indexing job finished with the message "nothing to synchronize" when it should have synchronized new pages after disabling event indexing, creating and publishing a page, and then starting and canceling a Full indexing job.

November 4

Optimizely.ContentGraph.Cms 4.1.1

Bug fixes

  • CMS-46036 – Fixed an issue where creating multiple content types with the same name in different namespaces could lead to content type synchronization failures during full graph indexing. This fix ensures that the graph indexing job correctly identifies and omits duplicated content types and their associated property blocks, allowing content type synchronization to complete successfully.
  • CMS-46185 – Fixed circular reference detection in ContentApiModelTransformer to prevent infinite recursion and memory issues.
  • CMS-46308 – Fixed an issue where content types containing IList<T> properties or indexers caused PropertySettingFailureException messages to appear in logs during full synchronization.
  • CMS-46384 – Fixed a potential issue where Optimizely Graph delta synchronization job could fail with a System.InvalidOperationException stating that a command could not be created without an existing connection.
  • CMS-46561 – Fixed an issue where the delta synchronization process in CMS 12 repeatedly loaded referenced content within different batches, causing redundant re-indexing and reduced performance. Each referenced item is now indexed only during each synchronization cycle.

October 27

Optimizely.ContentGraph.Cms 4.1.0

Enhancements

  • Improved the CMS 12 indexing job output for administrators to get clearer visibility into indexing progress, errors, and job summaries for both full and delta syncs.
  • Enhanced the Optimizely Graph Search functionality by resolving shared internal identifiers and ensuring that the CMS search provider acts as a fallback, which allows content that was excluded from Graph synchronization to remain discoverable within the CMS UI. See How to add search providers in Optimizely CMS 12.

Bug fix

  • CMS-45494 – Fixed an issue where blocks created directly from a ContentArea were being synced through _stream instead of _doc. Previously, when UIOptions.InlineBlocksInContentAreaEnabled was set to false, creating and publishing a new block from the ContentArea dropdown resulted in the block syncing incorrectly. This fix ensures that newly created blocks are now properly synced through _doc, aligning with expected behavior.

September 18

Optimizely.ContentGraph.Cms 4.0.1

Bug fix

  • CMS-45133 – Fixed an issue where the Graph indexing job unexpectedly stopped and incorrectly reported “Stop of job was called” when the job had not been stopped.

August 25

Optimizely.ContentGraph.Cms 4.0.0

Enhancements

  • Updated Synchronize with Optimizely Graph to sync directly, bypassing the queue and skipping hash validation, allowing immediate content updates. Previously, it used the _stream endpoint, causing delays if the queue was long.
  • Added the GraphQL Boolean type in  Optimizely Graph indexing to ensure correct type mapping and improve interoperability. Previously, bool properties in C# were converted to the custom Bool type, which limited compatibility with the default GraphQL Boolean type. You can now query bool properties using the standard Boolean type without extra configuration. 
  • Added the ability to enable hash calculation and validation before sending documents to the Optimizely Graph synchronization, which prevents redundant updates and improves data consistency. Use SendDocAsync overload with SendDocOptions to include a hash, and by calling GetHashByDocumentIdAsync to retrieve stored hashes. 

Bug fixes

  • CMS-44070 – Fixed the error that occurred during content synchronization when a block property was defined in a top-level abstract base class and was inherited by a concrete PageData type.
  • CMS-43039 – Fixed the Graph integration issue where the SimpleAddress property is not synchronized with the graph on publish.
  • CMS-40715 – Fixed the error that occurred during content synchronization when a block property was defined in a top-level abstract base class and was inherited by a concrete PageData type.

Breaking changes in the C# API

Improved the API design by refining the required constructor parameters, resulting in a cleaner and more efficient setup. See Breaking changes below:

  • Optimizely.ContentGraph.Core.Connection
    CustomDelegatingHandler – Removed the constructor that accepted an HttpMessageHandler parameter.

  • EPiServer.DependencyInjection.ServiceCollectionExtensions
    Removed obsolete overloads of the AddContentGraph method.
    Removed obsolete method UseUnsupportedTypes.

  • Optimizely.ContentGraph.Core.Configuration.QueryOptions
    Removed obsolete member EnablePreviewTokens; use EPiServer.Web.UIOptions.UsePreviewTokens instead.
    Removed obsolete member IncludeLanguagesWithNoContent.

  • Optimizely.ContentGraph.Core.Client
    Obsolete class removed.

  • Optimizely.ContentGraph.Core.IGraphQLClientFactory
    Interface removed; use IClient instead.

  • Optimizely.ContentGraph.Core.GraphQLClientFactory
    Class removed; use IClient instead.

  • Optimizely.ContentGraph.Core.IGraphQLClient
    Interface removed; use IClient instead.

  • Optimizely.ContentGraph.Core.GraphQLClient
    Class removed; use IClient instead.

  • Optimizely.ContentGraph.Core.IClient
    SendDocAsync method removed in favor of a new overload.
    Query and QueryAsync includes an optional parameter Dictionary<string, string>? queryStringParams.
    Added new method SendJournalStreamAsync.

  • Optimizely.ContentGraph.Core.Serializer.ISerializer
    Removed Task<string> SerializeAsync<T>(T data, CancellationToken cancellationToken).
    Added synchronous overloads for Serialize and Deserialize.

  • Optimizely.ContentGraph.Core.Serializer.CustomSerializer
    Class is now internal.

  • Optimizely.ContentGraph.Cms.NetCore.Controllers
    ContentIndexingStore – Class is now internal.
    GraphQLAdminController– Class is now internal.
    JournalController – Class is now internal.

  • Optimizely.ContentGraph.Cms.NetCore.Models.ContentTypeDeserializerResult
    Class was removed.

July 20

Optimizely.ContentGraph.Cms 3.19.2

Bug fixes

  • CMS-43570 – Fixed an issue where Content type indexing sometimes returned incorrect property types.
  • CMS-43405 – Fixed an issue where the contentRepository.Move method threw an exception when moving content multiple times.
  • CMS-43579 – Fixed an issue where, when graph integration is installed, IContentRepository.Move initializes a new HttpContext if it is null. 

July 8

Optimizely.ContentGraph.Cms 3.19.1

Bug fixes

  • CMS-43039 – Fixed the Graph integration issue where the SimpleAddress property is not synchronized with the graph on publish.
  • CMS-41855 – Fixed an issue where expiring content 'now' with the ContentVersionSynchronizationMode set to ContentVersionSyncMode.PublishedOnly doesn't work in Graph. 
  • CMS-42373Fixed the issue where language-specific links weren't being generated in a multilingual CMS setup for LinkItem set to "Automatic" in the property block.
  • CMS-42421 – Fixed the issue where LinkItem expansion in Optimizely Graph returns the parent block's language version, not the referenced content's selected language

June 9

Optimizely.ContentGraph.Cms 3.19.0

Enhancements

  • Enhancements were made to extract media content (searchable text) during file upload rather than during indexing.

Bug fixes

  • CMS-42243 – Fixed the issue where the RESET for the Graph, which exists in CMS UI, should only be accessible to users who is administrators.
  • CMS-42535 – Fixed an issue where the link in XhtmlString did not reflect the current language.

May 20

Optimizely.ContentGraph.Cms 3.18.0

Enhancements

  • Enhancements were made to disable the expansion of page content areas within other content areas. This is controlled with the option QueryOptions.ExpandLevel.ExpandPageContentAreasInContentAreas.

Bug fixes

  • CMS-41690 – Fixed the custom properties issue, which is exposed through the Conventions API that loads in the master language within the content area.
  • CMS-41330 – Fixed the issue where the PublicUrlResolver resolves the incorrect URL when a content reference points to a CMP DAM asset.

April 4

Optimizely.ContentGraph.Cms 3.16.6

Bug fixes

  • CG-12230 – Fixed the issue that if content is updated multiple times, it should only be indexed once.

March 26

Optimizely.ContentGraph.Cms 3.16.5

Bug fixes

  • CG-10894 – Fixed an issue where executing a query on the GraphiQL portal caused issues after using the PUT /api/content/v3/types endpoint.
  • CG-11122 – Fixed a bug where an error occurred when processing sequential documents with no searchable fields, resulting in a map type field [_fulltext_source] having an empty string value.

February 27

Optimizely.ContentGraph.Cms 3.16.0

Enhancements

Bug fixes

  • CG-7448 – Fixed an issue to ensure that empty languages are not included in the language field.
  • CG-9602 – Fixed an issue with custom implementations of IContentTypeSerializer following the upgrade to version 3.13.
  • CG-9661 – Fixed an issue where the value of _p_EditorialBlock.MainBody_ was null when the PropertyIndexingMode attribute was set to 'Default'.
  • CG-10009 – Fixed an issue related to the inability to expand on the IList<LinkItem> property type.
  • CG-10011 – Fixed an issue that allowed users to add values that were out of range.
  • CG-10045 – Fixed an issue where content type synchronization failed with an INVALID_CONTENT_TYPE_ERROR when indexing block properties declared in an abstract class.
  • CG-10086 – Fixed an issue where extension methods were not available for abstract types.
  • CG-10100 – Fixed an issue where values were null under the Expanded section of the ContentArea within the block properties.
  • CG-10410 – Fixed an issue where searchable fields in block properties with OutputOnly indexing mode returned null values.
  • CG-10471 – Fixed an issue that caused the system to throw an exception error when PropertySettingFailureException is triggered in DummyContentBuilder.
  • CG-10566 – Fixed an issue that caused a NullReferenceException when invoking the OnConventionsChange event handler if conventions were configured in the initialization module.
  • CG-10667 – Fixed an issue where the RequestVerificationToken header was missing in Notification API calls when using GraphiQL.
  • CG-10749 – Enhanced the performance of content translation.

Gateway

December 9

Optimizely Graph provides an optional early access channel for customers who want to test upcoming Gateway features before the general (service deployment) release. Learn more about Optimizely Graph releases and channels.

Gateway 3.23.0

Enhancements

  • Added new click-through tracking endpoint for search, including Datadog integration and tenant-level metrics.

  • Added a GET endpoint to retrieve all synonyms for a slot, now included in Swagger. Learn more about Synonyms

  • Added support for returning full content items and ContentArea values as a single _json payload in GraphQL queries. This eliminates the need to create large fragment-heavy queries for complex content models and improves performance by reducing query size and server load. Learn more about _json field

Bug fixes

  • CG-8230 – Fixed incorrect secondary sorting when IntegerList values matched; VersionStatus is now used before Name.
  • CG-13216 – Removed blank and whitespace-only values from _fulltext to improve search result quality.
  • CG-13399 – Fixed fuzzy full-text query expansion errors that caused 500 responses when terms exceeded the 128-term limit.
  • CG-14165 – Fixed incorrect sorting of pinned items; results are now ordered by defined priority values.
  • CG-14704 – Fixed cursor expiration issue where cursor lifetime dropped to 1–2 minutes instead of the expected duration.
  • CG-15045 – Fixed a bug where child items in Optimizely Graph returned stale PublishDate when queried via a parent item. No resolution or recovery steps are required.

Service Deployment

May 8

Service deployment 3.18.0

Enhancements

  • Improvements were made so that the cache TTL considers StopPublish values when setting the TTL for cache responses to ensure that the cached result is purged when a content item has its stop publish date and time.

Bug fixes

  • CG-12308 – Fixed the issue where the reference type does not work in Visual Builder.
  • CG-12717 – Fixed the issue where the "preview mode" in CMS sometimes does not get the updated values from Graph after a content item was updated using the _doc endpoint.

April 4

Service deployment 3.17.0

Enhancements

  • Improvements were made to let you hover over a reference field to get information on the GraphiQL page.
  • Improvements were made to let you define a reference property type that fetches referenced content based on certain instructions. 

Bug fixes

  • CG-9673 – Fixed sorting between properties and either boolean or BooleanList.
  • CG-9674 – Fixed the issue where the _link function returned identical values for different link types in a query
  • CG-11045 – Fixed the issue where the query for HTML tags is not working correctly with the match operator.
  • CG-11074 – Fixed the issue where Highlight is not working correctly with the contains operator.
  • CG-11115 – Fixed contract issues for SaaS CMS.

February 27

Service deployment 3.16.0 

Enhancements

  • Introduced Cached Templates, which can be used to speed up Optimizely Graph queries by reusing stored query structures through the stored=true query string and cg-stored-query: template header. See Cached Templates.
  • Added the ability to enhance cache hit ratios by using item queries instead of items in GraphQL for single entities, permitting precise caching and faster response times using unique identifiers like IDs or URLs. See item queries.

Bug fixes

  • CG-7042 – Fixed an issue where certain HTML tags could not be removed using the match operator. 
  • CG-8874 – Fixed an issue where no value was provided for the terms query.
  • CG-9559 – Fixed the issue where media files, other than images, were not being extracted.
  • CG-10040 – Updated the match operator to be case-insensitive.
  • CG-10486 – Added support for decimal seconds in the Date type for GraphQL.
  • CG-10495 – Fixed an issue where an exception occurred when retrying failed requests.
  • CG-10520 – Fixed an issue where the highlight feature was not functioning correctly with list objects.

January 7

Service deployment 3.15.0

  • Added support for geographical queries with Geopoint types in the GraphQL API. See Geo search.
  • Improved query performance by creating a faster "warm-up" process by enabling a single query execution to efficiently warm up pages associated with that query, even with different variables. See Optimizely Graph schema.

Bug fixes

  • CG-5968 – Fixed a bug where you could not filter by a null or blank value.
  • CG-8857 – Fixed a bug where the highest-ranked item when using the _fulltext field and the contains operator was miscalculated. 
  • CG-9274 – Fixed a bug where autocomplete with p_EditorialBlock and p_EditBlockList was not returning normally.
  • CG-9362 – Fixed a bug where an error would occur when the _semanticWeight was set to null. 
  • CG-9592 – Fixed a bug where you could not add a _ranking option to query variables using the orderBy parameter.
  • CG-9599 – Fixed a bug where a "Too many aliases in the query" error would occur.