---
title: Install CMS 13
slug: cms-13/docs/install-cms13
docTags: 
createdAt: 2026-07-30T20:22:01.515Z
---

This guide covers a fresh installation of Optimizely CMS 13. CMS 13 requires .NET 10 and two mandatory components for full functionality: Opti ID and Optimizely Graph. Both are included in your CMS 13 license.

If you are migrating from an earlier version, see [Upgrade to CMS 13](docId:1Y3KoWaxY0cxXGcXMbXK8) instead.

## Review mandatory components for CMS 13

Before starting, review [Overview of CMS 13](docId\:yjXw56Ns6VLi1FCjqw12V) to understand the mandatory and optional components of CMS 13. You should consider the timelines needed for each component in your go-live planning.

## Prerequisites

Verify your environment meets the [System requirements for CMS 13](docId:6mzuo0wOX9wKMx3stzq0_). Key requirements include the following:

- .NET 10 SDK or higher
- Microsoft SQL Server 2022 or Azure SQL (compatibility level 140+)
- Visual Studio 2026 (18.0+) or a compatible editor with .NET 10 support

Order a time-limited demo license from [Optimizely License Center](https://license.optimizely.com/) for evaluation. A license is not required when using IIS Express during development. A commercial license is required for testing and production environments.

## Install templates

Optimizely project templates provide the project scaffolding and NuGet configuration for CMS 13 sites.

Install the Optimizely project templates to create a CMS 13 site:

```shell
dotnet new install EPiServer.Templates
```

The templates include a `nuget.config` [file with the Optimizely NuGet feed](https://api.nuget.optimizely.com/v3/index.json) that contains Optimizely packages. This file maps available services to their endpoints and determines where to send requests for searching or publishing packages. See also [NuGet package families in CMS](docId\:PRpjE4_u4d5D6zGTpGJac).

:::hint{type="info"}
**Note**
Each template contains a README file with instructions. To report issues or contribute, visit [content-templates on GitHub](https://github.com/episerver/content-templates). For command reference, see [dotnet new](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-new).
:::

## Create a CMS site

Choose a project template based on your needs. The empty template provides a minimal starting point. The Alloy template includes sample content types and templates.

### Empty CMS site

Run the following command to create a CMS project without sample content:

```shell
dotnet new epi-cms-empty
```

### Alloy sample site

Run the following command to create a CMS project with sample content and templates:

```shell
dotnet new epi-alloy-mvc
```

To set the project name, output folder, and enable Docker support, use the following command:

```shell
dotnet new epi-alloy-mvc --name alloy-docker --output ./alloy-docker --enable-docker
```

To view all available options for the Alloy template, run the following command:

```shell
dotnet new epi-alloy-mvc --help
```

## Register CMS services

CMS 13 requires explicit service registration for each referenced NuGet package.

After creating your project, register CMS services in `Startup.cs`. The `AddCms()` method registers all core CMS services:

```csharp
services.AddCms();
```

:::hint{type="info"}
**Important**
CMS 13 uses assembly scanning to discover referenced packages at startup. Every NuGet package your project references must have its services explicitly registered, or the application fails at startup.
:::

For modular registration options and detailed initialization configuration, see [Initialize CMS 13](docId:_vdE301PuORphVgmOAzgy).

## Configure mandatory components

Opti ID and Optimizely Graph are mandatory for CMS 13. Both are included in your license and require configuration for full CMS 13 functionality.

### Configure Opti ID

[Opti ID](docId\:pbehd96P529DqHZ0HOQlm) provides single sign-on (SSO) across Optimizely products and enables DAM and Optimizely Agent Platform integrations. Follow the steps in [Configure Opti ID for CMS 13](docId\:SVeKw7e9HD27Wku6oaVpe) to configure it.

Opti ID authenticates Optimizely product users who are editors and administrators. It's enforced in protected shell modules only: the edit UI, the admin UI, and add-ons. It does not authenticate site visitors.

If ASP.NET Identity was used only to sign editors and administrators in to the CMS, remove the `EPiServer.Cms.UI.AspNetIdentity` package reference and any `services.AddCmsAspNetIdentity<TUser>()` call once Opti ID is configured.

If ASP.NET Identity also serves site visitors during registration, sign-in, password reset, or gated content on the public site, keep the package and keep the `AddCmsAspNetIdentity<TUser>()` call. `EPiServer.CMS.UI.AspNetIdentity` ships in CMS 13 and is supported alongside Opti ID. Your visitor accounts, password hashes and role assignments stay where they are; no migration is required. Register Opti ID as below without making it the default scheme:
`services.AddCmsAspNetIdentity<SiteUser>();   // site visitors — unchanged`
`services.AddOptimizelyIdentity();            // editors and administrators`

See [Use Opti ID with a separate site-visitor authentication scheme](https://docs.developers.optimizely.com/content-management-system/v13.0.0-CMS/docs/use-opti-id-with-separate-visitor-authentication).

See \[Configure Opti ID for CMS 13] ([https://docs.optimizely.com/opti-id/docs/configure-opti-id-for-cms-13](https://docs.optimizely.com/opti-id/docs/configure-opti-id-for-cms-13)) for the side-by-side pattern.

### Configure Optimizely Graph

[Optimizely Graph](docId\:aM0WpNsNXe_n26IhkX5sG) replaces the legacy content indexing, preview, and delivery pipeline. Graph powers Content Manager, Visual Builder, content binding, and Agent Platform capabilities.

Add the NuGet package and register the service in `Startup.cs` or `Program.cs`:

```shell
dotnet add package Optimizely.Graph.Cms
```

```csharp
services.AddContentGraph();
```

Before configuring Graph in your project, [enable the Graph service to sync DAM and CMS](docId\:GHPdKRxNshVI1_ghsWOXf). Then follow the steps in [Get started with Optimizely Graph for CMS 13](docId\:NdJElDTXVkJewypNvKVqZ).

### Enable Content Manager

Content Manager provides the editorial experience for locating and managing content. Opt in by registering it explicitly.

Add the NuGet package:

```shell
dotnet add package EPiServer.Cms.UI.ContentManager
```

Register the service in `Startup.cs` or `Program.cs`:

```csharp
services.AddContentManager();
```

### Combined registration example

The following example shows the minimum service registration with all mandatory components in the correct order:

```csharp
services.AddCms();
services.AddContentGraph();
services.AddContentManager();
```

## Configure the database

CMS 13 stores content, settings, and user data in a SQL database.

Configure the `EPiServerDB` connection string in `appsettings.json` to point to a SQL Server 2022 or Azure SQL database. CMS 13 requires database compatibility level 140 or higher.

For connection string configuration and schema creation options, see [Install database schema](docId\:gsUW1lphiaG7DkboCBIPk). For configuration through option classes and environment variables, see [Configure CMS 13](docId\:yAPuoFfNoI_wNmPrtNfe4).

## Configure the application model

CMS 13 replaces the sites concept with applications and supports two types: **In process** (server-rendered) and **Headless** (content delivered through Graph to a separate frontend). After first startup, verify your settings at **Settings** > **Applications** in the CMS admin interface.

:::hint{type="info"}
**Note**
The CMS admin interface is available at `/Optimizely/CMS` (not the previous `/EPiServer` path). If you configure Opti ID, the path changes to `/ui/cms`.
:::

For details on application types and configuration, see [Application framework](docId\:woUIJII7WGJFp3ZrEuS7M).

## Configure optional integrations

CMS 13 supports optional integrations for digital asset management and search.

### DAM Asset Picker integration

Before implementing the DAM Asset Picker, try Content Manager to locate and insert assets. Content Manager may meet your asset management needs without additional integration. Content Manager supports both embedded DAM assets and any externally synced content. The DAM Asset Picker provides additional asset organization features, but they may not be necessary for smaller asset libraries.

To integrate Optimizely Digital Asset Management [(DAM) Asset Picker](docId\:p1kuyRB4pGmCuu886Vb_C) with CMS 13, add the package and register the service:

```shell
dotnet add package EPiServer.Cms.DamIntegration.UI
```

```csharp
services.AddDamUI();
```

For DAM configuration details including `appsettings.json` configuration, see [Configure DAM Asset picker](docId\:TL59_p9hyGaBWt3YnCpO1).

### Search implementation

Search & Navigation is not supported in CMS 13. Implement search using one of the following options:

- **Optimizely Graph** – Build custom search using GraphQL queries. See [Get started with Optimizely Graph for CMS 13](docId\:NdJElDTXVkJewypNvKVqZ).
- **Third-party search provider** – Use a search provider of your choice with CMS 13.

## Install apps (add-ons)

For available apps and compatibility information, see [Optimizely apps and integrations](https://world.optimizely.com/resources/net/add-ons/#) and [Apps (add-ons) platform compatibility](docId\:oGp5aaps96qkEIgnCuF_p). For installation instructions, see [Install Optimizely apps](docId\:OOCr_45tX9MKylr5guNdh).

Follow this installation order based on your site type:

- If you install apps on a CMS site, do the installation in the following order:
  1. Install an empty CMS site.
  2. Install apps (Forms, A/B testing, and so on).
- If you install apps on an existing CMS site with the Alloy templates, do the installation in the following order:
  1. Install apps (Forms, A/B testing, and so on).
  2. Rebuild the project.

## Next steps

After completing the installation, continue with the following guides:

- [Configure CMS 13](docId\:yAPuoFfNoI_wNmPrtNfe4) – Configure option classes, configuration files, and environment variables.
- [Initialize CMS 13](docId:_vdE301PuORphVgmOAzgy) – Understand the initialization system and create custom modules.
- [Deploy CMS 13](docId\:JoJXAlORRMnJEm1-P8w1f) – Deploy to Azure, Windows servers, or Docker environments.
- [Breaking changes in CMS 13](docId\:byC7COq00R-mLmWVV9_eE) – Review API and behavior changes in CMS 13.
