---
title: 2025 Optimizely Graph release notes
slug: graph/release-notes/2025-optimizely-graph-release-notes
docTags: 
createdAt: 2026-07-20T15:45:42.541Z
---

Subscribe to updates on this page using the notification and RSS feed options. Product packages are found on the [Optimizely NuGet server](https://nuget.optimizely.com/) and and include updates to the following components:

- [Optimizely.ContentGraph](docId:9uZey_CDJdCgB8ATht0vU)
- [Gateway  ](docId:9uZey_CDJdCgB8ATht0vU)
- [Service Deployments](docId:9uZey_CDJdCgB8ATht0vU)

:::hint{type="info"}
**Note**

Are you looking for release notes before January 2024? See the [Optimizely Release Notes](https://world.optimizely.com/documentation/Release-Notes/) on the Optimizely World site.

Are you looking for Graph Documentation? See the [Optimizely Graph Documentation.](https://docs.developers.optimizely.com/platform-optimizely/docs/introduction-optimizely-graph)
:::

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

- [Versioned user guides and release notes](../../suite-wide-information/archived-optimizely-documentation/versioned-user-guides-and-release-notes-2021-and-older.mdx).
- [Released functionality](../../suite-wide-information/archived-optimizely-documentation/released-functionality.mdx).
- [Obsolete functionality](../../suite-wide-information/archived-optimizely-documentation/obsolete-functionality.mdx).

## 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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/CMS-46185) – Fixed circular reference detection in `ContentApiModelTransformer` to prevent infinite recursion and memory issues.
- [CMS-46308](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://docs.developers.optimizely.com/content-management-system/docs/adding-search-providers#/).

**Bug fix**

- [CMS-45494](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/CMS-43039) – Fixed the Graph integration issue where the `SimpleAddress` property is not synchronized with the graph on publish.
- [CMS-40715](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/CMS-43570) – Fixed an issue where Content type indexing sometimes returned incorrect property types.
- [CMS-43405](https://world.optimizely.com/support/Bug-list/bug/CMS-43405) – Fixed an issue where the `contentRepository.Move` method threw an exception when moving content multiple times.
- [CMS-43579](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/CMS-43039) – Fixed the Graph integration issue where the `SimpleAddress` property is not synchronized with the graph on publish.
- [CMS-41855](https://world.optimizely.com/support/Bug-list/bug/CMS-41855) – Fixed an issue where expiring content 'now' with the `ContentVersionSynchronizationMode `set to `ContentVersionSyncMode.PublishedOnly` doesn't work in Graph.
- [CMS-42373](https://world.optimizely.com/support/Bug-list/bug/CMS-42373) – Fixed 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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/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**

- Improvements were made to Optimizely Graph management by introducing [a new smooth rebuild cleanup job that allows for zero-downtime upgrades](https://docs.developers.optimizely.com/content-management-system/docs/reset-account-functionality#smooth-rebuild-optimizely-graph). This enhancement improves control, performance, stability, and throughput during content ingestion, making the process three times faster.

**Bug fixes**

- [CG-7448](https://world.optimizely.com/support/bug-list/bug/CG-7448) – Fixed an issue to ensure that empty languages are not included in the language field.
- [CG-9602](https://world.optimizely.com/support/bug-list/bug/CG-9602) – Fixed an issue with custom implementations of `IContentTypeSerializer` following the upgrade to version 3.13.
- [CG-9661](https://world.optimizely.com/support/bug-list/bug/CG-9661) – Fixed an issue where the value of `_p_EditorialBlock.MainBody_` was null when the `PropertyIndexingMode` attribute was set to 'Default'.
- [CG-10009](https://world.optimizely.com/support/bug-list/bug/CG-10009) – Fixed an issue related to the inability to expand on the `IList<LinkItem>` property type.
- [CG-10011](https://world.optimizely.com/support/bug-list/bug/CG-10011) – Fixed an issue that allowed users to add values that were out of range.
- [CG-10045](https://world.optimizely.com/support/bug-list/bug/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](https://world.optimizely.com/support/bug-list/bug/CG-10086) – Fixed an issue where extension methods were not available for abstract types.
- [CG-10100](https://world.optimizely.com/support/bug-list/bug/CG-10100) – Fixed an issue where values were null under the Expanded section of the ContentArea within the block properties.
- [CG-10410](https://world.optimizely.com/support/bug-list/bug/CG-10410) – Fixed an issue where searchable fields in block properties with OutputOnly indexing mode returned null values.
- [CG-10471](https://world.optimizely.com/support/bug-list/bug/CG-10471) – Fixed an issue that caused the system to throw an exception error when PropertySettingFailureException is triggered in DummyContentBuilder.

:::Paragraph{indent="1"}
[CG-10566](https://world.optimizely.com/support/bug-list/bug/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](https://world.optimizely.com/support/bug-list/bug/CG-10667) – Fixed an issue where the `RequestVerificationToken` header was missing in Notification API calls when using GraphiQL.
- [CG-10749](https://world.optimizely.com/support/bug-list/bug/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](https://docs.developers.optimizely.com/platform-optimizely/docs/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](https://docs.developers.optimizely.com/platform-optimizely/docs/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](https://docs.developers.optimizely.com/platform-optimizely/docs/json-field#/)

**Bug fixes**

- [CG-8230](https://world.optimizely.com/support/Bug-list/bug/CG-8230) – Fixed incorrect secondary sorting when `IntegerList` values matched; `VersionStatus` is now used before Name.
- [CG-13216](https://world.optimizely.com/support/Bug-list/bug/CG-13216) – Removed blank and whitespace-only values from `_fulltext` to improve search result quality.
- [CG-13399](https://world.optimizely.com/support/Bug-list/bug/CG-13399) – Fixed fuzzy full-text query expansion errors that caused 500 responses when terms exceeded the 128-term limit.
- [CG-14165](https://world.optimizely.com/support/Bug-list/bug/CG-14165) – Fixed incorrect sorting of pinned items; results are now ordered by defined priority values.
- [CG-14704](https://world.optimizely.com/support/Bug-list/bug/CG-14704) – Fixed cursor expiration issue where cursor lifetime dropped to 1–2 minutes instead of the expected duration.
- [CG-15045](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/CG-12308) – Fixed the issue where the reference type does not work in Visual Builder.
- [CG-12717](https://world.optimizely.com/support/Bug-list/bug/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](https://world.optimizely.com/support/Bug-list/bug/CG-9673) – Fixed sorting between properties and either `boolean` or `BooleanList`.
- [CG-9674](https://world.optimizely.com/support/Bug-list/bug/CG-9674) – Fixed the issue where the `_link` function returned identical values for different link types in a query
- [CG-11045](https://world.optimizely.com/support/Bug-list/bug/CG-11045) – Fixed the issue where the query for HTML tags is not working correctly with the match operator.
- [CG-11074](https://world.optimizely.com/support/Bug-list/bug/CG-11074) – Fixed the issue where Highlight is not working correctly with the contains operator.
- [CG-11115](https://world.optimizely.com/support/Bug-list/bug/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](https://docs.developers.optimizely.com/platform-optimizely/v1.4.0-optimizely-graph/docs/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](https://docs.developers.optimizely.com/platform-optimizely/v1.4.0-optimizely-graph/docs/item-queries).

**Bug fixes**

- [CG-7042](https://world.optimizely.com/support/bug-list/bug/CG-7042) – Fixed an issue where certain HTML tags could not be removed using the match operator.
- [CG-8874](https://world.optimizely.com/support/bug-list/bug/CG-8874) – Fixed an issue where no value was provided for the terms query.
- [CG-9559](https://world.optimizely.com/support/bug-list/bug/CG-9559) – Fixed the issue where media files, other than images, were not being extracted.
- [CG-10040](https://world.optimizely.com/support/bug-list/bug/CG-10040) – Updated the match operator to be case-insensitive.
- [CG-10486](https://world.optimizely.com/support/bug-list/bug/CG-10486) – Added support for decimal seconds in the Date type for GraphQL.
- [CG-10495](https://world.optimizely.com/support/bug-list/bug/CG-10495) – Fixed an issue where an exception occurred when retrying failed requests.
- [CG-10520](https://world.optimizely.com/support/bug-list/bug/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](https://docs.developers.optimizely.com/platform-optimizely/v1.4.0-optimizely-graph/docs/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](https://docs.developers.optimizely.com/platform-optimizely/v1.4.0-optimizely-graph/docs/graphql-schema).

**Bug fixes**

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