---
title: "The Sitecore configuration file"
slug: "the-sitecore-configuration-file"
abstract: "Content SDK apps include a standard config file with various mandatory properties that you can modify as needed. You can also add optional properties to control aspects of your app's behaviour, including how it interacts with services and middleware."
---
# The Sitecore configuration file

Content SDK's Angular implementation includes the `sitecore.config.ts` file, which is the central configuration point for your app, found in the app's root folder.

To access any value from the configuration file, you can import it into your code as shown in the following example:

```text
import scConfig from 'sitecore.config'
```

Several of the properties described in this topic have a corresponding environment variable; where they do, that variable is listed here alongside the property's description. If a property is not given an explicit value, it will take the value from the corresponding environment variable where available. If a value is not defined in either place, the property will use a default value instead.

## Public variables

Angular browser code doesn't have access to `process.env` during client-side navigation. To make environment values available in both browser and server runtimes, the Content SDK Angular app generates an environment file based on the mode selected by the app's scripts:

| Script | Mode-specific source file | Generated file |
| --- | --- | --- |
| `npm run dev` | `.env.dev` | `src/environments/environment.dev.ts` |
| `npm run start` | `.env.prod` | `src/environments/environment.prod.ts` |

The generator also loads `.env` and `.env.local`. The `start` script runs a production build, which generates the production environment file before starting the server.

To protect secrets, the generator writes only environment variables prefixed with `CSDK_PUBLIC_` to the generated files. These values are included in the browser bundle. Variables without this prefix remain server-only.

## The base configuration

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">api</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Defines the data source for layout and content requests.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">defaultSite</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>The default Sitecore site name used for content resolution.</p></td><td class="td"><p><code class="code">CSDK_PUBLIC_SITECORE_DEFAULT_SITE</code></p></td></tr><tr><td class="td"><p><code class="code">defaultLanguage</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>The fallback language used when no locale is specified. Populated from environment if unset. Defaults to <code class="code">'en'</code> when both are absent.</p></td><td class="td"><p><code class="code">CSDK_PUBLIC_SITECORE_DEFAULT_LANGUAGE</code></p></td></tr><tr><td class="td"><p><code class="code">editingSecret</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>Editing secret required by SitecoreAI editing and preview functionality. Provide this if you want to use your local or deployed application as an editing host.</p></td><td class="td"><p><code class="code">SITECORE_EDITING_SECRET</code></p></td></tr></tbody></table>

### api properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr><tr><td class="td"><p><code class="code">edge</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Edge endpoint credentials used to connect to an instance of SitecoreAI.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></thead><tbody><tr><td class="td"><p><code class="code">local</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>API endpoint credentials used to connect to a local instance of SitecoreAI running in a Docker container.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

#### edge properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">contextId</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>The unique identifier used to connect to and retrieve data from your SitecoreAI instance.</p></td><td class="td"><p><code class="code">SITECORE_EDGE_CONTEXT_ID</code></p><p><code class="code">CSDK_PUBLIC_SITECORE_EDGE_CONTEXT_ID</code></p></td></tr><tr><td class="td"><p><code class="code">clientContextId</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>Identifier used to connect to and retrieve data from your SitecoreAI instance in client-side operations.</p></td><td class="td"><p><code class="code">SITECORE_EDGE_CLIENT_CONTEXT_ID</code></p><p><code class="code">CSDK_PUBLIC_SITECORE_EDGE_CONTEXT_ID</code></p></td></tr><tr><td class="td"><p><code class="code">edgeUrl</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>URL of the SitecoreAI endpoint that your Content SDK app will communicate with.</p><p>Default: https://edge-platform.sitecorecloud.io</p></td><td class="td"><p><code class="code">CSDK_PUBLIC_SITECORE_EDGE_HOSTNAME</code></p><p><code class="code">SITECORE_EDGE_PLATFORM_HOSTNAME</code></p></td></tr></tbody></table>

#### local properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">apiKey</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>Your Sitecore API key used to connect to the GraphQL endpoint.</p></td><td class="td"><p><code class="code">SITECORE_API_KEY</code></p><p><code class="code">CSDK_PUBLIC_SITECORE_API_KEY</code></p></td></tr><tr><td class="td"><p><code class="code">apiHost</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>Sitecore API hostname that your app will connect to and retrieve data from.</p></td><td class="td"><p><code class="code">SITECORE_API_HOST</code></p><p><code class="code">CSDK_PUBLIC_SITECORE_API_HOST</code></p></td></tr><tr><td class="td"><p><code class="code">path</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>A GraphQL endpoint path that will be appended to <code class="code">apiHost</code> to form a full endpoint URL, like <code class="code">apiHost/path</code>.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

## Services configuration

These settings provide additional configuration for various Content SDK services.

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">layout</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Extra settings for the layout service.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">dictionary</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Extra settings for the dictionary service.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">retries</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Controls GraphQL request retry behavior.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### layout properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">formatLayoutQuery</code></p></td><td class="td"><p><code class="code">function</code></p></td><td class="td"><p>Custom function to format the layout service query string.</p><p>Accepts <code class="code">siteName</code>, <code class="code">itemPath</code>, and optional <code class="code">locale</code>. Set to <code class="code">null</code> to disable.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### dictionary properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">caching</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Configuration for local memory caching of dictionary service requests.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

#### caching properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">enabled</code></p></td><td class="td"><p><code class="code">boolean</code></p></td><td class="td"><p>Whether local memory caching is used for the dictionary service.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">timeout</code></p></td><td class="td"><p><code class="code">number</code></p></td><td class="td"><p>The length of time, in seconds, to keep cached entries in local memory.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### retries properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">count</code></p></td><td class="td"><p><code class="code">number</code></p></td><td class="td"><p>The maximum number of retries attempted by the GraphQL client if the first one fails. Set this to 0 if you don't want to use retries.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">retryStrategy</code></p></td><td class="td"><p><code class="code">RetryStrategy</code></p></td><td class="td"><p>Custom retry strategy implementation for the GraphQL client.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

## Extra middleware and other configurations

These settings configure functionality that is provided by middleware.

### redirects

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">enabled</code></p></td><td class="td"><p><code class="code">boolean</code></p></td><td class="td"><p>Whether SXA redirect processing is enabled.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

> [!note]
> In Content SDK for Angular, the `locales` property is not configurable under `redirects`. Redirect locale awareness is derived automatically from `angular.locales` at resolve time.

### multisite

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">enabled</code></p></td><td class="td"><p><code class="code">boolean</code></p></td><td class="td"><p>Whether the multisite resolution is enabled.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">useCookieResolution</code></p></td><td class="td"><p><code class="code">function</code></p></td><td class="td"><p>Custom function to determine whether cookie-based site resolution should be used for a given request.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### personalize

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">enabled</code></p></td><td class="td"><p><code class="code">boolean</code></p></td><td class="td"><p>Whether the personalize feature is enabled.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">edgeTimeout</code></p></td><td class="td"><p><code class="code">number</code></p></td><td class="td"><p>The timeout duration, in seconds, for personalization requests to Experience Edge.</p></td><td class="td"><p><code class="code">PERSONALIZE_MIDDLEWARE_EDGE_TIMEOUT</code></p></td></tr><tr><td class="td"><p><code class="code">cdpTimeout</code></p></td><td class="td"><p><code class="code">number</code></p></td><td class="td"><p>The timeout duration, in seconds, for personalization requests to Sitecore CDP.</p></td><td class="td"><p><code class="code">PERSONALIZE_MIDDLEWARE_CDP_TIMEOUT</code></p></td></tr><tr><td class="td"><p><code class="code">scope</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>The Sitecore Personalize scope identifier, which allows you to isolate your personalization data between SitecoreAI environments.</p></td><td class="td"><p><code class="code">SITECORE_PERSONALIZE_SCOPE</code></p><p><code class="code">CSDK_PUBLIC_PERSONALIZE_SCOPE</code></p></td></tr><tr><td class="td"><p><code class="code">channel</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>The CDP channel to use for events.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">currency</code></p></td><td class="td"><p><code class="code">string</code></p></td><td class="td"><p>The currency type to use for CDP requests.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### other properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">rewriteMediaUrls</code></p></td><td class="td"><p><code class="code">boolean</code> or <code class="code">function</code></p></td><td class="td"><p>Whether media URLs pointing to the production Experience Edge host are rewritten.</p><p>Setting it to true rewrites media URLs using the custom host defined in <code class="code">SITECORE_EXPERIENCE_EDGE_HOSTNAME</code>.</p><p>You can also use a function in the format <code class="code">transformer(s: string) => string</code>, where <code class="code">s</code> is the image URL to be transformed and the return value is the transformed URL. See example:</p><pre class="programlisting ts" data-language="ts" id="UUID-c1aa19b5-851d-00b9-fba3-26c599261da4_programlisting-id135680540443802"><code class="language-ts" data-language="ts">function rewriteEdgeHostInString(str: string): string {
  const customEdgeUrl = 'my-custom.com';
  const EDGE_HOST_PATTERN = new RegExp(
    `custom-matcher-here`,
    'gi'
  );
  return str.replace(EDGE_HOST_PATTERN, customEdgeUrl);
}</code></pre></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

## Angular properties

These are Angular-specific configuration options.

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">locales</code></p></td><td class="td"><p><code class="code">string[]</code></p></td><td class="td"><p>List of URL segment locales supported by your application. Used for locale-aware routing and dictionary loading. The <code class="code">defaultLanguage</code> value is prepended if not already included. See <a class="link linktype-component" href="https://doc.sitecore.com/sai/en/developers/content-sdk/angular/1x/internationalization-using-ngx-translate.html" title="Internationalization using ngx-translate">Internationalization using ngx-translate</a> for more information.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">loadersCache</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Configuration options for loaders cache.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">linkPrefetch</code></p></td><td class="td"><p><code class="code">object</code></p></td><td class="td"><p>Configuration options for link prefetch on <code class="code">scRouterLink</code> and <code class="code">scRichText</code> links. See <a class="link linktype-component" href="https://doc.sitecore.com/sai/en/developers/content-sdk/angular/1x/link-prefetching.html" title="Link prefetching">Link prefetching</a> for more information.</p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### loaderCache properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">enabled</code></p></td><td class="td"><p><code class="code">boolean</code></p></td><td class="td"><p>Whether the loaders cache layer is enabled or not.</p><p>Default: <span class="emphasis"><em>true</em></span></p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">revalidate</code></p></td><td class="td"><p><code class="code">number</code></p></td><td class="td"><p>Time-to-live (TTL) in seconds for cache entries before they become stale.</p><p>Default: <span class="emphasis"><em>300</em></span></p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>

### linkPrefetch properties

<table style="width:100%;" class="informaltable frame-void rules-rows"><thead><tr><th class="th"><p>Property</p></th><th class="th"><p>Type</p></th><th class="th"><p>Description</p></th><th class="th"><p>Corresponding environment variable</p></th></tr></thead><tbody><tr><td class="td"><p><code class="code">mode</code></p></td><td class="td"><p><code class="code">'eager' | 'hover' | 'off'</code></p></td><td class="td"><p>The prefetch strategy applied to <code class="code">scRouterLink</code> and <code class="code">scRichText</code> links.</p><p>Default: <span class="emphasis"><em>'eager'</em></span></p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr><tr><td class="td"><p><code class="code">delayMs</code></p></td><td class="td"><p><code class="code">number</code></p></td><td class="td"><p>Hover dwell time, in milliseconds, before prefetch fires. Only used when <code class="code">mode</code> is <code class="code">'hover'</code>.</p><p>Default: <span class="emphasis"><em>100</em></span></p></td><td class="td"><p><span class="emphasis"><em>N/A</em></span></p></td></tr></tbody></table>