Viet Anh Nguyen
Mar 31, 2026
visibility 929
star star star star star
(3 votes)

Upgrade Guide: Commerce 14 to Commerce 15 preview

This document provides step-by-step instructions to upgrade a Commerce site from Commerce 14/CMS 12 to Commerce 15/CMS 13 preview. 

Overview 

This upgrade includes: 

  • Commerce: 14.15.3 → 15.0.0-preview1 

  • CMS: 12.31.2 → 13.0.0-preview4 

  • .NET: 8.0 → 10.0 

Prerequisites 

  • Visual Studio 2022 with .NET 10.0 SDK 

  • SQL Server (LocalDB or full instance) 

  • Basic understanding of Optimizely Commerce and CMS 

Step 1: Create a new Commerce 14 empty site from template 

To create a baseline Commerce 14 site from template: 

  • Run the template command:  
dotnet new epi-commerce-empty --name CoCo14 --force
  • Open the project, restore packages, and build it 

Verification: Ensure the site is running without errors before proceeding. 

Step 2: Update Project Configuration 

File Modified: [CoCo14.csproj] 

Target Framework 

<TargetFramework>net10.0</TargetFramework>  <!-- was net8.0 -->

Package References 

Before (Simple metapackage approach): 

<PackageReference Include="EPiServer.CMS" Version="12.31.2" /> 
<PackageReference Include="EPiServer.Commerce" Version="14.15.3" /> 

After (Explicit package references): 

Commerce packages: 

<PackageReference Include="EPiServer.Commerce" Version="15.0.0-preview1" />

CMS packages (all version 13.0.0-preview4): 

<PackageReference Include="EPiServer.OptimizelyIdentity" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.CMS.UI.AspNetIdentity" Version="13.0.0-preview4" /> 
<PackageReference Include="Optimizely.Graph.Cms" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Cms.UI.ContentManager" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Hosting" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Cms.UI.VisitorGroups" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.CMS.Shell.UI" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.CMS.UI" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.ImageLibrary.ImageSharp" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Events.ChangeNotification" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Cms.AspNetCore.TagHelpers" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Cms.AspNetCore.HtmlHelpers" Version="13.0.0-preview4" /> 
<PackageReference Include="EPiServer.Cms.TinyMce" Version="13.0.0-preview4" />


Step 3: Update Startup Configuration 

File Modified: [Startup.cs] 

Update Service Registration 

Before (Commerce 14 - Simple metapackage registration): 

services 
    .AddCmsAspNetIdentity<ApplicationUser>() 
    .AddCommerce() 
    .AddAdminUserRegistration() 
    .AddEmbeddedLocalization<Startup>(); 

 
After (Commerce 15 - Explicit service registration): 

services 
    .AddCmsHost() 
    .AddCmsCore() 
    .AddCmsAspNetIdentity<ApplicationUser>() 
    .AddCmsHtmlHelpers() 
    .AddCmsTagHelpers() 
    .AddCmsUI() 
    .AddAdmin() 
    .AddCmsImageSharpImageLibrary() 
    .AddTinyMce() 
    .AddContentGraph() 
    .AddContentManager() 
    .AddCommerce() 
    .AddVisitorGroupsMvc() 
    .AddVisitorGroupsUI() 
    .AddAdminUserRegistration() 
    .AddEmbeddedLocalization<Startup>(); 
 
services.Configure<DataAccessOptions>(options => 
{ 
    options.UpdateDatabaseCompatibilityLevel = true; 
}); 


Step 4: Update Application Settings 

File Modified: [appsettings.json] 

Add the following Optimizely configuration section for Content Graph 

"Optimizely": { 
  "ContentGraph": { 
    "GatewayAddress": "https://cg.optimizely.com", 
    "AppKey": "<app-key>", 
    "Secret": "<secret>", 
    "SingleKey": "<single-key>", 
    "AllowSendingLog": "true" 
  } 
} 


Important
: Replace the placeholder values (<app-key><secret><single-key><instance-id>) with your actual credentials from the Optimizely portal.

Step 5: Restore, Build, and Run Migration 

After making all the changes: 

  • Restore packages: 

dotnet restore
  • Build the project: 

dotnet build
  • Run the application: 

    • Press F5 in Visual Studio, or 

    • Run dotnet run from the command line 

  • Run Commerce migration: 

    • This will update the database schema and migrate data to Commerce 15 format 


Step 6: Verify the Upgrade
 

Important Notes 

Code Compatibility 

  • Depending on your Commerce solution, you may need to update source code due to API changes in CMS 13 and Commerce 15. See the CMS 13 Pre-Release overview for details. 

  • Commerce 15-compatible versions for popular Commerce add-ons will be released later 

Preview Versions 

  • Commerce 15.0.0-preview1 and CMS 13.0.0-preview4 are pre-release versions 

  • Not recommended for production use 

  • Use for evaluation and testing purposes only 

Additional Resources 

Mar 31, 2026

Comments

jamesgarforth
jamesgarforth Apr 9, 2026 04:14 PM

Hi there,

I'm following these instructions however the dotnet restore is failing on my build, specifically due to the error

    C:\projects\commerce-15\commerce-15.csproj : error NU1102:
      Unable to find package EPiServer.Commerce.ODP with version (= 15.0.0-preview1)
        - Found 52 version(s) in optimizely [ Nearest version: 14.45.3 ]
        - Found 0 version(s) in nuget.org

It would appear no pre-release version of the Commerce.ODP package has been published and the preview version depends on this.

Am I doing something wrong?

Thanks,

James

Viet Anh Nguyen
Viet Anh Nguyen Apr 10, 2026 03:05 AM

Hi James,
EPiServer.Commerce.ODP is not included in the preview1 release, it will be added to the final version 

jamesgarforth
jamesgarforth Apr 10, 2026 09:27 AM

Thanks Viet Anh,

I have managed to get a commerce 15 site running locally now. 

If others are running into the same issue I was, my resolution was to go to the installed package for the preview version in .nuget\packages\episerver.commerce\15.0.0-preview1 and update episerver.commerce.nuspec to modify the dependency for EPiServer.Commerce.ODP to be <dependency id="EPiServer.Commerce.ODP" version="[14.0.0, 15.0.0-preview1]" />

Viet Anh Nguyen
Viet Anh Nguyen Apr 14, 2026 02:03 AM

Thanks James,

Yes, ODP and other addons (like Service API) packages will be published soon after the Commerce Core packages.

error Please login to comment.
Latest blogs
Finding Thomas Part 3 - The Moment of Recognition

Remember Thomas? In digital landscape, Thomas is the returning visitor who reads everything, opens every email, converts on nothing. In standard...

Ritu Madan | Jun 26, 2026

Add more scheduled job settings from the Optimizely CMS 12 admin UI -- with OptiScheduledJob.ExtraParameters

  Optimizely (EPiServer) CMS 12 ships a great scheduled-jobs framework, but it has one frustrating gap: a job has nowhere to store its own...

Binh Nguyen Thi | Jun 25, 2026

Automated Search & Navigation to Graph Migration with Claude Code

A Claude Code plugin that scans your S&N codebase, applies Graph SDK transformations, and validates the result. Install once, run one command. CMS ...

Connor Fortin | Jun 24, 2026

Migrating from Find to Graph: Lessons Learned from a Real CMS 13 Project

While migrating a search solution from Optimizely Search & Navigation (Find) to Optimizely Graph in CMS 13, I encountered several issues that were...

Binh Nguyen Thi | Jun 24, 2026

Optimizely: Upgrade Opti-ID and .NET 10 in CMS 12

Many Optimizely customers are planning their roadmap around a future migration to Optimizely CMS 13. As a result, upgrades such as Opti ID adoption...

Madhu | Jun 23, 2026 |

Understanding Optimizely Graph: Caching, Webhooks & Avoiding Stale Content (Optimizely SaaS CMS)

📌 Scope: This post covers Optimizely CMS (SaaS) only — using the official @optimizely/cms-sdk and @optimizely/cms-cli packages with Next.js 15. If...

Kiran Patil | Jun 23, 2026 |