<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Spryker Documentation</title>
        <description>Spryker documentation center.</description>
        <link>https://docs.spryker.com/</link>
        <atom:link href="https://docs.spryker.com/feed.xml" rel="self" type="application/rss+xml"/>
        <lastBuildDate>Tue, 04 Aug 2026 12:28:10 +0000</lastBuildDate>
        <generator>Jekyll v4.2.2</generator>
        
        
        <item>
            <title>Create discounts based on shipment</title>
            <description>&lt;p&gt;This How To guide shows how to do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Activate a discount rule based on a shipment carrier, a shipment method, or a shipment price.&lt;/li&gt;
&lt;li&gt;Add a shipment pre-check plugin to checkout.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;activate-a-discount-rule-based-on-a-shipment-carrier&quot;&gt;Activate a discount rule based on a shipment carrier&lt;/h2&gt;
&lt;p&gt;You can create a discount rule based on a shipment carrier, a shipment method, or a shipment price.&lt;/p&gt;
&lt;p&gt;To have a discount calculated based on a shipment method, select the &lt;code&gt;shipment-method&lt;/code&gt; rule in the discount UI, &lt;strong&gt;Discount calculation&lt;/strong&gt;. The discount then applies only to the shipment expense with the chosen method. To define that your discount is applied only when the order is delivered by the chosen method, you can select a shipment method rule for &lt;strong&gt;Conditions&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The same approach works for a carrier (&lt;code&gt;shipment-carrier&lt;/code&gt;) and price (&lt;code&gt;shipment.price&lt;/code&gt;). You can combine these rules together based on your requirements.&lt;/p&gt;
&lt;p&gt;To activate this feature, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In your project, install the &lt;code&gt;ShipmentDiscountConnector&lt;/code&gt; module.&lt;/li&gt;
&lt;li&gt;Activate the decision rule and the collector plugins in &lt;code&gt;\Pyz\Zed\Discount\DiscountDependencyProvider&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Zed\Discount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentDiscountConnector\Communication\Plugin\DecisionRule\ShipmentCarrierDecisionRulePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentDiscountConnector\Communication\Plugin\DecisionRule\ShipmentMethodDecisionRulePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentDiscountConnector\Communication\Plugin\DecisionRule\ShipmentPriceDecisionRulePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentDiscountConnector\Communication\Plugin\DiscountCollector\ItemByShipmentCarrierPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentDiscountConnector\Communication\Plugin\DiscountCollector\ItemByShipmentMethodPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentDiscountConnector\Communication\Plugin\DiscountCollector\ItemByShipmentPricePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DiscountDependencyProvider&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerDiscountDependencyProvider&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;cd&quot;&gt;/**
     * @return \Spryker\Zed\Discount\Dependency\Plugin\DecisionRulePluginInterface[]
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getDecisionRulePlugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;array_merge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getDecisionRulePlugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ShipmentCarrierDecisionRulePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ShipmentMethodDecisionRulePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ShipmentPriceDecisionRulePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;cd&quot;&gt;/**
     * @return \Spryker\Zed\Discount\Dependency\Plugin\CollectorPluginInterface[]
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getCollectorPlugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;array_merge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getCollectorPlugins&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ItemByShipmentCarrierPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ItemByShipmentMethodPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ItemByShipmentPricePlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You are now ready to use the shipment discounts.&lt;/p&gt;
&lt;h2 id=&quot;add-the-checkout-shipment-precheck-plugin-to-checkout&quot;&gt;Add the checkout shipment precheck plugin to checkout&lt;/h2&gt;
&lt;p&gt;You can add the shipment precheck plugin to the checkout workflow, which checks if the shipment is active in the order placing. If it’s not, then an error message is displayed, and a customer gets redirected to the shipment step to select another shipment method.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;To install a new module, Composer requires &lt;code&gt;spryker/shipment-checkout-connector&lt;/code&gt;. This module provides the plugin itself.&lt;/li&gt;
&lt;li&gt;Add the &lt;code&gt;\Spryker\Zed\ShipmentCheckoutConnector\Communication\Plugin\Checkout\ShipmentCheckoutPreCheckPlugin&lt;/code&gt; plugin to the checkout dependency provider precheck plugin stack:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Zed\Checkout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Zed\ShipmentCheckoutConnector\Communication\Plugin\Checkout\ShipmentCheckoutPreCheckPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CheckoutDependencyProvider&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerCheckoutDependencyProvider&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	    &lt;span class=&quot;cd&quot;&gt;/**
	       * @param \Spryker\Zed\Kernel\Container $container ’
	       *
	       * @return \Spryker\Zed\Checkout\Dependency\Plugin\CheckoutPreConditionInterface[]
	       */&lt;/span&gt;
	      &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getCheckoutPreConditions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Container&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	      &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	          &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	              &lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//other plugins&lt;/span&gt;
	              &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ShipmentCheckoutPreCheckPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
	          &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
            <pubDate>Tue, 04 Aug 2026 12:24:33 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/discount-management/latest/base-shop/create-discounts-based-on-shipment.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/discount-management/latest/base-shop/create-discounts-based-on-shipment.html</guid>
            
            
        </item>
        
        <item>
            <title>Install the Configuration Management feature</title>
            <description>This document describes how to install the Configuration Management feature.

## Prerequisites

Update the required modules:

| NAME | VERSION |
|----|---------|
| Kernel | ^3.82   |
| Store | ^1.36   |
| Translator   | ^1.15   |

## Install feature core

### 1) Install the required modules

Install the required modules using Composer:

```bash
composer require spryker/configuration:&quot;^1.0.0&quot; --update-with-dependencies
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure the following modules have been installed:

| MODULE | EXPECTED DIRECTORY |
| --- | --- |
| Configuration | vendor/spryker/configuration |

{% endinfo_block %}

### 2) Set up configuration

Add the following configuration to extend scope support with store-level configuration:

| CONFIGURATION | SPECIFICATION | NAMESPACE |
| --- | --- | --- |
| ConfigurationConfig | Adds `store` scope to available scopes and defines scope hierarchy (store inherits from global). | Pyz\Shared\Configuration |

**src/Pyz/Shared/Configuration/ConfigurationConfig.php**

```php
&lt;?php

/**
 * This file is part of the Spryker Suite.
 * For full license information, please view the LICENSE file that was distributed with this source code.
 */

declare(strict_types = 1);

namespace Pyz\Shared\Configuration;

use Spryker\Shared\Configuration\ConfigurationConfig as SprykerConfigurationConfig;
use Spryker\Shared\Configuration\ConfigurationConstants;

class ConfigurationConfig extends SprykerConfigurationConfig
{
    /**
     * @uses \Spryker\Shared\Store\StoreConstants::SCOPE_STORE
     */
    public const string SCOPE_STORE = &apos;store&apos;;

    public function getAvailableScopes(): array
    {
        $availableScopes = parent::getAvailableScopes();
        $availableScopes[] = static::SCOPE_STORE;

        return $availableScopes;
    }

    public function getScopeHierarchy(): array
    {
        $scopeHierarchy = parent::getScopeHierarchy();
        $scopeHierarchy[static::SCOPE_STORE] = ConfigurationConstants::SCOPE_GLOBAL;

        return $scopeHierarchy;
    }
}
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that after reading a configuration value with `store` scope, the system falls back to the `global` scope value if no store-specific value is set.

{% endinfo_block %}

#### 2.1) Set up encryption for secret settings

Add encryption key configuration for encrypting and decrypting secret configuration values:

**config/Shared/config_default.php**

Add the import statement:

```php
use Spryker\Shared\Configuration\ConfigurationConstants;
```

Add the encryption configuration:

```php
// Configuration system
$config[ConfigurationConstants::ENCRYPTION_KEY] = hex2bin(getenv(&apos;SPRYKER_CONFIGURATION_ENCRYPTION_KEY&apos;) ?: &apos;&apos;) ?: null;
$config[ConfigurationConstants::ENCRYPTION_INIT_VECTOR] = hex2bin(getenv(&apos;SPRYKER_CONFIGURATION_ENCRYPTION_INIT_VECTOR&apos;) ?: &apos;&apos;) ?: null;
```

#### 2.2) Provide environment variables


For local development, add the following environment variables to your deploy file (`deploy.dev.yml` or equivalent):

```yaml
image:
    environment:
        SPRYKER_CONFIGURATION_ENCRYPTION_KEY: &apos;&lt;your-64-char-hex-key&gt;&apos;
        SPRYKER_CONFIGURATION_ENCRYPTION_INIT_VECTOR: &apos;&lt;your-32-char-hex-iv&gt;&apos;
```

In Cloud, add environment variables using [Parameter Store](/docs/ca/dev/add-variables-in-the-parameter-store).

To generate new keys, run:

```bash
openssl rand -hex 32  # generates SPRYKER_CONFIGURATION_ENCRYPTION_KEY
openssl rand -hex 16  # generates SPRYKER_CONFIGURATION_ENCRYPTION_INIT_VECTOR
```

{% info_block warningBox &quot;Verification&quot; %}

1. Create a setting with `secret: true` in a YAML schema and run `configuration:sync`.
2. Set a value for the secret setting in the Back Office.
3. Check the `spy_configuration_value` table — the stored value must be encrypted (not plain text).
4. Read the value back in the Back Office — it must be decrypted and displayed correctly.

{% endinfo_block %}

### 3) Set up the database schema and transfer objects

#### 3.1) Set up database schema extension

Add event behavior to the `spy_configuration_value` table to enable Publish &amp; Synchronize:

**src/Pyz/Zed/Configuration/Persistence/Propel/Schema/spy_configuration.schema.xml**

```xml
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;database xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; name=&quot;zed&quot; xsi:noNamespaceSchemaLocation=&quot;http://static.spryker.com/schema-01.xsd&quot; namespace=&quot;Orm\Zed\Configuration\Persistence&quot; package=&quot;src.Orm.Zed.Configuration.Persistence&quot;&gt;

    &lt;table name=&quot;spy_configuration_value&quot; phpName=&quot;SpyConfigurationValue&quot;&gt;
        &lt;behavior name=&quot;event&quot;&gt;
            &lt;parameter name=&quot;spy_configuration_value_all&quot; column=&quot;*&quot; keep-additional=&quot;true&quot;/&gt;
        &lt;/behavior&gt;
    &lt;/table&gt;

&lt;/database&gt;
```

#### 3.2) Apply database changes and generate transfers

```bash
console propel:install
console transfer:generate
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that the following changes have been applied by checking your database:

| DATABASE ENTITY | TYPE | EVENT |
| --- | --- | --- |
| spy_configuration_value | table | created |
| spy_configuration_storage | table | created |

{% endinfo_block %}

{% info_block warningBox &quot;Verification&quot; %}

Make sure the following changes in transfer objects have been applied:

| TRANSFER | TYPE | EVENT | PATH |
| --- | --- | --- | --- |
| ConfigurationSetting | class | created | src/Generated/Shared/Transfer/ConfigurationSettingTransfer |
| ConfigurationValue | class | created | src/Generated/Shared/Transfer/ConfigurationValueTransfer |
| ConfigurationScope | class | created | src/Generated/Shared/Transfer/ConfigurationScopeTransfer |
| ConfigurationFeature | class | created | src/Generated/Shared/Transfer/ConfigurationFeatureTransfer |
| ConfigurationTab | class | created | src/Generated/Shared/Transfer/ConfigurationTabTransfer |
| ConfigurationGroup | class | created | src/Generated/Shared/Transfer/ConfigurationGroupTransfer |
| ConfigurationConstraint | class | created | src/Generated/Shared/Transfer/ConfigurationConstraintTransfer |
| ConfigurationDependency | class | created | src/Generated/Shared/Transfer/ConfigurationDependencyTransfer |
| ConfigurationSyncResponse | class | created | src/Generated/Shared/Transfer/ConfigurationSyncResponseTransfer |
| ConfigurationSettingCollection | class | created | src/Generated/Shared/Transfer/ConfigurationSettingCollectionTransfer |
| ConfigurationScopeCollection | class | created | src/Generated/Shared/Transfer/ConfigurationScopeCollectionTransfer |
| ConfigurationValueRequest | class | created | src/Generated/Shared/Transfer/ConfigurationValueRequestTransfer |
| ConfigurationValueResponse | class | created | src/Generated/Shared/Transfer/ConfigurationValueResponseTransfer |
| ConfigurationValidationRequest | class | created | src/Generated/Shared/Transfer/ConfigurationValidationRequestTransfer |
| ConfigurationValidationResponse | class | created | src/Generated/Shared/Transfer/ConfigurationValidationResponseTransfer |
| ConfigurationError | class | created | src/Generated/Shared/Transfer/ConfigurationErrorTransfer |
| ConfigurationValueCollectionRequest | class | created | src/Generated/Shared/Transfer/ConfigurationValueCollectionRequestTransfer |
| ConfigurationValueDeletion | class | created | src/Generated/Shared/Transfer/ConfigurationValueDeletionTransfer |
| ConfigurationValueCollectionResponse | class | created | src/Generated/Shared/Transfer/ConfigurationValueCollectionResponseTransfer |
| ConfigurationSettingValuesCriteria | class | created | src/Generated/Shared/Transfer/ConfigurationSettingValuesCriteriaTransfer |
| ConfigurationSettingValueCollection | class | created | src/Generated/Shared/Transfer/ConfigurationSettingValueCollectionTransfer |
| ConfigurationStorage | class | created | src/Generated/Shared/Transfer/ConfigurationStorageTransfer |
| ConfigurationFileUpload | class | created | src/Generated/Shared/Transfer/ConfigurationFileUploadTransfer |
| ConfigurationFileUploadCollectionRequest | class | created | src/Generated/Shared/Transfer/ConfigurationFileUploadCollectionRequestTransfer |
| ConfigurationFileUploadCollectionResponse | class | created | src/Generated/Shared/Transfer/ConfigurationFileUploadCollectionResponseTransfer |

{% endinfo_block %}

### 4) Add translations

Regenerate the Zed translator cache to pick up the Configuration Management Back Office UI translations:

```bash
console translator:generate-cache
```

{% info_block warningBox &quot;Verification&quot; %}

1. Navigate to the Configuration Management page in the Back Office.
2. Verify that all UI labels, buttons, and messages are displayed in the correct locale.
3. Switch to German locale and verify the German translations appear.

{% endinfo_block %}

### 5) Configure navigation

Add the Configuration Management entry to `config/Zed/navigation.xml`:

```xml
&lt;configuration-management&gt;
    &lt;label&gt;Configuration&lt;/label&gt;
    &lt;title&gt;Configuration Management&lt;/title&gt;
    &lt;icon&gt;settings&lt;/icon&gt;
    &lt;bundle&gt;configuration&lt;/bundle&gt;
    &lt;controller&gt;manage&lt;/controller&gt;
    &lt;action&gt;index&lt;/action&gt;
    &lt;visible&gt;1&lt;/visible&gt;
&lt;/configuration-management&gt;
```

Execute the following command to clear the navigation cache:

```bash
console navigation:cache:remove
```

{% info_block warningBox &quot;Verification&quot; %}

Log in to the Back Office and verify that the **Configuration** menu item appears in the main navigation sidebar.

{% endinfo_block %}

### 6) Set up behavior

#### 6.1) Register console commands and application plugin

Register the configuration sync console command and the application plugin that exposes the Configuration facade as an application service for direct Zed access from the Client layer:

| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- | --- |
| ConfigurationSyncConsole | Synchronizes configuration schemas from YAML files and generates the merged schema and settings map. | None | Spryker\Zed\Configuration\Communication\Console |
| ConfigurationApplicationPlugin | Registers the Configuration facade as an application service for direct access in Zed applications. | None | Spryker\Zed\Configuration\Communication\Plugin\Application |

**src/Pyz/Zed/Console/ConsoleDependencyProvider.php**

Add the import statements:

```php
use Spryker\Zed\Configuration\Communication\Console\ConfigurationSyncConsole;
use Spryker\Zed\Configuration\Communication\Plugin\Application\ConfigurationApplicationPlugin;
```

Register the console command in `getConsoleCommands()`:

```php
protected function getConsoleCommands(Container $container): array
{
    $commands = [
        // ...
        new ConfigurationSyncConsole(),
        // ...
    ];
}
```

Register the application plugin in `getApplicationPlugins()`:

```php
protected function getApplicationPlugins(Container $container): array
{
    $applicationPlugins = parent::getApplicationPlugins($container);
    // ...
    $applicationPlugins[] = new ConfigurationApplicationPlugin();

    return $applicationPlugins;
}
```

**src/Pyz/Zed/Application/ApplicationDependencyProvider.php**

Add the import statement:

```php
use Spryker\Zed\Configuration\Communication\Plugin\Application\ConfigurationApplicationPlugin;
```

Register the application plugin in each Zed application context (`getBackofficeApplicationPlugins()`, `getBackendGatewayApplicationPlugins()`, `getBackendApiApplicationPlugins()`):

```php
protected function getBackofficeApplicationPlugins(): array
{
    return [
        // ...
        new ConfigurationApplicationPlugin(),
    ];
}

protected function getBackendGatewayApplicationPlugins(): array
{
    return [
        // ...
        new ConfigurationApplicationPlugin(),
    ];
}

protected function getBackendApiApplicationPlugins(): array
{
    return [
        // ...
        new ConfigurationApplicationPlugin(),
    ];
}
```

{% info_block warningBox &quot;Verification&quot; %}

1. Run `console configuration:sync` and verify that it outputs the number of processed settings.
2. Verify that configuration values can be read in Zed context via the Client layer without going through storage.

{% endinfo_block %}

#### 6.2) Set up queue configuration

Register the Configuration storage synchronization queue in both message broker implementations.

**src/Pyz/Client/RabbitMq/RabbitMqConfig.php**

Add the import statement:

```php
use Spryker\Shared\Configuration\ConfigurationConstants;
```

Add the queue name to `getSynchronizationQueueConfiguration()`:

```php
protected function getSynchronizationQueueConfiguration(): array
{
    return [
        // ...
        ConfigurationConstants::QUEUE_NAME_SYNC_CONFIGURATION,
    ];
}
```

**src/Pyz/Client/SymfonyMessenger/SymfonyMessengerConfig.php**

Add the import statement:

```php
use Spryker\Shared\Configuration\ConfigurationConstants;
```

Add the queue name to `getSynchronizationQueueConfiguration()`:

```php
protected function getSynchronizationQueueConfiguration(): array
{
    return [
        // ...
        ConfigurationConstants::QUEUE_NAME_SYNC_CONFIGURATION,
    ];
}
```

{% info_block warningBox &quot;Verification&quot; %}

Run `console queue:setup` and verify that the `sync.storage.configuration` queue is created in RabbitMQ.

{% endinfo_block %}

#### 6.3) Register queue message processor

Register the synchronization storage queue message processor for the Configuration sync queue:

**src/Pyz/Zed/Queue/QueueDependencyProvider.php**

Add the import statements:

```php
use Spryker\Shared\Configuration\ConfigurationConstants;
```

Add the processor to `getProcessorMessagePlugins()`:

```php
protected function getProcessorMessagePlugins(Container $container): array
{
    return [
        // ...
        ConfigurationConstants::QUEUE_NAME_SYNC_CONFIGURATION =&gt; new SynchronizationStorageQueueMessageProcessorPlugin(),
    ];
}
```

{% info_block warningBox &quot;Verification&quot; %}

1. Save a configuration value in the Back Office.
2. Run `console queue:worker:start --stop-when-empty`.
3. Verify that the `sync.storage.configuration` queue is processed without errors.

{% endinfo_block %}

#### 6.4) Register publisher plugins

Enable Publish &amp; Synchronize for configuration values by registering the publisher plugin:

| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- | --- |
| ConfigurationValueWritePublisherPlugin | Publishes storefront-visible, non-secret configuration values to `spy_configuration_storage` when `spy_configuration_value` entities are created, updated, or deleted. | None | Spryker\Zed\Configuration\Communication\Plugin\Publisher |

**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php**

Add the import statement:

```php
use Spryker\Zed\Configuration\Communication\Plugin\Publisher\ConfigurationValueWritePublisherPlugin;
```

Register the plugin group in `getPublisherPlugins()`:

```php
protected function getPublisherPlugins(): array
{
    return array_merge(
        // ...
        $this-&gt;getConfigurationStoragePlugins(),
    );
}
```

Add the new method:

```php
/**
 * @return list&lt;\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface&gt;
 */
protected function getConfigurationStoragePlugins(): array
{
    return [
        new ConfigurationValueWritePublisherPlugin(),
    ];
}
```

{% info_block warningBox &quot;Verification&quot; %}

1. Save a configuration value in the Back Office.
2. Check that the `spy_configuration_storage` table contains the published value.
3. Verify that secret settings are NOT published to storage.

{% endinfo_block %}

#### 6.5) Register scope identifier provider plugins

Register the store scope identifier provider to resolve the current store name as the scope identifier:

| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- | --- |
| StoreConfigurationScopeIdentifierProviderPlugin | Provides the current store name as the scope identifier for the `store` scope. | Store module installed | Spryker\Zed\Store\Communication\Plugin\Configuration |

**src/Pyz/Zed/Configuration/ConfigurationDependencyProvider.php**

```php
&lt;?php

/**
 * This file is part of the Spryker Suite.
 * For full license information, please view the LICENSE file that was distributed with this source code.
 */

declare(strict_types = 1);

namespace Pyz\Zed\Configuration;

use Spryker\Zed\Configuration\ConfigurationDependencyProvider as SprykerConfigurationDependencyProvider;
use Spryker\Zed\Store\Communication\Plugin\Configuration\StoreConfigurationScopeIdentifierProviderPlugin;

class ConfigurationDependencyProvider extends SprykerConfigurationDependencyProvider
{
    /**
     * @return array&lt;\Spryker\Zed\ConfigurationExtension\Dependency\Plugin\ConfigurationScopeIdentifierProviderPluginInterface&gt;
     */
    protected function getScopeIdentifierProviderPlugins(): array
    {
        return [
            new StoreConfigurationScopeIdentifierProviderPlugin(),
        ];
    }
}
```

{% info_block warningBox &quot;Verification&quot; %}

1. Navigate to the Configuration Management page in the Back Office.
2. Switch the scope selector to a specific store.
3. Verify that the scope identifier resolves to the store name (for example `DE`, `AT`).

{% endinfo_block %}

#### 6.6) Register Client-level request expander plugins

Register the store scope expander to attach the current store scope to configuration value requests:

| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- | --- |
| StoreScopeConfigurationValueRequestExpanderPlugin | Expands the configuration value request with the current store scope and store name as scope identifier. | Store module installed | Spryker\Client\Store\Plugin\Configuration |

**src/Pyz/Client/Configuration/ConfigurationDependencyProvider.php**

```php
&lt;?php

/**
 * This file is part of the Spryker Suite.
 * For full license information, please view the LICENSE file that was distributed with this source code.
 */

declare(strict_types = 1);

namespace Pyz\Client\Configuration;

use Spryker\Client\Configuration\ConfigurationDependencyProvider as SprykerConfigurationDependencyProvider;
use Spryker\Client\Store\Plugin\Configuration\StoreScopeConfigurationValueRequestExpanderPlugin;

class ConfigurationDependencyProvider extends SprykerConfigurationDependencyProvider
{
    protected function getConfigurationValueRequestExpanderPlugins(): array
    {
        return [
            new StoreScopeConfigurationValueRequestExpanderPlugin(),
        ];
    }
}
```

{% info_block warningBox &quot;Verification&quot; %}

1. Read a configuration value via the Client layer.
2. Verify that the request includes the current store as a scope with the store name as scope identifier.

{% endinfo_block %}

#### 6.7) Optional: Set up data import

Enable CLI-based bulk import of configuration values from CSV files.

| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
| --- | --- | --- | --- |
| ConfigurationValueDataImportPlugin | Imports configuration values from CSV using the DataImport framework. Validates setting keys, scopes, and constraints. Skips secret settings with a warning. | `configuration:sync` must be run first | Spryker\Zed\Configuration\Communication\Plugin\DataImport |

**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php**

Add the import statement and register the plugin in `getDataImporterPlugins()`:

```php
use Spryker\Zed\Configuration\Communication\Plugin\DataImport\ConfigurationValueDataImportPlugin;
```

```php
protected function getDataImporterPlugins(): array
{
    return [
        // ...
        new ConfigurationValueDataImportPlugin(),
    ];
}
```

**src/Pyz/Zed/DataImport/DataImportConfig.php**

Add the import type to the full import types list:

```php
use Spryker\Zed\Configuration\ConfigurationConfig;
```

```php
public function getFullImportTypes(): array
{
    return [
        // ...
        ConfigurationConfig::IMPORT_TYPE_CONFIGURATION_VALUE,
    ];
}
```

**data/import/common/common/configuration_value.csv**

Create the CSV file with the required columns:

```csv
setting_key,scope,scope_identifier,value
```

**data/import/local/full_EU.yml** (or your region-specific import config)

Add the `configuration-value` data entity:

```yaml
actions:
    # ...
    - data_entity: configuration-value
      source: data/import/common/common/configuration_value.csv
```

{% info_block warningBox &quot;Verification&quot; %}

1. Add a row to `data/import/common/common/configuration_value.csv` with a valid setting key, for example:

   ```csv
   setting_key,scope,scope_identifier,value
   system:general:basic:site_name,store,DE,My German Store
   ```

2. Run `console data:import configuration-value`.
3. Verify the value is saved by checking the Back Office Configuration page.

{% endinfo_block %}

### 7) Add install recipe commands

Add the `configuration:sync` command to the install recipes so that the merged schema and settings map are generated during deployment.

The generated files are written to `data/configuration/` inside the container and are excluded from both the Git repository and the Docker image. A freshly deployed container therefore never has them until `configuration:sync` runs. Without these files, the settings map is empty and every configuration value resolves to `null` at runtime—even though the stored values remain intact in the `spy_configuration_value` table. Add the command to every recipe a deployment invokes, not only to the local build recipe.

#### 7.1) Add the command to the local build recipe

**config/install/docker.yml**

Add the command to the `build` section:

```yaml
    build:
        # ... existing commands ...

        configuration-sync:
            command: &apos;vendor/bin/console configuration:sync&apos;
```

#### 7.2) Add the command to the cloud deployment recipes

Add a `configuration` section to each recipe your deployment pipeline invokes. Place it after the database migration steps and before any `data:import` step: the imported configuration-value rows are validated against the settings map, and the import aborts when the map is missing.

| RECIPE | DEPLOYMENT HOOK |
| --- | --- |
| config/install/production.yml | `SPRYKER_HOOK_INSTALL` |
| config/install/destructive.yml | `SPRYKER_HOOK_DESTRUCTIVE_INSTALL` |
| config/install/dynamic-store.yml | Dynamic Multistore deployments |

Add the following section to each of the preceding recipes:

```yaml
    configuration:
        configuration-sync:
            command: &apos;vendor/bin/console configuration:sync -vvv --no-ansi&apos;
```

If your project clones new environments from a deploy file template, such as `deploy.aws-env-template.yml`, add the section to the template as well so that new environments inherit it.

{% info_block infoBox &quot;pre-deploy recipes&quot; %}

Do not add `configuration:sync` to `config/install/pre-deploy.yml`. This recipe runs before the new code and the database migration are in place, so there is nothing to sync against yet.

{% endinfo_block %}

{% info_block infoBox &quot;Idempotency&quot; %}

Running `configuration:sync` cannot overwrite values set by users. The command only writes the two generated cache files and never opens a database connection, so it is safe to run on every deployment.

{% endinfo_block %}

{% info_block warningBox &quot;Verification&quot; %}

Run each install recipe and verify that the `configuration:sync` step executes without errors.

{% endinfo_block %}

### 8) Configure data directory

Add the `data/configuration/` directory to `.gitignore` exceptions to ensure the generated schema files are tracked:

**.gitignore**

```diff
 /data/*
 !/data/import/
 !/data/export/
+!/data/configuration/
```

Create the directory with a `.gitkeep` file:

```bash
mkdir -p data/configuration
touch data/configuration/.gitkeep
```

{% info_block warningBox &quot;Verification&quot; %}

Run `console configuration:sync` and verify that `data/configuration/merged-schema.php` and `data/configuration/settings-map.php` are generated.

{% endinfo_block %}

## Configuration Schema YAML Reference

Configuration settings are defined in YAML files with the `*.configuration.yml` extension. The schema sync command (`configuration:sync`) discovers these files and merges them into a single schema.
</description>
            <pubDate>Mon, 03 Aug 2026 08:48:40 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-confguration-feature.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-confguration-feature.html</guid>
            
            
        </item>
        
        <item>
            <title>Configuration Management feature</title>
            <description>&lt;h2 id=&quot;what-it-does&quot;&gt;What It Does&lt;/h2&gt;
&lt;p&gt;Provides a centralized, schema-driven system for managing application settings across scopes (for example global, store, custom-scope). Settings are declared in YAML files, managed via the Back Office UI, to be consumed in different layers (Zed, Yves, Glue) through module Config classes.&lt;/p&gt;
&lt;h2 id=&quot;quick-start&quot;&gt;Quick Start&lt;/h2&gt;
&lt;h3 id=&quot;declare-settings-in-a-yaml-schema&quot;&gt;1. Declare settings in a YAML schema&lt;/h3&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# /data/configuration/my-module.configuration.yml&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;features&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;my_module&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;My Module&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tabs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;general&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;General&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;groups&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;display&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Display Settings&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;scopes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;items_per_page&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Items Per Page&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;integer&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;default_value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;24&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;scopes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;storefront&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;constraints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
                  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;required&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Items per page is required&lt;/span&gt;
                  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;min&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Must be at least &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;sync-schemas&quot;&gt;2. Sync schemas&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk cli console configuration:sync
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;consume-in-your-module-config&quot;&gt;3. Consume in your module Config&lt;/h3&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Spryker\Yves\MyModule&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Yves\Kernel\AbstractBundleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MyModuleConfig&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AbstractBundleConfig&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;DEFAULT_ITEMS_PER_PAGE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_MY_MODULE_GENERAL_DISPLAY_ITEMS_PER_PAGE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;my_module:general:display:items_per_page&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getItemsPerPage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getModuleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_MY_MODULE_GENERAL_DISPLAY_ITEMS_PER_PAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;DEFAULT_ITEMS_PER_PAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;getModuleConfig()&lt;/code&gt; method is available in Zed, Yves, Glue layers &lt;code&gt;AbstractBundleConfig&lt;/code&gt; and is the preferred way to read configuration values.&lt;/p&gt;
&lt;h2 id=&quot;reading-configuration-values&quot;&gt;Reading Configuration Values&lt;/h2&gt;
&lt;h3 id=&quot;the-codegetmoduleconfigcode-method&quot;&gt;The &lt;code&gt;getModuleConfig()&lt;/code&gt; Method&lt;/h3&gt;
&lt;p&gt;Every &lt;code&gt;AbstractBundleConfig&lt;/code&gt; in Zed, Yves, and Glue provides:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getModuleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;mixed&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$default&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;array&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$configurationScopes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;mixed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Compound setting key: &lt;code&gt;feature:tab:group:setting&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$default&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;mixed&lt;/td&gt;
&lt;td&gt;Fallback when value is not found or Configuration module is not installed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;$configurationScopes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ConfigurationScopeTransfer[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Optional scope context transfers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Layer behavior:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Yves / Glue&lt;/strong&gt;: Reads from key-value storage via &lt;code&gt;ConfigurationClient&lt;/code&gt; (fast, cached)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zed&lt;/strong&gt;: Reads from database via &lt;code&gt;ConfigurationFacade&lt;/code&gt; (supports secrets, full scope resolution)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Backward Compatible:&lt;/strong&gt; If the Configuration module is not installed, &lt;code&gt;getModuleConfig()&lt;/code&gt; silently returns &lt;code&gt;$default&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;real-world-examples&quot;&gt;Real-World Examples&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;AvailabilityWidget (Yves)&lt;/strong&gt; – boolean setting with constant fallback:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AvailabilityWidgetConfig&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AbstractBundleConfig&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;STOCK_DISPLAY_ENABLED&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;STOCK_DISPLAY_MODE_INDICATOR_AND_QUANTITY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;indicator_and_quantity&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_CATALOG_INVENTORY_STOCK_OPTIONS_DISPLAY_STOCK_AVAILABILITY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;catalog:inventory:stock_options:display_stock_availability&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_CATALOG_INVENTORY_STOCK_OPTIONS_STOCK_INFO_OPTIONS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;catalog:inventory:stock_options:stock_info_options&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;isStockDisplayEnabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getModuleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_CATALOG_INVENTORY_STOCK_OPTIONS_DISPLAY_STOCK_AVAILABILITY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;STOCK_DISPLAY_ENABLED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getStockDisplayMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getModuleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_CATALOG_INVENTORY_STOCK_OPTIONS_STOCK_INFO_OPTIONS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;STOCK_DISPLAY_MODE_INDICATOR_AND_QUANTITY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;BuyBox (Yves)&lt;/strong&gt; – string setting with enum fallback:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BuyBoxConfig&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AbstractBundleConfig&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;SORT_BY_PRICE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;price&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_MARKETPLACE_PDP_BUY_BOX_OFFER_SORT_RULE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;marketplace:pdp:buy_box:offer_sort_rule&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getSortingStrategy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getModuleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_MARKETPLACE_PDP_BUY_BOX_OFFER_SORT_RULE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;SORT_BY_PRICE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;scope-specific-reads&quot;&gt;Scope-Specific Reads&lt;/h3&gt;
&lt;p&gt;Pass &lt;code&gt;ConfigurationScopeTransfer&lt;/code&gt; objects as the third argument when you need a scope-specific value:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Generated\Shared\Transfer\ConfigurationScopeTransfer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getItemsPerPage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$storeName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_MY_MODULE_GENERAL_DISPLAY_ITEMS_PER_PAGE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;my_module:general:display:items_per_page&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getModuleConfig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CONFIGURATION_KEY_MY_MODULE_GENERAL_DISPLAY_ITEMS_PER_PAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;DEFAULT_ITEMS_PER_PAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ConfigurationScopeTransfer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;setKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;store&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;setIdentifier&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$storeName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;integration-checklist&quot;&gt;Integration Checklist&lt;/h3&gt;
&lt;p&gt;When integrating Configuration into an existing module:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify hardcoded values or constants that should be configurable&lt;/li&gt;
&lt;li&gt;Declare them in a YAML schema in &lt;code&gt;data/configuration/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Replace hardcoded access in the module’s Config class with &lt;code&gt;getModuleConfig()&lt;/code&gt; calls&lt;/li&gt;
&lt;li&gt;Keep the original constant as &lt;code&gt;$default&lt;/code&gt; for backward compatibility&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;configuration:sync&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Values are now manageable via the Back Office Configuration Management page&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;yaml-schema-declaration-reference&quot;&gt;YAML Schema Declaration Reference&lt;/h2&gt;
&lt;h3 id=&quot;schema-validation&quot;&gt;Schema Validation&lt;/h3&gt;
&lt;p&gt;YAML schema files support IDE autocompletion via JSON Schema. Add this header to your file:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# yaml-language-server: $schema=../../vendor/spryker/configuration/resources/configuration/configuration-schema-v1.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The schema file is located at &lt;code&gt;vendor/spryker/configuration/resources/configuration/configuration-schema-v1.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;hierarchy&quot;&gt;Hierarchy&lt;/h3&gt;
&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;features[]
  tabs[]
    groups[]
      settings[]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Each setting gets a compound key: &lt;code&gt;{featureKey}:{tabKey}:{groupKey}:{settingKey}&lt;/code&gt; used for persistence and lookups.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;feature-level&quot;&gt;Feature Level&lt;/h3&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;features&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;system&lt;/span&gt;                          &lt;span class=&quot;c1&quot;&gt;# Required. Unique feature identifier.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;System Configuration&lt;/span&gt;           &lt;span class=&quot;c1&quot;&gt;# Required. Display name in backoffice.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Core system settings&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# Optional. Feature description (shown as tooltip).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;                             &lt;span class=&quot;c1&quot;&gt;# Optional. Sort order (lower = first).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Optional. Default: true.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;beta&lt;/span&gt;                         &lt;span class=&quot;c1&quot;&gt;# Optional. Status badge (beta, early_access).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tabs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;                          &lt;span class=&quot;c1&quot;&gt;# Required. At least one tab.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;&lt;code&gt;^[a-z][a-z0-9_]*$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unique identifier. Part of compound setting key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;1-255 chars&lt;/td&gt;
&lt;td&gt;Display name in backoffice sidebar.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 1000 chars&lt;/td&gt;
&lt;td&gt;Feature description text. Shown as tooltip in sidebar.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Sort order for rendering. Lower values first.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;When &lt;code&gt;false&lt;/code&gt;, feature and all children are hidden from the backoffice, search results, and settings map.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;beta&lt;/code&gt;, &lt;code&gt;early_access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status badge displayed next to the feature name. Invalid values are silently ignored.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tabs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;min 1 item&lt;/td&gt;
&lt;td&gt;List of tab objects.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;tab-level&quot;&gt;Tab Level&lt;/h3&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;tabs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;general&lt;/span&gt;                         &lt;span class=&quot;c1&quot;&gt;# Required. Unique within feature.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;General&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Required. Tab display name.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;icon&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;settings&lt;/span&gt;                       &lt;span class=&quot;c1&quot;&gt;# Optional. Icon class for backoffice tab.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;General system settings&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Optional. Tab description (shown as tooltip).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;                             &lt;span class=&quot;c1&quot;&gt;# Optional. Sort order (lower = first).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Optional. Default: true.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;early_access&lt;/span&gt;                 &lt;span class=&quot;c1&quot;&gt;# Optional. Status badge.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;groups&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Required. At least one group.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;&lt;code&gt;^[a-z][a-z0-9_]*$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unique within feature. Part of compound setting key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;1-255 chars&lt;/td&gt;
&lt;td&gt;Tab label in backoffice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;icon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 100 chars&lt;/td&gt;
&lt;td&gt;Material Symbols icon name (for example &lt;code&gt;settings&lt;/code&gt;, &lt;code&gt;cable&lt;/code&gt;, &lt;code&gt;trending_up&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 1000 chars&lt;/td&gt;
&lt;td&gt;Tab description text. Shown as tooltip in sidebar.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Sort order for rendering. Lower values first.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;When &lt;code&gt;false&lt;/code&gt;, tab and all children are hidden from the backoffice, search results, and settings map.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;beta&lt;/code&gt;, &lt;code&gt;early_access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status badge displayed next to the tab name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;groups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;min 1 item&lt;/td&gt;
&lt;td&gt;List of group objects.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;group-level&quot;&gt;Group Level&lt;/h3&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;groups&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;basic&lt;/span&gt;                           &lt;span class=&quot;c1&quot;&gt;# Required. Unique within tab.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Basic Settings&lt;/span&gt;                 &lt;span class=&quot;c1&quot;&gt;# Required. Group display name.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Basic system config&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;# Optional. Group description.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;scopes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;              &lt;span class=&quot;c1&quot;&gt;# Required. Scopes this group is visible for.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;                             &lt;span class=&quot;c1&quot;&gt;# Optional. Sort order (lower = first).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Optional. Default: true.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;beta&lt;/span&gt;                         &lt;span class=&quot;c1&quot;&gt;# Optional. Status badge.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;                      &lt;span class=&quot;c1&quot;&gt;# Required. At least one setting.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;&lt;code&gt;^[a-z][a-z0-9_]*$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unique within tab.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;1-255 chars&lt;/td&gt;
&lt;td&gt;Group heading in backoffice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 1000 chars&lt;/td&gt;
&lt;td&gt;Group description text.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scopes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[&apos;global&apos;]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;min 1 item&lt;/td&gt;
&lt;td&gt;Scopes where this group is displayed in backoffice. Setting scopes are constrained to their parent group scopes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Sort order for rendering. Lower values first.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;When &lt;code&gt;false&lt;/code&gt;, group and all settings are hidden from the backoffice, search results, and settings map.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;beta&lt;/code&gt;, &lt;code&gt;early_access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status badge displayed next to the group heading.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;settings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;min 1 item&lt;/td&gt;
&lt;td&gt;List of setting objects.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;setting-level&quot;&gt;Setting Level&lt;/h3&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;site_name&lt;/span&gt;                       &lt;span class=&quot;c1&quot;&gt;# Required. Unique within group.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Site Name&lt;/span&gt;                      &lt;span class=&quot;c1&quot;&gt;# Required. Setting label.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;The name of the site&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# Optional. Displayed below the input.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Changes require cache clear&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# Optional. Additional note below description.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;placeholder&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Enter your store name&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;# Optional. Input placeholder text.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;help_text&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Appears in page titles&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# Optional. Tooltip or help area text.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@MyModule/Configuration/custom-input.twig&apos;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Optional. Custom Twig template.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;string&lt;/span&gt;                         &lt;span class=&quot;c1&quot;&gt;# Required. Data type.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;default_value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;My Store&lt;/span&gt;              &lt;span class=&quot;c1&quot;&gt;# Optional. Fallback value.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;                             &lt;span class=&quot;c1&quot;&gt;# Optional. For select/multiselect/radio types.&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;option_a&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Option A&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;scopes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;              &lt;span class=&quot;c1&quot;&gt;# Optional. Default: [&apos;global&apos;].&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;                             &lt;span class=&quot;c1&quot;&gt;# Optional. Sort order (lower = first).&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Optional. Default: true.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;early_access&lt;/span&gt;                 &lt;span class=&quot;c1&quot;&gt;# Optional. Status badge.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# Optional. Default: false.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;storefront&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;                     &lt;span class=&quot;c1&quot;&gt;# Optional. Default: false.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;constraints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;                   &lt;span class=&quot;c1&quot;&gt;# Optional. Validation constraints.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;                  &lt;span class=&quot;c1&quot;&gt;# Optional. Conditional visibility rules.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;sanitize_xss&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;                  &lt;span class=&quot;c1&quot;&gt;# Optional. XSS sanitization rules.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;data_object&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;\My\DataProvider&lt;/span&gt;        &lt;span class=&quot;c1&quot;&gt;# Optional. Data provider plugin class.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;&lt;code&gt;^[a-z][a-z0-9_]*$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unique within group. Part of compound key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;1-255 chars&lt;/td&gt;
&lt;td&gt;Input label in backoffice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 1000 chars&lt;/td&gt;
&lt;td&gt;Help text displayed below the input field.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;note&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 1000 chars&lt;/td&gt;
&lt;td&gt;Additional note displayed below the description in italic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;placeholder&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 255 chars&lt;/td&gt;
&lt;td&gt;Placeholder text inside the input field.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;help_text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 500 chars&lt;/td&gt;
&lt;td&gt;Extended help in tooltip or expandable area.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;template&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;max 255 chars&lt;/td&gt;
&lt;td&gt;Custom Twig template. Overrides type-based widget.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;See types table&lt;/td&gt;
&lt;td&gt;Value data type. Determines backoffice input widget.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;default_value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;mixed&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Must match &lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fallback when no value is saved at any scope.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;options&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;option[]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;For select/multi/radio&lt;/td&gt;
&lt;td&gt;Available choices. See &lt;a href=&quot;#options&quot;&gt;Options&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scopes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[&apos;global&apos;]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;min 1 item&lt;/td&gt;
&lt;td&gt;Scopes where this setting can be configured. Constrained to parent group scopes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Sort order for rendering. Lower values first.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;When &lt;code&gt;false&lt;/code&gt;, setting is hidden from the backoffice, search results, and settings map.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;beta&lt;/code&gt;, &lt;code&gt;early_access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status badge displayed next to the setting label.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;When &lt;code&gt;true&lt;/code&gt;, value is encrypted in database. Never published to storage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;storefront&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;When &lt;code&gt;true&lt;/code&gt;, value is published to key-value storage for Yves/Glue.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;constraints&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Validation rules. See &lt;a href=&quot;#constraints&quot;&gt;Constraints&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dependencies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Conditional rules. See &lt;a href=&quot;#dependencies&quot;&gt;Dependencies&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file_upload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Required when &lt;code&gt;type: file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File upload configuration. See &lt;a href=&quot;#file-upload-fields&quot;&gt;File upload fields&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sanitize_xss&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;XSS sanitization configuration. See &lt;a href=&quot;#xss-sanitization&quot;&gt;XSS Sanitization&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data_object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fully qualified class name&lt;/td&gt;
&lt;td&gt;Plugin class implementing &lt;code&gt;ConfigurationSettingDataProviderPluginInterface&lt;/code&gt;. Provides dynamic data to the setting at render time.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;setting-types&quot;&gt;Setting Types&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Backoffice Input&lt;/th&gt;
&lt;th&gt;Requires &lt;code&gt;options&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single-line text&lt;/td&gt;
&lt;td&gt;Text input&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;integer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whole number&lt;/td&gt;
&lt;td&gt;Number input&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;float&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Decimal number&lt;/td&gt;
&lt;td&gt;Number input&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;True/false toggle&lt;/td&gt;
&lt;td&gt;Checkbox/switch&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multi-line text or structured data&lt;/td&gt;
&lt;td&gt;Textarea&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Color hex value&lt;/td&gt;
&lt;td&gt;Color picker&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON structure&lt;/td&gt;
&lt;td&gt;Code editor&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;select&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single choice from list&lt;/td&gt;
&lt;td&gt;Dropdown&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;multiselect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multiple choices from list&lt;/td&gt;
&lt;td&gt;Multi-select&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;radio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single choice from list&lt;/td&gt;
&lt;td&gt;Radio buttons&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File upload (stored as public URL)&lt;/td&gt;
&lt;td&gt;File upload widget&lt;/td&gt;
&lt;td&gt;No, but requires &lt;code&gt;file_upload&lt;/code&gt; block&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;file-upload-fields&quot;&gt;File upload fields&lt;/h4&gt;
&lt;p&gt;Use &lt;code&gt;type: file&lt;/code&gt; for settings that accept a file upload (for example, logo images). The Back Office renders a file upload widget. After a successful upload, the public URL of the uploaded file is stored as the setting value. All file validation and storage are handled server-side using a configured Flysystem filesystem service.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;type: file&lt;/code&gt; is used, a &lt;code&gt;file_upload&lt;/code&gt; block must be present on the setting. It configures the Flysystem service, allowed file types, size limit, and recommended display dimensions.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;bo_logo_url&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Back Office Logo&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;file&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;file_upload&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;storage_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;backoffice-media&apos;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;allowed_mime_types&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;image/png&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;image/jpeg&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;image/gif&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;image/webp&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;image/svg+xml&apos;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;allowed_extensions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.png&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.jpg&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.jpeg&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.gif&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.webp&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.svg&apos;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max_file_size&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;10M&apos;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;recommended_width_px&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;290&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;recommended_height_px&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;77&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;default_value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;scopes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;secret&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;storefront&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h5 id=&quot;codefileuploadcode-properties&quot;&gt;&lt;code&gt;file_upload&lt;/code&gt; properties&lt;/h5&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;storage_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Flysystem filesystem service name. Must be configured in &lt;code&gt;FileSystemConstants::FILESYSTEM_SERVICE&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowed_mime_types&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;List of permitted MIME types. Upload is rejected if the file MIME type is not in the list.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowed_extensions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;List of permitted file extensions including the leading dot (for example &lt;code&gt;.png&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max_file_size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Maximum allowed file size (for example &lt;code&gt;10M&lt;/code&gt;, &lt;code&gt;2048K&lt;/code&gt;). Rejected if exceeded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recommended_width_px&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Recommended display width in pixels. Shown as a hint in the Back Office UI.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recommended_height_px&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Recommended display height in pixels. Shown as a hint in the Back Office UI.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The stored value is always a public URL returned by the Flysystem service after upload. To render the image in a Twig template, read it with &lt;code&gt;configurationValue()&lt;/code&gt; and use it as an &lt;code&gt;src&lt;/code&gt; attribute:&lt;/p&gt;
&lt;div class=&quot;language-twig highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;logoUrl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;configurationValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;theme:logos:logos:yves_logo_url&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%}&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;logoUrl&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;empty&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;img&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;logoUrl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;| &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;html_attr&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;alt=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Logo&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;endif&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;For Flysystem service setup (S3 in production, local fallback in development and CI), see &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/integrate-basic-shop-theme.html&quot;&gt;Install the Basic Shop Theme feature&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;options&quot;&gt;Options&lt;/h4&gt;
&lt;p&gt;Required for &lt;code&gt;select&lt;/code&gt;, &lt;code&gt;multiselect&lt;/code&gt;, and &lt;code&gt;radio&lt;/code&gt; types. Defines available choices.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;indicator_only&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Indicator Only&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Show only in-stock/out-of-stock indicator&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;indicator_and_quantity&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Indicator and Quantity&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Show indicator and exact stock count&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;min 1 char&lt;/td&gt;
&lt;td&gt;Internal value stored when selected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;label&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;1-255 chars&lt;/td&gt;
&lt;td&gt;Display label shown in backoffice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;max 500 chars&lt;/td&gt;
&lt;td&gt;Additional explanation (for radio buttons).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;secret-vs-storefront-behavior&quot;&gt;Secret vs Storefront Behavior&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;storefront&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plain text in database. Accessible only via Zed (&lt;code&gt;getModuleConfig()&lt;/code&gt; in Zed Config).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plain text. Published to key-value storage. Accessible in all layers via &lt;code&gt;getModuleConfig()&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Encrypted in database. Decrypted on read in Zed only. Never published to storage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Invalid combination. Secrets are always excluded from storage.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;available-scopes&quot;&gt;Available Scopes&lt;/h4&gt;
&lt;p&gt;Built-in scopes (enabled out of the box):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Requires Identifier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;global&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Application-wide default&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;store&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Store-specific override (for example DE, AT)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Default hierarchy: &lt;code&gt;store -&amp;gt; global -&amp;gt; default_value&lt;/code&gt;. Values resolve from most specific to least specific.&lt;/p&gt;
&lt;p&gt;For adding custom scopes, see &lt;a href=&quot;/docs/dg/dev/backend-development/configuration-management/custom-scopes.html&quot;&gt;Adding Custom Scopes&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;constraints&quot;&gt;Constraints&lt;/h3&gt;
&lt;p&gt;Validated server-side when saving values through the Back Office.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;constraints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;required&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Site name is required&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;min&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Must be at least &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;max&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Cannot exceed &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Constraints&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;See table&lt;/td&gt;
&lt;td&gt;Constraint type identifier.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;1-500 chars&lt;/td&gt;
&lt;td&gt;Error message shown when validation fails.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;options&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Depends on type&lt;/td&gt;
&lt;td&gt;Constraint-specific parameters.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;built-in-constraint-types&quot;&gt;Built-in Constraint Types&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Required Options&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;required&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value must not be blank&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Mandatory fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;min&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Minimum numeric value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;min&lt;/code&gt; (number)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;options: { min: 1 }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Maximum numeric value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;max&lt;/code&gt; (number)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;options: { max: 100 }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value within numeric range&lt;/td&gt;
&lt;td&gt;&lt;code&gt;min&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt; (number)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;options: { min: 0, max: 100 }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;length&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String length limits&lt;/td&gt;
&lt;td&gt;&lt;code&gt;min&lt;/code&gt; and/or &lt;code&gt;max&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;options: { min: 6, max: 128 }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Email format validation&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;Email input fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL format validation&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;td&gt;URL input fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pattern matching&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pattern&lt;/code&gt; (string)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;options: { pattern: &apos;^G-[A-Z0-9]{10}$&apos; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;choice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value from allowed list&lt;/td&gt;
&lt;td&gt;&lt;code&gt;choices&lt;/code&gt; (string[])&lt;/td&gt;
&lt;td&gt;&lt;code&gt;options: { choices: [&apos;a&apos;, &apos;b&apos;] }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;dependencies&quot;&gt;Dependencies&lt;/h3&gt;
&lt;p&gt;Control conditional visibility of settings in the Back Office UI. A setting with dependencies is only shown when at least one dependency rule matches (OR logic between rules). Each rule uses a &lt;code&gt;when&lt;/code&gt; clause with &lt;code&gt;any&lt;/code&gt; (OR) or &lt;code&gt;all&lt;/code&gt; (AND) condition grouping.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;stock_info_options&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Stock Info Options&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;radio&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;when&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;setting&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;catalog:inventory:stock_options:display_stock_availability&lt;/span&gt;
              &lt;span class=&quot;na&quot;&gt;operator&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;equals&lt;/span&gt;
              &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;true&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Multiple conditions with &lt;code&gt;all&lt;/code&gt; (AND logic):&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;na&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;when&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;setting&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;system:general:basic:feature_enabled&lt;/span&gt;
              &lt;span class=&quot;na&quot;&gt;operator&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;equals&lt;/span&gt;
              &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;true&quot;&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;setting&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;system:general:basic:mode&lt;/span&gt;
              &lt;span class=&quot;na&quot;&gt;operator&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;not_equals&lt;/span&gt;
              &lt;span class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;maintenance&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&quot;dependency-rule&quot;&gt;Dependency Rule&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;when&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Contains &lt;code&gt;any&lt;/code&gt; or &lt;code&gt;all&lt;/code&gt; array of conditions.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;when-clause&quot;&gt;When Clause&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;condition[]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Setting is shown if &lt;strong&gt;any&lt;/strong&gt; condition matches (OR).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;all&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;condition[]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Setting is shown if &lt;strong&gt;all&lt;/strong&gt; conditions match (AND).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;One of &lt;code&gt;any&lt;/code&gt; or &lt;code&gt;all&lt;/code&gt; must be provided.&lt;/p&gt;
&lt;h4 id=&quot;condition&quot;&gt;Condition&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Compound key of the setting this depends on.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;operator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Comparison operator.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Value to compare against.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;dependency-operators&quot;&gt;Dependency Operators&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;equals&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Setting value must equal the given value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;not_equals&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Setting value must not equal the given value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;greater_than&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Numeric: value must be greater than expected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;less_than&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Numeric: value must be less than expected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;contains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String: value must contain the expected text.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;in&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value must be in the given list.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;xss-sanitization&quot;&gt;XSS Sanitization&lt;/h3&gt;
&lt;p&gt;Settings with &lt;code&gt;type: text&lt;/code&gt; or &lt;code&gt;type: string&lt;/code&gt; can have XSS sanitization applied on save. The &lt;code&gt;sanitize_xss&lt;/code&gt; block configures how HTML content is cleaned using the W3C HTML Sanitizer API via &lt;code&gt;spryker/util-sanitize-xss&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;custom_html_block&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Custom HTML Block&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;text&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;sanitize_xss&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allow_safe_elements&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allow_static_elements&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;force_https_urls&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allow_relative_links&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allowed_link_schemes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mailto&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allowed_link_hosts&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;example.com&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allow_elements&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;strong&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[]&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;allow_attributes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;data-custom&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;*&apos;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allow_safe_elements&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allow W3C safe baseline elements.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allow_static_elements&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allow W3C static baseline elements.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;force_https_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rewrite &lt;code&gt;http://&lt;/code&gt; URLs to &lt;code&gt;https://&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allow_relative_links&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allow relative link URLs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowed_link_schemes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allowed URL schemes (for example &lt;code&gt;https&lt;/code&gt;, &lt;code&gt;mailto&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowed_link_hosts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allowed link hostnames.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allow_elements&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Map of element name to allowed attribute names.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allow_attributes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Map of attribute name to allowed element names (&lt;code&gt;*&lt;/code&gt; for all).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;status-badges&quot;&gt;Status Badges&lt;/h3&gt;
&lt;p&gt;Features, tabs, groups, and settings can display a status badge in the Back Office UI to indicate lifecycle stage. Badges are informational only and do not affect behavior.&lt;/p&gt;
&lt;p&gt;Valid values: &lt;code&gt;beta&lt;/code&gt;, &lt;code&gt;early_access&lt;/code&gt;. Invalid values are silently ignored during schema normalization.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;features&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ai_recommendations&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;beta&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tabs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;model&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;early_access&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Badges render as colored pills next to item names in both the sidebar navigation and content area.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;schema-file-locations&quot;&gt;Schema File Locations&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Loaded By&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;{Module Folder}/resources/configuration/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Core module schemas&lt;/td&gt;
&lt;td&gt;&lt;code&gt;configuration:sync&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data/configuration/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project-level schema overrides&lt;/td&gt;
&lt;td&gt;&lt;code&gt;configuration:sync&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Project schemas override core schemas at the setting level. Settings with the same compound key are completely replaced.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Merged output:&lt;/strong&gt; &lt;code&gt;data/configuration/merged-schema.php&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;backoffice-management&quot;&gt;Backoffice Management&lt;/h2&gt;
&lt;p&gt;Settings are managed at &lt;strong&gt;The Back office &amp;gt; Configuration&lt;/strong&gt;. The page provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feature sidebar navigation with collapsible feature groups&lt;/li&gt;
&lt;li&gt;Tabbed layout per feature&lt;/li&gt;
&lt;li&gt;Scope switcher (global, store with identifier)&lt;/li&gt;
&lt;li&gt;Input widgets matching setting types (including JSON editor with syntax highlighting)&lt;/li&gt;
&lt;li&gt;Status badges on features, tabs, groups, and settings&lt;/li&gt;
&lt;li&gt;Inline validation with constraint error messages&lt;/li&gt;
&lt;li&gt;“Revert to default” to delete scope-specific overrides&lt;/li&gt;
&lt;li&gt;Batch save with per-field error reporting&lt;/li&gt;
&lt;li&gt;Global search across all settings (debounced AJAX, filters sidebar navigation)&lt;/li&gt;
&lt;li&gt;Override detection: settings overridden by project-level Config classes are shown as read-only with an explanation notice&lt;/li&gt;
&lt;li&gt;Dependent settings: conditional visibility with automatic change tracking&lt;/li&gt;
&lt;li&gt;Audit logging: all save operations (successful and failed) are logged to the security audit channel&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;search&quot;&gt;Search&lt;/h3&gt;
&lt;p&gt;The search input in the top bar filters the sidebar navigation as you type. Search matches against translated names and descriptions at all schema levels (feature, tab, group, setting), as well as setting compound keys. Results are scoped to the currently selected scope.&lt;/p&gt;
&lt;p&gt;The search uses a debounced AJAX call to &lt;code&gt;GET /configuration/manage/search?term={term}&amp;amp;scope={scope}&lt;/code&gt; which returns matching feature-to-tab mappings. Non-matching features and tabs are hidden in the sidebar.&lt;/p&gt;
&lt;h3 id=&quot;override-detection&quot;&gt;Override Detection&lt;/h3&gt;
&lt;p&gt;During &lt;code&gt;configuration:sync&lt;/code&gt;, the system scans core Config classes across Yves, Zed, Glue, and Client layers for methods that use &lt;code&gt;getModuleConfig()&lt;/code&gt;. If a project-level Config class overrides such a method without calling &lt;code&gt;getModuleConfig()&lt;/code&gt;, the setting is flagged as overridden.&lt;/p&gt;
&lt;p&gt;Overridden settings in the Back Office:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input is disabled (read-only)&lt;/li&gt;
&lt;li&gt;“Use Default” link is hidden&lt;/li&gt;
&lt;li&gt;A notice displays the project class and method responsible for the override&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Override warnings are also printed to the console during &lt;code&gt;configuration:sync&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[WARNING] Configuration bypass: catalog:inventory:stock_options:display_stock_availability
  Core:    SprykerShop\Yves\AvailabilityWidget\AvailabilityWidgetConfig::isStockDisplayEnabled
  Project: Pyz\Yves\AvailabilityWidget\AvailabilityWidgetConfig::isStockDisplayEnabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;twig-integration&quot;&gt;Twig Integration&lt;/h2&gt;
&lt;p&gt;The Configuration module exposes three Twig functions that let templates read configuration values directly without going through a PHP Config class. They are available through the following existing plugins — no additional registration is required:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Storefront (Yves)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ShopUiTwigExtension&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Back Office and Merchant Portal (Zed)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\Spryker\Zed\Twig\Communication\Plugin\Application\TwigApplicationPlugin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;configurationValue(key, default)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns a single configuration value by compound key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;configurationValues(keys)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns an associative array of values for a list of compound keys.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;codeconfigurationvaluecode&quot;&gt;&lt;code&gt;configurationValue&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Returns a single value for the given compound key. Falls back to &lt;code&gt;default&lt;/code&gt; if the key has no saved value.&lt;/p&gt;
&lt;div class=&quot;language-twig highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;configurationValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;theme:backoffice:colors:bo_main_color&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;#1ebea0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;language-twig highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;:root&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;py&quot;&gt;--bo-main-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;configurationValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;theme:backoffice:colors:bo_main_color&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;#1ebea0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;| &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;css&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;codeconfigurationvaluescode&quot;&gt;&lt;code&gt;configurationValues&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Returns an associative array keyed by compound key. Useful when a template needs several values at once.&lt;/p&gt;
&lt;div class=&quot;language-twig highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;colors&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;configurationValues&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
    &lt;span class=&quot;s1&quot;&gt;&apos;theme:backoffice:colors:bo_main_color&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s1&quot;&gt;&apos;theme:logos:logos:backoffice_logo_url&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%}&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:root&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;py&quot;&gt;--bo-main-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;colors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;theme:backoffice:colors:bo_main_color&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;| &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;css&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Scope context&lt;/div&gt;
&lt;p&gt;Twig functions read values in the current request’s scope context. Store-specific values are resolved automatically when a store scope is active.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;data-import&quot;&gt;Data Import&lt;/h2&gt;
&lt;p&gt;Configuration values can be bulk-imported from CSV files using the Spryker DataImport framework.&lt;/p&gt;
&lt;h3 id=&quot;csv-format&quot;&gt;CSV format&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-csv&quot;&gt;&gt;setting_key,scope,scope_identifier,value
catalog:general:display:items_per_page,global,,24
catalog:general:display:items_per_page,store,DE,48
&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setting_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Compound key. Must exist in merged YAML schema.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Must be in &lt;code&gt;ConfigurationConfig::getAvailableScopes()&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scope_identifier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Conditional&lt;/td&gt;
&lt;td&gt;Empty for &lt;code&gt;global&lt;/code&gt;, required for other scopes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Validated against schema constraints.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;running-the-import&quot;&gt;Running the import&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk cli console data:import configuration-value
docker/sdk cli console data:import configuration-value &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; path/to/custom.csv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The default CSV file is located at &lt;code&gt;data/import/configuration_value.csv&lt;/code&gt; at the project level. A module-level template is also provided.&lt;/p&gt;
&lt;h3 id=&quot;behavior&quot;&gt;Behavior&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Values are validated with the same constraints as Back Office saves.&lt;/li&gt;
&lt;li&gt;Secret settings are skipped with a warning — secrets should only be set via the UI.&lt;/li&gt;
&lt;li&gt;Duplicate rows overwrite (upsert behavior).&lt;/li&gt;
&lt;li&gt;Audit logging and Publish &amp;amp; Synchronize are triggered per value.&lt;/li&gt;
&lt;li&gt;Import runs inside the existing &lt;code&gt;ConfigurationValueWriter&lt;/code&gt; transaction, so all validation passes before any persistence.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For setup instructions, see &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/integrate-confguration-feature.html&quot;&gt;Install the Configuration Management feature&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;console-commands&quot;&gt;Console Commands&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;configuration:sync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Merges YAML schemas, generates the settings map, and detects project-level overrides. Run after any schema change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data:import configuration-value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bulk-imports configuration values from CSV.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;common-issues&quot;&gt;Common Issues&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getModuleConfig()&lt;/code&gt; always returns default&lt;/td&gt;
&lt;td&gt;Setting &lt;code&gt;storefront: false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yves/Glue can only read storefront-enabled settings. Set &lt;code&gt;storefront: true&lt;/code&gt; or use Zed Config.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getModuleConfig()&lt;/code&gt; always returns default&lt;/td&gt;
&lt;td&gt;Configuration module not installed&lt;/td&gt;
&lt;td&gt;Expected behavior. Method gracefully falls back to &lt;code&gt;$default&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Value returns &lt;code&gt;null&lt;/code&gt; despite being saved&lt;/td&gt;
&lt;td&gt;Key mismatch&lt;/td&gt;
&lt;td&gt;Compound key format is &lt;code&gt;feature:tab:group:setting&lt;/code&gt;. Verify all four segments match the YAML schema.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All values return &lt;code&gt;null&lt;/code&gt; after a deployment, but the Back Office still displays them&lt;/td&gt;
&lt;td&gt;Settings map missing in the deployed container&lt;/td&gt;
&lt;td&gt;&lt;code&gt;data/configuration/settings-map.php&lt;/code&gt; and &lt;code&gt;merged-schema.php&lt;/code&gt; are excluded from the Git repository and the Docker image, so a fresh container has no settings map and every value resolves to &lt;code&gt;null&lt;/code&gt; before decryption. The Back Office reads the stored row directly, which is why the UI and the runtime resolver disagree. Add &lt;code&gt;configuration:sync&lt;/code&gt; to the cloud install recipes. See &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/integrate-confguration-feature.html&quot;&gt;Install the Configuration Management feature&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret value empty in Yves&lt;/td&gt;
&lt;td&gt;Expected behavior&lt;/td&gt;
&lt;td&gt;Secrets are never published to storage. Access only via Zed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changes not visible after YAML edit&lt;/td&gt;
&lt;td&gt;Schema not synced&lt;/td&gt;
&lt;td&gt;Run &lt;code&gt;configuration:sync&lt;/code&gt; after YAML changes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Store-specific value not applied&lt;/td&gt;
&lt;td&gt;Missing scope context&lt;/td&gt;
&lt;td&gt;Pass &lt;code&gt;ConfigurationScopeTransfer&lt;/code&gt; in third argument or register request expander plugins. See &lt;a href=&quot;/docs/dg/dev/backend-development/configuration-management/custom-scopes.html&quot;&gt;Adding Custom Scopes&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setting visible despite &lt;code&gt;enabled: false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Schema not synced&lt;/td&gt;
&lt;td&gt;Run &lt;code&gt;configuration:sync&lt;/code&gt;. The &lt;code&gt;enabled&lt;/code&gt; flag is evaluated during sync and filtering.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Override notice on a setting&lt;/td&gt;
&lt;td&gt;Project Config class bypasses &lt;code&gt;getModuleConfig()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The project-level Config method overrides the core method without calling &lt;code&gt;getModuleConfig()&lt;/code&gt;. Refactor the method to use &lt;code&gt;getModuleConfig()&lt;/code&gt; or accept the override.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
            <pubDate>Mon, 03 Aug 2026 08:48:40 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/backend-development/configuration-management.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/backend-development/configuration-management.html</guid>
            
            
        </item>
        
        <item>
            <title>Upcoming major module releases</title>
            <description>This document lists all upcoming [major module releases](/docs/dg/dev/architecture/module-api/semantic-versioning-major-vs.-minor-vs.-patch-release.html). Major module relesases may require additional development effort during an upgrade, so we recommend planning ahead.

| MODULE | DATE | REASON FOR THE MAJOR VERSION |
| --- | --- | --- |
| ShopUi 2.0.0 | Aug 03 2026 | The frontend builder for Yves moves from the project&apos;s `frontend/` directory into the ShopUi module. Projects must point the `yves:*` npm scripts at the builder in the module, replace `frontend/settings.js` with `frontend/yves.settings.mts`, and run Node.js 24 or later. |
</description>
            <pubDate>Fri, 31 Jul 2026 12:22:38 +0000</pubDate>
            <link>https://docs.spryker.com/docs/about/all/releases/upcoming-major-module-releases.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/about/all/releases/upcoming-major-module-releases.html</guid>
            
            
        </item>
        
        <item>
            <title>Install the SSP File Management feature</title>
            <description>{% include pbc/all/install-features/latest/install-the-ssp-file-management-feature.md %} &lt;!-- To edit, see /_includes/pbc/all/install-features/latest/install-the-ssp-file-management-feature.md --&gt;
</description>
            <pubDate>Fri, 31 Jul 2026 11:58:02 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html</guid>
            
            
        </item>
        
        <item>
            <title>Configure services</title>
            <description>&lt;p&gt;This document describes how to configure services shipped by default.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Install or update the Docker SDK to the latest version:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/spryker/docker-sdk.git ./docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;service-versions&quot;&gt;Service versions&lt;/h2&gt;
&lt;p&gt;When configuring a service, you need to define its version. The Docker SDK supports the following service versions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SERVICE&lt;/th&gt;
&lt;th&gt;ENGINE&lt;/th&gt;
&lt;th&gt;VERSIONS&lt;/th&gt;
&lt;th&gt;ARM SUPPORT&lt;/th&gt;
&lt;th&gt;NOTE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;datab&lt;/td&gt;
&lt;td&gt;postgres&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mysql&lt;/td&gt;
&lt;td&gt;5.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.2&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.3&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.4&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.5&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.6&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.11&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-11.4&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-11.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;broke&lt;/td&gt;
&lt;td&gt;rabbitmq&lt;/td&gt;
&lt;td&gt;3.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;session&lt;/td&gt;
&lt;td&gt;redis&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;valkey&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key_value_store&lt;/td&gt;
&lt;td&gt;redis&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;valkey&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;search&lt;/td&gt;
&lt;td&gt;elastic&lt;/td&gt;
&lt;td&gt;5.6*&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.elastic.co/support/eol&quot;&gt;Policy and Product End of Life Dates&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.elastic.co/support/eol&quot;&gt;Policy and Product End of Life Dates&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.6&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.10&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;opensearch&lt;/td&gt;
&lt;td&gt;1.3&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html#end-of-support&quot;&gt;Support Schedule&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;scheduler&lt;/td&gt;
&lt;td&gt;jenkins&lt;/td&gt;
&lt;td&gt;2.176&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2.305&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2.324&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2.516.3&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;webdriver&lt;/td&gt;
&lt;td&gt;phantomjs&lt;/td&gt;
&lt;td&gt;latest*&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;chromedriver&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mail_catcher&lt;/td&gt;
&lt;td&gt;mailhog&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;swagger&lt;/td&gt;
&lt;td&gt;swagger-ui&lt;/td&gt;
&lt;td&gt;v3.24&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kibana&lt;/td&gt;
&lt;td&gt;kibana&lt;/td&gt;
&lt;td&gt;5.6*&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.6&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.10&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;blackfire&lt;/td&gt;
&lt;td&gt;blackfire&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;database-services&quot;&gt;Database services&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://mariadb.org/&quot;&gt;MariaDB&lt;/a&gt; is provided as a service by default. MariaDB is about 40% faster on write operations when compared, for example, to PostgreSQL.&lt;/p&gt;
&lt;p&gt;You can switch to MySQL or PostgreSQL as described in the following sections.&lt;/p&gt;
&lt;h3 id=&quot;mariadb&quot;&gt;MariaDB&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mariadb.org/&quot;&gt;MariaDB&lt;/a&gt; is a community-developed, commercially supported fork of the &lt;a href=&quot;https://dev.mysql.com/doc/&quot;&gt;MySQL&lt;/a&gt; relational database management system.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://mariadb.com/kb/en/&quot;&gt;MariaDB knowledge base&lt;/a&gt;.&lt;/p&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Default service&lt;/div&gt;
&lt;p&gt;MariaDB is provided as a service by default. You may only need to use this configuration if you are running an older version of the Docker SDK or if you’ve previously switched to another database engine.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h4 id=&quot;configure-mariadb&quot;&gt;Configure MariaDB&lt;/h4&gt;
&lt;p&gt;To switch the database service to MariaDB, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mysql&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mariadb-11.8&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:3306:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Bootstrap the docker setup, regenerate demo data, and rebuild the application:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.yml
docker/sdk clean-data
docker/sdk up &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;mysql&quot;&gt;MySQL&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/&quot;&gt;MySQL&lt;/a&gt; is an open-source relational database management system based on Structured Query Language (SQL). MySQL allows data to be stored and accessed across multiple storage engines, including InnoDB, CSV, and NDB. Also, MySQL can replicate data and partition tables for better performance and durability.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://dev.mysql.com/doc/&quot;&gt;MySQL documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;configure-mysql&quot;&gt;Configure MySQL&lt;/h4&gt;
&lt;p&gt;To switch the database engine to MySQL, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yaml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mysql&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:3306:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Bootstrap the docker setup, regenerate demo data, and rebuild the application:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.yml
docker/sdk clean-data
docker/sdk up &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;postgresql&quot;&gt;PostgreSQL&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.postgresql.org/&quot;&gt;PostgreSQL&lt;/a&gt; is an open-source object-relational database system that uses and extends the SQL language combined with many features that safely store and scale the most complicated data workloads.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://www.postgresql.org/docs/&quot;&gt;PostgreSQL documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;configure-postgresql&quot;&gt;Configure PostgreSQL&lt;/h4&gt;
&lt;p&gt;To switch the database engine to PostgreSQL, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;postgres&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;17&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:5432:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Bootstrap the docker setup, regenerate demo data, and rebuild the application:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.yml
docker/sdk clean-data
docker/sdk up &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;elasticsearch&quot;&gt;Elasticsearch&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.elastic.co/elasticsearch/&quot;&gt;Elasticsearch&lt;/a&gt; is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.&lt;/p&gt;
&lt;p&gt;For more information, see the following documents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/pbc/all/search/latest/base-shop/tutorials-and-howtos/configure-elasticsearch.html&quot;&gt;Configure Elasticsearch&lt;/a&gt;—describes ElastciSearch configuration in Spryker.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html&quot;&gt;Elasticsearch documentation&lt;/a&gt;—provides detailed information about Elasticsearch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;configure-elasticsearch&quot;&gt;Configure Elasticsearch&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to open the port used for accessing Elasticsearch:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;elastic&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:9200&lt;/span&gt;
                &lt;span class=&quot;s&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;kibana-ui&quot;&gt;Kibana UI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.elastic.co/kibana&quot;&gt;Kibana&lt;/a&gt; is an open-source analytics and visualization platform designed to work with Elasticsearch. You use Kibana to search, view, and interact with data stored in Elasticsearch indices. You can easily perform advanced data analysis and visualize your data in a variety of charts, tables, and maps.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href=&quot;https://www.elastic.co/guide/en/kibana/current/index.html&quot;&gt;Kibana documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Docker SDK, Kibana UI is provided as a service by default.&lt;/p&gt;
&lt;h3 id=&quot;configure-kibana-ui&quot;&gt;Configure Kibana UI&lt;/h3&gt;
&lt;p&gt;To configure an endpoint for Kibana UI, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;kibana&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kibana&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Add the endpoint to the &lt;code&gt;hosts&lt;/code&gt; file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1 {custom_endpoint}&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;rabbitmq&quot;&gt;RabbitMQ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt; is a messaging broker—an intermediary for messaging. It gives your applications a common platform to send and receive messages and your messages a safe place to live until received.&lt;/p&gt;
&lt;h3 id=&quot;configure-rabbitmq&quot;&gt;Configure RabbitMQ&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to open the port used for accessing RabbitMQ:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;broker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:5672:&lt;/span&gt;
                &lt;span class=&quot;s&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tcp&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;api.queue.spryker.local&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;swagger-ui&quot;&gt;Swagger UI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://swagger.io/tools/swagger-ui/&quot;&gt;Swagger UI&lt;/a&gt; allows anyone—be it your development team or your end consumers—to visualize and interact with the API’s resources without having any of the implementation logic in place. It’s automatically generated from your OpenAPI (formerly known as Swagger) Specification, with the visual documentation making it easy for backend implementation and client-side consumption.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://swagger.io/docs/open-source-tools/swagger-ui/usage/installation/&quot;&gt;Swagger UI documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Docker SDK, Swagger UI is provided as a service by default.&lt;/p&gt;
&lt;h3 id=&quot;rest-api-reference-in-spryker&quot;&gt;Rest API Reference in Spryker&lt;/h3&gt;
&lt;p&gt;Spryker provides the basic functionality to generate &lt;a href=&quot;https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md&quot;&gt;OpenApi schema specification&lt;/a&gt; for REST API endpoints. This document provides an overview of REST API endpoints. For each endpoint, you can find the URL, REST request parameters as well as the appropriate request and response data formats.&lt;/p&gt;
&lt;h3 id=&quot;configure-swagger-ui&quot;&gt;Configure Swagger UI&lt;/h3&gt;
&lt;p&gt;To configure an endpoint for Swagger UI, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;swagger&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;swagger-ui&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Add the endpoint to the &lt;code&gt;hosts&lt;/code&gt; file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1 {custom_endpoint}&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;redis&quot;&gt;Redis&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://redis.io&quot;&gt;Redis&lt;/a&gt; is an open-source (BSD licensed), in-memory data structure store used as a database, cache, and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries, and streams.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href=&quot;https://redis.io/documentation&quot;&gt;Redis documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;configure-redis&quot;&gt;Configure Redis&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to open the port used for accessing Redis:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;key_value_store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;redis&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:16379:&lt;/span&gt;
                &lt;span class=&quot;s&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;redis-gui&quot;&gt;Redis GUI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://joeferner.github.io/redis-commander/&quot;&gt;Redis Commander&lt;/a&gt; is a web management tool that provides a graphical user interface to access Redis databases and perform basic operations like view keys as a tree, view CRUD keys, or import and export databases.&lt;/p&gt;
&lt;h3 id=&quot;configure-redis-gui&quot;&gt;Configure Redis GUI&lt;/h3&gt;
&lt;p&gt;To configure an endpoint for Redis Commander, follow the steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;redis-gui&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;redis-commander&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;//redis-commander.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Adjust hosts file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1 {custom_endpoint}&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;mailhog&quot;&gt;MailHog&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/mailhog/MailHog&quot;&gt;MailHog&lt;/a&gt; is a mail catcher service that is used with Spryker in Docker for Demo and Development environments. Developers use this email testing tool to catch and show emails locally without an SMTP (Simple Mail Transfer Protocol) server.&lt;/p&gt;
&lt;p&gt;With the MailHog service, developers can do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure an application to use MailHog for SMTP delivery.&lt;/li&gt;
&lt;li&gt;View messages in the web UI or retrieve them via JSON API.&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;By default, the following applies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://mail.demo-spryker.com/&lt;/code&gt; is used to see incoming emails.&lt;/li&gt;
&lt;li&gt;Login is not required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;configure-mailhog&quot;&gt;Configure MailHog&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to specify a custom endpoint:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;mail_catcher&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mailhog&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
                          &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;blackfire&quot;&gt;Blackfire&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blackfire.io/&quot;&gt;Blackfire&lt;/a&gt; is a tool used to profile, test, debug, and optimize the performance of PHP applications. It gathers data about consumed server resources like memory, CPU time, and I/O operations. The data and configuration can be checked through the Blackfire web interface.&lt;/p&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;While we recommend Blackfire for PHP code profiling, &lt;em&gt;Blackfire is not compatible with OpenTelemetry (OTel)&lt;/em&gt;. If OTel resolves this compatibility in future, we will inform you. Meantime, for profiling needs compatible with OTel, we suggest using tools like &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/configure-services.html#tideways&quot;&gt;Tideways&lt;/a&gt;, which can integrate seamlessly with your OTel-based monitoring stack.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;configure-blackfire&quot;&gt;Configure Blackfire&lt;/h3&gt;
&lt;p&gt;To enable Blackfire, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;code&gt;image&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; to enable the Blackfire PHP extension:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Use the same tag you had in `image`&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to configure the Blackfire client:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;server-id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;server_id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;server-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;server_token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;client-id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;client_id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;client-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;client-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&quot;alternative-configuration&quot;&gt;Alternative configuration&lt;/h4&gt;
&lt;p&gt;Use the following configuration if you are going to change server or client details often or if you don’t want to define them in your deploy file.&lt;/p&gt;
&lt;p&gt;To enable Blackfire, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;code&gt;image&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; to enable the Blackfire PHP extension:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Use the same tag you had in `image`&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;In the &lt;code&gt;services&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; to enable the Blackfire service:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Pass Blackfire client details:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;BLACKFIRE_CLIENT_ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;client_id&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;BLACKFIRE_CLIENT_TOKEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;client-token&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; docker/sdk cli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Pass Blackfire server details:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;BLACKFIRE_SERVER_ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;client-token&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;BLACKFIRE_SERVER_TOKEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;server_token&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; docker/sdk up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;You can pass the server details only with the &lt;code&gt;docker/sdk up&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;It is not obligatory to pass all the details as environment variables or define all the details in the deploy file. You can pass the details in any combination.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;new-relic&quot;&gt;New Relic&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://newrelic.com/&quot;&gt;New Relic&lt;/a&gt; is a tool used to track the performance of services and the environment to quickly find and fix issues.&lt;/p&gt;
&lt;p&gt;The solution consists of a client and a server. The client is used to collect data about applications in an environment and send it to the server for further analysis and presentation. The server is used to aggregate, analyse, and present the data.&lt;/p&gt;
&lt;h3 id=&quot;prerequisites-1&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.newrelic.com/docs/apis/intro-apis/new-relic-api-keys/&quot;&gt;New Relic license key&lt;/a&gt;: &lt;code&gt;NEWRELIC_LICENSE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NewRelic account ID: &lt;code&gt;NEWRELIC_ACCOUNT_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NewRelic insights key: &lt;code&gt;NEWRELIC_INSIGHTS_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The New Relic module.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;install-the-new-relic-module&quot;&gt;Install the New Relic module&lt;/h3&gt;
&lt;p&gt;While most environments come with New Relic already available, you may need to add the module to your project. Add the module to your &lt;code&gt;composer.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;composer require spryker-eco/new-relic
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;sccos-configure-new-relic&quot;&gt;SCCOS: Configure New Relic&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; in the &lt;code&gt;image:&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;- newrelic&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;NEWRELIC_CUSTOM_APP_ENVIRONMENT&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ENVIRONMENT_VALUE_HERE&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# staging, dev, production, uat&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Push and deploy the changes using one of the following guides:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-staging-environment.html&quot;&gt;Deploying in a staging environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-production-environment.html&quot;&gt;Deploying in a production environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Submit an infrastructure change request via the &lt;a href=&quot;/docs/about/all/support/using-the-support-portal.html&quot;&gt;Support Portal&lt;/a&gt;. Set up a Change Request for existing Parameter Store values and request your values to be set for the following parameters:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;NEWRELIC_LICENSE&lt;/li&gt;
&lt;li&gt;NEWRELIC_ACCOUNT_ID&lt;/li&gt;
&lt;li&gt;NEWRELIC_INSIGHTS_KEY&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once New Relic is enabled, in the New Relic dashboard, you may see either &lt;code&gt;company-staging-newrelic-app&lt;/code&gt; or &lt;code&gt;YVES-DE (docker.dev)&lt;/code&gt;. New Relic displays these APM names by the application name setup in the configuration files.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/the-docker-sdk/configure-services.md/new-relic-apms.png&quot; alt=&quot;screenshot&quot; /&gt;&lt;/p&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;If you update the name of an application, &lt;a href=&quot;/docs/about/all/support/using-the-support-portal.html&quot;&gt;contact support&lt;/a&gt; to update the changes in your APM.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;local-configure-new-relic&quot;&gt;Local: Configure New Relic&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;docker&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;newrelic&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;license&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;new_relic_license&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;      	&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;distributed-tracing&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;In the &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;image&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;- newrelic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;configure-distributed-tracing&quot;&gt;Configure distributed tracing&lt;/h3&gt;
&lt;p&gt;Distributed tracing follows a single request across all the services it touches and reports each unit of work as a span. Together with transaction traces, which capture the internal breakdown of a single transaction, it shows you where request time is spent and which service or code path causes a slowdown.&lt;/p&gt;
&lt;p&gt;The New Relic PHP agent reads its distributed tracing configuration from environment variables, which the &lt;code&gt;spryker/php&lt;/code&gt; image renders into &lt;code&gt;newrelic.ini&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;prerequisites-2&quot;&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;newrelic&lt;/code&gt; PHP extension is enabled in &lt;code&gt;deploy.*.yml&lt;/code&gt;, and New Relic is configured as described in &lt;a href=&quot;#sccos-configure-new-relic&quot;&gt;SCCOS: Configure New Relic&lt;/a&gt; or &lt;a href=&quot;#local-configure-new-relic&quot;&gt;Local: Configure New Relic&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;spryker/php&lt;/code&gt; image includes the New Relic PHP agent 9.21.0 or later. For information about the agent version in your image, see &lt;a href=&quot;/docs/about/all/releases/image-releases/spryker-php/release-notes-spryker-php.html&quot;&gt;Release notes for spryker-php image&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;distributed-tracing-environment-variables&quot;&gt;Distributed tracing environment variables&lt;/h4&gt;
&lt;p&gt;Distributed tracing and transaction traces are controlled with the following environment variables:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;VARIABLE&lt;/th&gt;
&lt;th&gt;DESCRIPTION&lt;/th&gt;
&lt;th&gt;POSSIBLE VALUES&lt;/th&gt;
&lt;th&gt;DEFAULT IN THE IMAGE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_DISTRIBUTED_TRACING_ENABLED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if distributed tracing is active. When disabled, requests are not linked across services and no trace context is propagated.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_SPAN_EVENTS_ENABLED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if span events are reported. Distributed tracing requires span events, so keep this enabled whenever distributed tracing is enabled.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_SPAN_EVENTS_MAX_SAMPLES_STORED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines the maximum number of span events reported per harvest cycle. &lt;code&gt;0&lt;/code&gt; applies the agent default of &lt;code&gt;2000&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt; to &lt;code&gt;10000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_TRANSACTION_TRACER_ENABLED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if the transaction tracer is active. The transaction tracer records detailed traces of individual transactions.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_TRANSACTION_TRACER_THRESHOLD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines the response time above which a transaction becomes eligible for tracing. &lt;code&gt;apdex_f&lt;/code&gt; applies four times the apdex_t value of the application. A duration without a unit is interpreted as milliseconds.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apdex_f&lt;/code&gt;, or a duration such as &lt;code&gt;500&lt;/code&gt;, &lt;code&gt;200ms&lt;/code&gt;, or &lt;code&gt;1s250ms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_TRANSACTION_TRACER_STACK_TRACE_THRESHOLD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines the duration above which the agent records a full PHP stack trace for a segment. A value without a unit is interpreted as milliseconds.&lt;/td&gt;
&lt;td&gt;A duration such as &lt;code&gt;500&lt;/code&gt; or &lt;code&gt;500ms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_TRANSACTION_TRACER_MAX_SEGMENTS_CLI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines the maximum number of segments the agent records for CLI transactions, such as console commands and queue workers. Lower this value if long-running CLI processes consume too much memory.&lt;/td&gt;
&lt;td&gt;A positive integer, for example, &lt;code&gt;100000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_DISTRIBUTED_TRACING_EXCLUDE_NEWRELIC_HEADER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if the proprietary &lt;code&gt;newrelic&lt;/code&gt; header is excluded from outbound requests, so that only W3C Trace Context headers are sent. Set it to &lt;code&gt;1&lt;/code&gt; when you trace across services that do not support the New Relic header.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Set every variable explicitly&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;spryker/php&lt;/code&gt; image overrides several New Relic agent defaults, and variables marked as &lt;code&gt;Not set&lt;/code&gt; render as empty values in &lt;code&gt;newrelic.ini&lt;/code&gt;. Because of this, the defaults of the New Relic PHP agent do not necessarily apply to your environment. Set every variable you rely on explicitly instead of depending on a default.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;NEWRELIC_TRANSACTION_TRACER_THRESHOLD&lt;/code&gt; default of &lt;code&gt;0&lt;/code&gt; makes every transaction eligible for tracing. In production, set an explicit threshold, such as &lt;code&gt;apdex_f&lt;/code&gt; or &lt;code&gt;500&lt;/code&gt;, to limit the volume of transaction traces.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h4 id=&quot;enable-distributed-tracing&quot;&gt;Enable distributed tracing&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;image&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:8.4&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;newrelic&lt;/span&gt;

    &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_DISTRIBUTED_TRACING_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_SPAN_EVENTS_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_SPAN_EVENTS_MAX_SAMPLES_STORED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10000&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_TRANSACTION_TRACER_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_TRANSACTION_TRACER_THRESHOLD&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;apdex_f&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_TRANSACTION_TRACER_STACK_TRACE_THRESHOLD&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;500&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_TRANSACTION_TRACER_MAX_SEGMENTS_CLI&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;100000&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_DISTRIBUTED_TRACING_EXCLUDE_NEWRELIC_HEADER&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Adjust the values to the ones that suit your environment based on the available options in the preceding table.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Apply the changes:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Locally, rebuild the environment:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.dev.yml &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker/sdk up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;In Spryker Cloud Commerce OS, push and deploy the changes using one of the following guides:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-staging-environment.html&quot;&gt;Deploying in a staging environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-production-environment.html&quot;&gt;Deploying in a production environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Verify the setup. In New Relic, open your APM entity and check that the &lt;strong&gt;Distributed tracing&lt;/strong&gt; page lists recent traces of your application.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;configure-new-relic-application-logging&quot;&gt;Configure New Relic application logging&lt;/h3&gt;
&lt;p&gt;New Relic application logging, also known as &lt;em&gt;logs in context&lt;/em&gt;, lets the New Relic PHP agent collect logging metrics and forward application log records directly to New Relic. Because the agent adds correlation metadata to every forwarded record, you can switch between a log line, the transaction that produced it, and the related error or trace without switching tools.&lt;/p&gt;
&lt;p&gt;Spryker applications write logs with &lt;a href=&quot;https://github.com/Seldaek/monolog&quot;&gt;Monolog&lt;/a&gt;, which the New Relic PHP agent instruments automatically. You do not need to add a log handler or change application code. The logs passed around Monolog, for example directly to stdout/stderr are not captured by the agent.&lt;/p&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Distributed tracing is required&lt;/div&gt;
&lt;p&gt;Application logging relies on the trace and span identifiers that the agent generates for each request. You must enable distributed tracing for logs in context to work. Set &lt;code&gt;NEWRELIC_DISTRIBUTED_TRACING_ENABLED&lt;/code&gt; and &lt;code&gt;NEWRELIC_SPAN_EVENTS_ENABLED&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; as described in &lt;a href=&quot;#configure-distributed-tracing&quot;&gt;Configure distributed tracing&lt;/a&gt;. Without distributed tracing, forwarded log records cannot be correlated with transactions, errors, and traces.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;Application logging is an addition to your existing logging setup, not a replacement for it. Log records are still written to your regular log destination. In Spryker Cloud Commerce OS, that destination is Amazon CloudWatch. For more details, see &lt;a href=&quot;/docs/ca/dev/monitoring/working-with-logs.html&quot;&gt;Working with logs&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h4 id=&quot;prerequisites-3&quot;&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;newrelic&lt;/code&gt; PHP extension is enabled in &lt;code&gt;deploy.*.yml&lt;/code&gt;, and New Relic is configured as described in &lt;a href=&quot;#sccos-configure-new-relic&quot;&gt;SCCOS: Configure New Relic&lt;/a&gt; or &lt;a href=&quot;#local-configure-new-relic&quot;&gt;Local: Configure New Relic&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Distributed tracing is enabled as described in &lt;a href=&quot;#configure-distributed-tracing&quot;&gt;Configure distributed tracing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;spryker/php&lt;/code&gt; image includes the New Relic PHP agent 10.3.0 or later. For information about the agent version in your image, see &lt;a href=&quot;/docs/about/all/releases/image-releases/spryker-php/release-notes-spryker-php.html&quot;&gt;Release notes for spryker-php image&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;application-logging-environment-variables&quot;&gt;Application logging environment variables&lt;/h4&gt;
&lt;p&gt;Application logging is controlled with the following environment variables:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;VARIABLE&lt;/th&gt;
&lt;th&gt;DESCRIPTION&lt;/th&gt;
&lt;th&gt;POSSIBLE VALUES&lt;/th&gt;
&lt;th&gt;DEFAULT IN THE IMAGE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_APPLICATION_LOGGING_ENABLED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if the logs in context feature is active. When disabled, the other application logging variables have no effect.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_APPLICATION_LOGGING_METRICS_ENABLED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if logging metrics, such as the number of log records per severity level, are collected and displayed on the APM summary page.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_APPLICATION_LOGGING_FORWARDING_ENABLED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines if log records are forwarded to New Relic together with linking metadata.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NEWRELIC_APPLICATION_LOGGING_FORWARDING_LOG_LEVEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines the lowest severity level to forward. The agent forwards records of the specified level and all higher severity levels.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EMERGENCY&lt;/code&gt;, &lt;code&gt;ALERT&lt;/code&gt;, &lt;code&gt;CRITICAL&lt;/code&gt;, &lt;code&gt;ERROR&lt;/code&gt;, &lt;code&gt;WARNING&lt;/code&gt;, &lt;code&gt;NOTICE&lt;/code&gt;, &lt;code&gt;INFO&lt;/code&gt;, &lt;code&gt;DEBUG&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Data ingest volume&lt;/div&gt;
&lt;p&gt;Log forwarding increases the amount of data ingested by New Relic, which can affect your New Relic costs. Lower severity levels, especially &lt;code&gt;INFO&lt;/code&gt; and &lt;code&gt;DEBUG&lt;/code&gt;, produce a significantly higher volume than &lt;code&gt;WARNING&lt;/code&gt; and above. Start with &lt;code&gt;WARNING&lt;/code&gt; and lower the level only for the period during which you need the additional detail.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h4 id=&quot;enable-application-logging&quot;&gt;Enable application logging&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;image&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:8.4&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;newrelic&lt;/span&gt;

    &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_DISTRIBUTED_TRACING_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_SPAN_EVENTS_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_SPAN_EVENTS_MAX_SAMPLES_STORED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10000&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_TRANSACTION_TRACER_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_APPLICATION_LOGGING_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_APPLICATION_LOGGING_METRICS_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_APPLICATION_LOGGING_FORWARDING_ENABLED&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;NEWRELIC_APPLICATION_LOGGING_FORWARDING_LOG_LEVEL&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;WARNING&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Adjust the values to the ones that suit your environment based on the available options in the preceding table.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Apply the changes:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Locally, rebuild the environment:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.dev.yml &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker/sdk up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;In Spryker Cloud Commerce OS, push and deploy the changes using one of the following guides:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-staging-environment.html&quot;&gt;Deploying in a staging environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-production-environment.html&quot;&gt;Deploying in a production environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Verify the setup. In New Relic, open your APM entity and check the following:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Logs&lt;/strong&gt; tab contains recent log records from the application.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Summary&lt;/strong&gt; page, the &lt;strong&gt;Log&lt;/strong&gt; chart displays log record counts per severity level.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;disable-application-logging&quot;&gt;Disable application logging&lt;/h4&gt;
&lt;p&gt;To stop collecting and forwarding logs, set &lt;code&gt;NEWRELIC_APPLICATION_LOGGING_ENABLED&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt; and deploy the change:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;NEWRELIC_APPLICATION_LOGGING_ENABLED&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To keep logging metrics on the APM summary page but stop forwarding log records, keep &lt;code&gt;NEWRELIC_APPLICATION_LOGGING_ENABLED&lt;/code&gt; set to &lt;code&gt;1&lt;/code&gt; and set &lt;code&gt;NEWRELIC_APPLICATION_LOGGING_FORWARDING_ENABLED&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For more details about the underlying agent settings, see &lt;a href=&quot;https://docs.newrelic.com/docs/apm/agents/php-agent/configuration/php-agent-configuration/&quot;&gt;PHP agent configuration&lt;/a&gt; in the New Relic documentation.&lt;/p&gt;
&lt;h3 id=&quot;configure-yves-zed-and-glue-as-separate-apms&quot;&gt;Configure YVES, ZED, and GLUE as separate APMs&lt;/h3&gt;
&lt;p&gt;By default, in the New Relic dashboard, the APM is displayed as &lt;code&gt;company-staging-newrelic-app&lt;/code&gt;. To improve visibility, you may want to configure each application as a separate APM. For example, &lt;code&gt;YVES-DE (docker.dev)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To do it, add the &lt;code&gt;NewRelicMonitoringExtensionPlugin&lt;/code&gt; by creating the class &lt;code&gt;src/Pyz/Service/Monitoring/MonitoringDependencyProvider.php&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;declare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strict_types&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;cd&quot;&gt;/**
 * This file is part of the Spryker Commerce OS.
 * For full license information,  view the LICENSE file that was distributed with this source code.
 */&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Service\Monitoring&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Service\Monitoring\MonitoringDependencyProvider&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerMonitoringDependencyProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Pyz\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MonitoringDependencyProvider&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerMonitoringDependencyProvider&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cd&quot;&gt;/**
     * @return \Spryker\Service\MonitoringExtension\Dependency\Plugin\MonitoringExtensionPluginInterface[]
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getMonitoringExtensions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;array&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NewRelicMonitoringExtensionPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Next, create the class &lt;code&gt;src/Pyz/Service/NewRelic/Plugin/NewRelicMonitoringExtensionPlugin.php&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;cd&quot;&gt;/**
 * MIT License
 * For full license information,  view the LICENSE file that was distributed with this source code.
 */&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Service\NewRelic\Plugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerEco\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerNewRelicMonitoringExtensionPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NewRelicMonitoringExtensionPlugin&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerNewRelicMonitoringExtensionPlugin&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cd&quot;&gt;/**
     * @param string|null $application
     * @param string|null $store
     * @param string|null $environment
     *
     * @return void
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;setApplicationName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;?string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$application&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;?string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;?string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Custom application environment name, or use $environment as fallback&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;getenv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;NEWRELIC_CUSTOM_APP_ENVIRONMENT&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;application&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$application&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;-&apos;&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$store&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos; (&apos;&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;)&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;newrelic_set_appname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Some builds have the Monitoring service built into the Yves application. If &lt;code&gt;src/Pyz/Service/Monitoring/MonitoringDependencyProvider.php&lt;/code&gt; does not exist, you may want to check &lt;code&gt;src/Pyz/Yves/Monitoring/&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the class is missing from the Monitoring service, create it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;p&gt;With &lt;code&gt;new \SprykerEco\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin()&lt;/code&gt; being returned with the &lt;code&gt;getMonitoringExtensions()&lt;/code&gt; function, the Monitoring class includes New Relic. Now applications are displayed as separate APMs, and an appropriate endpoint or class is displayed with each transaction.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/the-docker-sdk/configure-services.md/new-relic-transactions.png&quot; alt=&quot;screenshot&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;track-deployments&quot;&gt;Track deployments&lt;/h3&gt;
&lt;p&gt;To notify New Relic about new deployments, include the console command &lt;code&gt;\SprykerEco\Zed\NewRelic\Communication\Console\RecordDeploymentConsole&lt;/code&gt; in &lt;code&gt;\Pyz\Zed\Console\ConsoleDependencyProvider&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Zed\Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerEco\Zed\NewRelic\Communication\Console\RecordDeploymentConsole&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ConsoleDependencyProvider&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerConsoleDependencyProvider&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getConsoleCommands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Container&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;array&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$commands&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	    &lt;span class=&quot;mf&quot;&gt;....&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;RecordDeploymentConsole&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;mf&quot;&gt;....&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$commands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;....&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;From now on you can use the record deployment functionality built-in in the console command, as follows:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vendor/bin/console newrelic:record-deployment &amp;lt;AppName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;where &lt;code&gt;AppName&lt;/code&gt; corresponds to the preconfigured in NewRelicEnv::NEW_RELIC_APPLICATION_ID_ARRAY.
For more details, see &lt;a href=&quot;/docs/scos/dev/module-migration-guides/migration-guide-monitoring.html&quot;&gt;Upgrade the Monitoring module&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;webdriver&quot;&gt;Webdriver&lt;/h2&gt;
&lt;p&gt;PhantomJS is provided as a webdriver service by default, but you can switch to ChromeDriver as described below.&lt;/p&gt;
&lt;h3 id=&quot;chromedriver&quot;&gt;ChromeDriver&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://chromedriver.chromium.org/&quot;&gt;ChromeDriver&lt;/a&gt; is a thin wrapper on WebDriver and a &lt;a href=&quot;https://chromedriver.chromium.org/&quot;&gt;Chromium&lt;/a&gt; headless browser. It is used for automating web page interaction, JavaScript execution, and other testing-related activities. It provides full-control API to make end-to-end testing flexible and comfortable.&lt;/p&gt;
&lt;h4 id=&quot;configure-chromedriver&quot;&gt;Configure ChromeDriver&lt;/h4&gt;
&lt;p&gt;To enable Chromedriver, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;webdriver&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;chromedriver&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;phantomjs&quot;&gt;PhantomJS&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://phantomjs.org/&quot;&gt;PhantomJS&lt;/a&gt; is a headless browser for automating web page interaction. It ships with a WebDriver based on &lt;a href=&quot;https://www.selenium.dev/&quot;&gt;Selenium&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;configure-phantomjs&quot;&gt;Configure PhantomJS&lt;/h4&gt;
&lt;p&gt;To enable PhantomJS, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;webdriver&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;phantomjs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;dashboard&quot;&gt;Dashboard&lt;/h2&gt;
&lt;p&gt;Dashboard is a tool that helps to monitor logs in real time. You can monitor logs in all or a particular container.&lt;/p&gt;
&lt;h3 id=&quot;configure-dashboard&quot;&gt;Configure dashboard&lt;/h3&gt;
&lt;p&gt;To configure Dashboard, in the &lt;code&gt;services&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;dashboard&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;dashboard&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;tideways&quot;&gt;Tideways&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://tideways.com/&quot;&gt;Tideways&lt;/a&gt; is an application profiler used for testing and debugging. Its main functions are profiling, monitoring, and exception tracking.&lt;/p&gt;
&lt;h3 id=&quot;configure-tideways&quot;&gt;Configure Tideways&lt;/h3&gt;
&lt;p&gt;To configure Tideways, do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tideways&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;apikey&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tideways_api_key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tideways&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;environment-name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tideways_environment_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;cli-enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;true|false&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;In the &lt;code&gt;image&lt;/code&gt; section of &lt;code&gt;deploy.*.yml&lt;/code&gt;, add Tideways to the list of enabled extensions:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# the image tag was previously used in `image`&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tideways&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
            <pubDate>Thu, 30 Jul 2026 16:52:11 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/integrate-and-configure/configure-services.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/integrate-and-configure/configure-services.html</guid>
            
            
        </item>
        
        <item>
            <title>Monitoring</title>
            <description>Effective monitoring is crucial for maintaining the health and performance of your Spryker applications. This page provides access to resources and integrations that enable comprehensive monitoring through logs and application performance metrics.

## Application Performance Monitoring

Application Performance Monitoring (APM) provides near real-time insights into the performance of your applications, helping you quickly identify and resolve issues.


### Spryker Monitoring based on OpenTelemetry

Integrate Spryker monitoring data into your preferred APM tool using OpenTelemetry for flexible and comprehensive application performance monitoring. For more details, see [Spryker Monitoring Integration](/docs/ca/dev/monitoring/spryker-monitoring-integration.html).

### New Relic APM

Use New Relic&apos;s powerful APM features to monitor and troubleshoot your applications. For more details, see [New Relic](/docs/dg/dev/integrate-and-configure/configure-services.html#new-relic).

You can also forward application log records to New Relic and correlate them with transactions, errors, and traces. For more details, see [Configure New Relic application logging](/docs/dg/dev/integrate-and-configure/configure-services.html#configure-new-relic-application-logging).

## Logs with CloudWatch

CloudWatch offers robust logging capabilities, allowing you to track, store, and analyze logs from your applications and services. For more information on CloucWatch logs, see [Working with Logs](/docs/ca/dev/monitoring/working-with-logs.html).

## Monitoring issues and informing about alerts

Spryker applications are monitored 24/7 by a dedicated team. To learn how monitoring works and what is monitored, see [Monitoring issues and informing about alerts](/docs/ca/dev/monitoring/monitoring-issues-and-informing-about-alerts.html).
</description>
            <pubDate>Thu, 30 Jul 2026 14:51:41 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/monitoring/monitoring.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/monitoring/monitoring.html</guid>
            
            
        </item>
        
        <item>
            <title>Deploy file reference</title>
            <description>&lt;p&gt;This reference page describes version 1 of the Deploy file format. This is the newest version.&lt;/p&gt;
&lt;div class=&quot;bg-section&quot;&gt;
&lt;h2&gt; Glossary&lt;/h2&gt;
&lt;dl&gt;
 &lt;dt&gt;Deploy file&lt;/dt&gt;
 &lt;dd&gt;A YAML file defining Spryker infrastructure and services for Spryker tools used to deploy Spryker applications in different environments.&lt;/dd&gt;
 &lt;dt&gt;Region&lt;/dt&gt;
 &lt;dd&gt;Defines one or more isolated instances of Spryker applications that have only one persistent database to work with; limits the visibility of a project&apos;s &lt;i&gt;Stores&lt;/i&gt; to operate only with the &lt;i&gt;Stores&lt;/i&gt; that belong to a &lt;i&gt;Region&lt;/i&gt;; refers to geographical terms like data centers, regions and continents in the real world.&lt;/dd&gt;
 &lt;dt&gt;Group&lt;/dt&gt;
 &lt;dd&gt;Defines a group of Spryker applications within a &lt;i&gt;Region&lt;/i&gt; that is scaled separately from other groups; can be assumed as an auto scaling group in the Cloud.&lt;/dd&gt;
 &lt;dt&gt;Store&lt;/dt&gt;
 &lt;dd&gt;A store related context a request is processed in.&lt;/dd&gt;
&lt;!-- vale off --&gt;
&lt;dt&gt;Application&lt;/dt&gt;
&lt;dd&gt;A Spryker application, like Backoffice(Zed), Backend-Gateway, Yves, GlueStorefront(Glue), GlueBackend or MerchantPortal.&lt;/dd&gt;
&lt;!-- vale on --&gt;
 &lt;dt&gt;Service&lt;/dt&gt;
 &lt;dd&gt;An external storage or utility service. Represents service type and configuration. The configuration can be defined on different levels: project-wide, region-wide, store-specific or endpoint-specific with limitations based on the service type.&lt;/dd&gt;
 &lt;dt&gt;Endpoint&lt;/dt&gt;
 &lt;dd&gt;A point of access to &lt;i&gt;Application&lt;/i&gt; or &lt;i&gt;Service&lt;/i&gt;. The key format is &lt;code&gt;domain[:port]&lt;/code&gt;. By default, the port for HTTP endpoints is 80 . Port is mandatory for TCP endpoints.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;h2 id=&quot;deploy-file-structure&quot;&gt;Deploy file structure&lt;/h2&gt;
&lt;p&gt;The topics below are organized alphabetically for top-level keys and sub-level keys to describe the hierarchy.&lt;/p&gt;
&lt;p&gt;You can use the extended YAML syntax according to &lt;a href=&quot;https://yaml.org/spec/1.2/spec.html&quot;&gt;YAML™ Version 1.2&lt;/a&gt;.
Find B2B and B2C deploy file examples for &lt;a href=&quot;/docs/dg/dev/set-up-spryker-locally/install-spryker/install/choose-an-installation-mode.html#development-mode&quot;&gt;development&lt;/a&gt; and &lt;a href=&quot;/docs/dg/dev/set-up-spryker-locally/install-spryker/install/choose-an-installation-mode.html#demo-mode&quot;&gt;demo&lt;/a&gt; environments in the table:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DEVELOPMENT MODE&lt;/th&gt;
&lt;th&gt;DEMO MODE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/spryker-shop/b2c-demo-shop/blob/master/deploy.dev.yml&quot;&gt;B2C Demo Shop deploy file&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/spryker-shop/b2c-demo-shop/blob/master/deploy.yml&quot;&gt;B2C Demo Shop deploy file&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/spryker-shop/b2b-demo-shop/blob/master/deploy.dev.yml&quot;&gt;B2B Demo Shop deploy file&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/spryker-shop/b2b-demo-shop/blob/master/deploy.yml&quot;&gt;B2B Demo Shop deploy file&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;!-- markdownlint-disable --&gt;
&lt;h3 id=&quot;version&quot;&gt;version:&lt;/h3&gt;
&lt;p&gt;Defines the version of the Deploy file format.&lt;/p&gt;
&lt;p&gt;This reference page describes the Deploy file format for versions 1.*.&lt;/p&gt;
&lt;p&gt;This variable is optional. If not specified, the default value applies: &lt;code&gt;version: &amp;quot;0.1&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker-demo&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;namespace&quot;&gt;namespace:&lt;/h3&gt;
&lt;p&gt;Defines the namespace to separate different deployments in a single environment.&lt;/p&gt;
&lt;p&gt;For example, Docker images, containers and volume names start with a &lt;code&gt;namespace:&lt;/code&gt; to avoid intersections between different deployments on a single host machine.&lt;/p&gt;
&lt;p&gt;This variable is optional. If not specified, the default value applies: &lt;code&gt;namespace: spryker&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker-demo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;tag&quot;&gt;tag:&lt;/h3&gt;
&lt;p&gt;Defines a tag to separate different boots for a single deployment.&lt;/p&gt;
&lt;p&gt;By default, the tag is a randomly generated, unique value.&lt;/p&gt;
&lt;p&gt;For example, Docker images and volumes are tagged with a &lt;code&gt;tag:&lt;/code&gt; to avoid intersections between different boots for a single deployment on a single host machine. The tag can be set directly in the deploy file to ensure that all the boots of a deployment run with the same images and volumes.&lt;/p&gt;
&lt;p&gt;This variable is optional. If not specified, the default value applies: &lt;code&gt;tag: &apos;1.0&apos;&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;1.0&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;custom-one&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;environment&quot;&gt;environment:&lt;/h3&gt;
&lt;p&gt;Defines the environment name for Spryker applications mainly to point to specific configuration files, namely &lt;code&gt;config/Shared/config-default_{environment_name}_{store}.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;APPLICATION_ENV&lt;/code&gt; environment variable is set for all the corresponding Spryker applications.&lt;/p&gt;
&lt;p&gt;This variable is optional. If not specified, the default value applies: &lt;code&gt;environment: &apos;docker&apos;&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;docker&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;environment-configuration-secrets&quot;&gt;environment-configuration: secrets:&lt;/h3&gt;
&lt;p&gt;Defines secrets and their configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: secrets: name:&lt;/code&gt;—secret’s name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: secrets: grant:&lt;/code&gt;—users’ permissions. &lt;code&gt;limited&lt;/code&gt; provides read while &lt;code&gt;public&lt;/code&gt; provides read and write permissions. The default one is &lt;code&gt;limited&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: secrets: bucket:&lt;/code&gt;—defines what the secret is used for. The acceptable value is &lt;code&gt;app&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;environment-configuration-params&quot;&gt;environment-configuration: params:&lt;/h3&gt;
&lt;p&gt;Defines parameters and their configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: params: name:&lt;/code&gt;—parameter’s name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: params: bucket:&lt;/code&gt;—defines what the parameter  is used for. The acceptable value is &lt;code&gt;app&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: params: default:&lt;/code&gt;—parameter’s default value. Accepts string, number, and json values.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;environment-configuration: params: grant:&lt;/code&gt;—IAM users’ permissions. &lt;code&gt;limited&lt;/code&gt; provides read while &lt;code&gt;public&lt;/code&gt; provides read and write permissions. The default one is &lt;code&gt;limited&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;imports&quot;&gt;imports:&lt;/h3&gt;
&lt;p&gt;Defines any of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Imports of additional deploy files to be included into a build. Supports imports of the same deploy file multiple times. To define a deploy file and dynamic parameters for this type of import, see &lt;a href=&quot;#imports-importname&quot;&gt;imports: {import_name}:&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;import_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;import_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;       
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Additional deploy files to be included into a build. To define dynamic parameters for this type of import, see &lt;a href=&quot;#imports-deployfilename&quot;&gt;imports: {deploy_file_name}:&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;An array of additional deploy files to be included into a build. Supports imports of the same deploy file multiple times. To define dynamic parameters for this type of import, see &lt;a href=&quot;#imports-parameters&quot;&gt;imports: parameters:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The files must exist on a &lt;a href=&quot;/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file.html&quot;&gt;project or base layer&lt;/a&gt;.&lt;/p&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Merged deploy files&lt;/div&gt;
&lt;p&gt;If you include a deploy file, the included deploy file is merged with the original one. The final deploy file is used to build the application. To check how the final deploy file looks without stopping containers, run &lt;code&gt;docker config {DEPLOY_FILE_NAME}&lt;/code&gt;. For example, if your main deploy file is &lt;code&gt;deploy.dev.yml&lt;/code&gt;, run &lt;code&gt;docker config deploy.dev.yml&lt;/code&gt;. The command parses the included deploy files and returns the merged file and validation errors, if any.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;imports-parameters&quot;&gt;imports: parameters:&lt;/h3&gt;
&lt;p&gt;Defines the &lt;a href=&quot;/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file.html#dynamic-parameters&quot;&gt;dynamic parameters&lt;/a&gt; to be used when parsing the included deploy file. In the included deploy file, the parameter name should be wrapped in &lt;code&gt;%&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;dynamic_parameter_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{dynamic_parameter_value}&apos;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;dynamic_parameter_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{dynamic_parameter_value}&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;deploy.porject.yml&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;env-name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;dev&apos;&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;locale&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;en&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;Affects the included deploy file that it follows in an array of included deploy files. To learn how you can add dynamic parameters for other types of imports, see &lt;a href=&quot;#imports-importname&quot;&gt;imports: {import_name}:&lt;/a&gt; and &lt;a href=&quot;#imports-deployfilename&quot;&gt;imports: {deploy_file_name}:&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;imports-importname&quot;&gt;imports: {import_name}:&lt;/h3&gt;
&lt;p&gt;Defines the configuration of the import:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{import_name}: template:&lt;/code&gt;—defines the deploy file to be included into a build  as part of this import.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{import_name}: parameters:&lt;/code&gt;—defines the &lt;a href=&quot;/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file.html#dynamic-parameters&quot;&gt;dynamic parameters&lt;/a&gt; to be used when parsing the included deploy file. In the included deploy file, the parameter name should be wrapped in &lt;code&gt;%&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;import_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;dynamic_parameter_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{dynamic_parameter_value}&apos;&lt;/span&gt;
          &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;dynamic_parameter_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{dynamic_parameter_value}&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;deploy.base.template.yml&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;env_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;dev&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;locale&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;en&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;imports-deployfilename&quot;&gt;imports: {deploy_file_name}:&lt;/h3&gt;
&lt;p&gt;Defines the configuration to be used when parsing the included deploy file.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{deploy_file_name}: parameters:&lt;/code&gt;—defines the &lt;a href=&quot;/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file.html#dynamic-parameters&quot;&gt;dynamic parameters&lt;/a&gt; to be used when parsing the included deploy file. In the included deploy file, the parameter name should be wrapped in &lt;code&gt;%&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;deploy_file_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;dynamic_parameter_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{dynamic_parameter_value}&apos;&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;dynamic_parameter_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;{dynamic_parameter_value}&apos;&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;imports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;deploy.base.template.yml&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;parameters&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;env_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;dev&apos;&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;locale&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;en&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;image&quot;&gt;image:&lt;/h3&gt;
&lt;p&gt;Defines the Docker image configuration to run Spryker applications in.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;imagetag&quot;&gt;image:tag&lt;/h3&gt;
&lt;p&gt;Defines the image tag according to the &lt;code&gt;spryker/php&lt;/code&gt; images located at &lt;a href=&quot;https://hub.docker.com/r/spryker/php/tags&quot;&gt;Docker Hub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This variable is optional. If not specified, the default value applies: &lt;code&gt;image: spryker/php:7.3&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;image-environment&quot;&gt;image: environment:&lt;/h3&gt;
&lt;p&gt;Defines additional environment variables for Spryker applications.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;env_variable&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;env_variable_value&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;image-node&quot;&gt;image: node:&lt;/h3&gt;
&lt;p&gt;Defines Node.js settings.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;image: node: version:&lt;/code&gt;—defines a Node.js version. Supports only major versions that are greater than the default one. The default version is &lt;code&gt;12&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image: node: npm&lt;/code&gt;—defines a npm version. Supports only major versions that are greater than the default one. The default version is &lt;code&gt;6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image: node: distro:&lt;/code&gt;—defines a Linux distribution for the Node Docker image. Should be equal to your base PHP image. Possible values are &lt;code&gt;alpine&lt;/code&gt; and &lt;code&gt;debian&lt;/code&gt;. This variable is optional with the default value of &lt;code&gt;alpine&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;18&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;distro&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;alpine&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;image-php&quot;&gt;image: php:&lt;/h3&gt;
&lt;p&gt;Defines PHP settings.&lt;/p&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Memory Limits&lt;/div&gt;
&lt;p&gt;The maximum recommended PHP memory limit’s 2048M. Going above this limit’s rarely necessary and can lead to stability and performance issues in your environment. Test any configuration change carefully in a non-production setting.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;image: php: ini:&lt;/code&gt;—defines &lt;code&gt;php.ini&lt;/code&gt; configuration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image: php: enabled-extensions&lt;/code&gt;—defines enabled PHP extensions. The following extensions are allowed:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blackfire&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;newrelic&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tideways&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;ini&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;memory_limit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;2048M&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;newrelic&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tideways&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;assets&quot;&gt;assets:&lt;/h3&gt;
&lt;p&gt;Defines the configuration of the &lt;em&gt;frontend (nginx) container&lt;/em&gt;. Despite its name, this section configures the nginx reverse proxy that handles all incoming HTTP requests to the application, not only static assets. The frontend container does the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proxies dynamic requests to application containers (Yves, Zed, Glue, and others) through FastCGI.&lt;/li&gt;
&lt;li&gt;Serves pre-built static assets (JS, CSS, images, fonts).&lt;/li&gt;
&lt;li&gt;Applies HTTP response compression to both static files and dynamic responses from applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Compression affects all responses&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;compression&lt;/code&gt; configuration under &lt;code&gt;assets&lt;/code&gt; controls nginx compression for &lt;em&gt;all HTTP responses&lt;/em&gt; passing through the frontend container. This includes dynamically generated HTML pages, API responses, and other content served by application containers, not only static assets. When compression is misconfigured or disabled, all responses leave the infrastructure uncompressed, which can significantly increase data transfer volume and response latency, especially when a CDN or traffic management solution like Akamai or Cloudflare is used in front of the application. For more details, see &lt;a href=&quot;/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html&quot;&gt;CDN and traffic management integration&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;assets: image:&lt;/code&gt;—defines a Docker image for the frontend container. If not specified, the default value applies:
&lt;code&gt;assets: image: nginx:alpine&lt;/code&gt;. To enable Brotli compression support, use an image that includes the Brotli nginx module, for example: &lt;code&gt;spryker/nginx-brotli:latest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets: mode:&lt;/code&gt;—defines a mode for running a static build section from the install recipe. Possible values are &lt;code&gt;production&lt;/code&gt; and &lt;code&gt;development&lt;/code&gt;. This variable is optional with the default value of &lt;code&gt;development&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets: compression:&lt;/code&gt;—defines compression engines for HTTP responses. Supported engines are &lt;code&gt;gzip&lt;/code&gt; and &lt;code&gt;brotli&lt;/code&gt;. You can configure both engines simultaneously. The frontend container negotiates the encoding with the client based on the &lt;code&gt;Accept-Encoding&lt;/code&gt; request header and responds with the best mutually supported encoding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Compression engine parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;assets: compression: {engine}: static:&lt;/code&gt;—controls compression behavior for the engine. Allowed values are as follows:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;true&lt;/code&gt; (default)—compresses responses on the fly &lt;em&gt;and&lt;/em&gt; serves pre-compressed static files (&lt;code&gt;.gz&lt;/code&gt; or &lt;code&gt;.br&lt;/code&gt;) when available. This is the recommended setting for most deployments because it ensures both static assets and dynamic responses (HTML, JSON, XML) are compressed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;only&lt;/code&gt;—serves only pre-compressed static files. On-the-fly compression is disabled. Dynamic responses from applications (HTML pages, API responses) are &lt;em&gt;not&lt;/em&gt; compressed. Use this only when you want to avoid CPU overhead from on-the-fly compression and you are certain that a downstream service (such as a CDN) handles compression of dynamic content.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;false&lt;/code&gt;—disables the compression engine entirely. No compression is applied for this engine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets: compression: {engine}: level:&lt;/code&gt;—defines a compression level. Allowed range is from &lt;code&gt;1&lt;/code&gt; (fastest, least compression) to &lt;code&gt;9&lt;/code&gt; (slowest, best compression). The default is &lt;code&gt;5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets: compression: {engine}: types:&lt;/code&gt;—defines additional MIME types to be compressed beyond the defaults. Default types include &lt;code&gt;text/html&lt;/code&gt;, &lt;code&gt;text/plain&lt;/code&gt;, &lt;code&gt;text/css&lt;/code&gt;, &lt;code&gt;text/javascript&lt;/code&gt;, &lt;code&gt;application/javascript&lt;/code&gt;, &lt;code&gt;application/json&lt;/code&gt;, &lt;code&gt;application/xml&lt;/code&gt;, &lt;code&gt;image/svg+xml&lt;/code&gt;, and others.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Content negotiation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When a client (browser, CDN, or other HTTP client) sends a request with an &lt;code&gt;Accept-Encoding&lt;/code&gt; header, the frontend container selects the best available compression:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If the client sends &lt;code&gt;Accept-Encoding: br&lt;/code&gt; and Brotli is enabled, the response is Brotli-compressed.&lt;/li&gt;
&lt;li&gt;If the client sends &lt;code&gt;Accept-Encoding: gzip&lt;/code&gt; and gzip is enabled, the response is gzip-compressed.&lt;/li&gt;
&lt;li&gt;If the client does not send &lt;code&gt;Accept-Encoding&lt;/code&gt; or requests an unsupported encoding, the response is sent uncompressed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The frontend container adds &lt;code&gt;Vary: Accept-Encoding&lt;/code&gt; to compressed responses so that intermediary caches (CDNs, proxies) correctly cache different representations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;assets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/nginx-brotli:latest&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;production&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;compression&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;gzip&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;brotli&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This configuration enables both gzip and Brotli for all responses, including dynamically generated HTML and API responses. With both engines enabled, the frontend container automatically selects the best encoding based on the client’s &lt;code&gt;Accept-Encoding&lt;/code&gt; header.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;regions&quot;&gt;regions:&lt;/h3&gt;
&lt;p&gt;Defines the list of &lt;em&gt;Regions&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;regions-services&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;regions: services:&lt;/code&gt;—defines settings for &lt;em&gt;Region&lt;/em&gt;-specific &lt;code&gt;services:&lt;/code&gt;. Only &lt;code&gt;database:&lt;/code&gt; and &lt;code&gt;mail: sender:&lt;/code&gt; are allowed here.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;regions: services: database:&lt;/code&gt;—see &lt;code&gt;database:&lt;/code&gt; on this page.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regions: services: mail: sender:&lt;/code&gt;—defines the mail sender configuration. Possible values are &lt;code&gt;name:&lt;/code&gt; and &lt;code&gt;email:&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regions: stores:&lt;/code&gt;—defines the list of &lt;em&gt;Stores&lt;/em&gt;.
&lt;a name=&quot;regions-stores-services&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regions: stores: services:&lt;/code&gt;—defines application-wide, &lt;em&gt;Store&lt;/em&gt;-specific settings for &lt;em&gt;Services&lt;/em&gt;. Only &lt;code&gt;broker:&lt;/code&gt;, &lt;code&gt;key_value_store:&lt;/code&gt; and &lt;code&gt;search:&lt;/code&gt; are currently allowed here. See &lt;a href=&quot;#services&quot;&gt;services:&lt;/a&gt; to learn more.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;1.0&quot;&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;regions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;REGION-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# Region-specific services settings&lt;/span&gt;

    &lt;span class=&quot;na&quot;&gt;stores&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;STORE-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;c1&quot;&gt;# Store-specific services settings&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;STORE-2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;c1&quot;&gt;# Store-specific services settings&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;groups&quot;&gt;groups:&lt;/h3&gt;
&lt;p&gt;Defines the list of &lt;em&gt;Groups&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: region:&lt;/code&gt;—defines the relation to a &lt;em&gt;Region&lt;/em&gt; by key.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;groups: applications:&lt;/code&gt;—defines the list of &lt;em&gt;Applications&lt;/em&gt;. See &lt;a href=&quot;#groups-applications&quot;&gt;groups: applications:&lt;/a&gt; to learn more.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;1.0&quot;&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;groups&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;BACKEND-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;region&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;REGION-1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;applications&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;backoffice_1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;backoffice&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;backoffice.store1.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-1&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;c1&quot;&gt;# Application-Store-specific services settings&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;backoffice.store2.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-2&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;c1&quot;&gt;# Application-Store-specific services settings&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;STOREFRONT-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;region&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;REGION-1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;applications&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;yves_1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yves&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;yves.store1.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-1&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;c1&quot;&gt;# Application-Store-specific services settings&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;yves.store2.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-2&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;c1&quot;&gt;# Application-Store-specific services settings&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;glue_1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;glue&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;glue.store1.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-1&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;glue.store2.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-2&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Applications can be defined as &lt;em&gt;Store&lt;/em&gt;-agnostic, as in the example above. Also, applications can be defined as &lt;em&gt;Store&lt;/em&gt;-specific by leaving a single endpoint pointing to each application. You can see it in the example below. You can use both approaches to scale applications separately by &lt;em&gt;Store&lt;/em&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;1.0&quot;&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;groups&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;BACKEND-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;region&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;REGION-1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;applications&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;backoffice_store_1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;backoffice&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;backoffice.store1.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-1&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;backoffice_store_2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;backoffice&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;backoffice.store2.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-2&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;groups-applications&quot;&gt;groups: applications:&lt;/h3&gt;
&lt;p&gt;Defines the list of &lt;em&gt;Applications&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The key must be project-wide unique.&lt;/p&gt;
&lt;p&gt;Obligatory parameters for &lt;code&gt;application:&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application:&lt;/code&gt;—defines the type of &lt;em&gt;Application&lt;/em&gt;. Possible values are &lt;code&gt;backoffice&lt;/code&gt;, &lt;code&gt;backend-gateway&lt;/code&gt;, &lt;code&gt;zed&lt;/code&gt;, &lt;code&gt;yves&lt;/code&gt;, &lt;code&gt;glue-storefront&lt;/code&gt;, &lt;code&gt;glue-backend&lt;/code&gt;,&lt;code&gt;glue&lt;/code&gt; and &lt;code&gt;merchant-portal&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;groups: applications: endpoints:&lt;/code&gt;—defines the list of &lt;em&gt;Endpoints&lt;/em&gt; to access the &lt;em&gt;Application&lt;/em&gt;. See &lt;a href=&quot;#groups-applications-endpoints&quot;&gt;groups: applications: endpoints:&lt;/a&gt; to learn more.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Optional parameters for &lt;code&gt;application:&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: application:&lt;/code&gt;—defines if the application is static. Only &lt;code&gt;static&lt;/code&gt; is allowed here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: endpoint: entry-point:&lt;/code&gt;—defines an entry-point, the path to the index directory of the application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: endpoint: redirect:&lt;/code&gt;—defines redirect rules.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: endpoint: redirect: code&lt;/code&gt;—defines an HTTP code for a redirect. Allowed values are &lt;code&gt;301&lt;/code&gt; and &lt;code&gt;302&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: endpoint: redirect: url&lt;/code&gt;—defines a URL to redirect to.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: real-ip: from:&lt;/code&gt;—defines gateway IP addresses to fetch the real IP address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: auth:&lt;/code&gt;—defines the basic auth.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: auth: engine:&lt;/code&gt;—defines an engine for the basic auth. Only one of the following is allowed per an endpoint: &lt;code&gt;basic&lt;/code&gt; or &lt;code&gt;whitelist&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basic auth variables:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application: endpoints: auth: users:&lt;/code&gt;—defines user credentials for basic auth.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application: endpoints: auth: users: username:&lt;/code&gt;—defines a username for basic auth.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application: endpoints: auth: users: password:&lt;/code&gt;—defines a password for basic auth.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application: endpoints: auth: exclude:&lt;/code&gt;—defines the IPs from which clients can access the endpoint bypassing the basic auth.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Whitelist auth variables:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application: endpoints: auth: include:&lt;/code&gt;—defines the IPs to allow access from.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: endpoints: primal:&lt;/code&gt;—defines if a ZED endpoint is primal for a store. Yves and Glue applications send Zed RPC calls to the primal endpoint. This variable is optional with the default value of &lt;code&gt;false&lt;/code&gt;. If no endpoint is defined as primal for a store, the first endpoint in descending order is considered primal.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;groups: applications: application: http: max-request-body-size:&lt;/code&gt;—defines the maximum allowed size of the request body that can be sent to the application, in MB. If not specified, the default values apply:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;backoffice&lt;/code&gt;—&lt;code&gt;10m&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;merchant-portal&lt;/code&gt;—&lt;code&gt;10m&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;glue-storefront&lt;/code&gt;—&lt;code&gt;10m&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;glue-backend&lt;/code&gt;—&lt;code&gt;10m&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;glue&lt;/code&gt;—&lt;code&gt;2m&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;yves&lt;/code&gt;—&lt;code&gt;1m&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;applications&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;backoffice&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;backoffice&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;max-request-body-size&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;20m&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;backoffice.store1.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;To disable the validation of request body size against this parameter, set it to &lt;code&gt;0&lt;/code&gt;. We don’t recommended disabling it.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: applications: application: limits: workers&lt;/code&gt;—defines the maximum number of concurrent child processes a process manager can serve simultaneously.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;applications&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;zed&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zed&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;limits&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;workers&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;ul&gt;
&lt;li&gt;In cloud environments, increasing the number of workers requires infrastructure changes. Increasing the number of workers should be thoroughly tested beforehand and may have drastic impact on your application’s resource requirements. Coordinate this change with our Operations team using the Infrastrucute Change Request (Change to existing Parameter Store Variable).&lt;/li&gt;
&lt;li&gt;Increase this number if you are getting the following error in logs: &lt;strong&gt;server reached pm.max_children setting&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;We recommend the following increase steps: 4, 8, 12.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;services&quot;&gt;services:&lt;/h3&gt;
&lt;p&gt;Defines the list of &lt;em&gt;Services&lt;/em&gt; and their project-wide settings.&lt;/p&gt;
&lt;p&gt;Each service has its own set of settings to be defined. See &lt;a href=&quot;#services&quot;&gt;Services&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;p&gt;Find common settings for all services below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;engine:&lt;/code&gt;—defines a third-party application supported by Spryker that does the job specific for the &lt;em&gt;Service&lt;/em&gt;. For example, you can currently set &lt;code&gt;database:engine:&lt;/code&gt; to &lt;code&gt;postgres&lt;/code&gt; or &lt;code&gt;mysql&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;endpoints:&lt;/code&gt;—defines the list of &lt;em&gt;Endpoints&lt;/em&gt; that point to the &lt;em&gt;Service&lt;/em&gt; web interface or port.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;version:&lt;/code&gt;—defines the version of the service to be installed. If &lt;code&gt;database:engine:&lt;/code&gt; is set to &lt;code&gt;mysql&lt;/code&gt;, also defines if MySQL or MariaDB is used according to the &lt;a href=&quot;https://github.com/spryker/docker-sdk#supported-services&quot;&gt;version&lt;/a&gt;. See Database on this page for detailed configuration instructions.
This variable is optional. If not specified, the &lt;a href=&quot;https://github.com/spryker/docker-sdk#supported-services&quot;&gt;default version&lt;/a&gt; applies.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;postgres&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;17&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;root&quot;&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;secret&quot;&lt;/span&gt;

    &lt;span class=&quot;na&quot;&gt;broker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;rabbitmq&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;api&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;root&quot;&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;secret&quot;&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;queue.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;redis&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5.0&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;key_value_store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;redis&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;elastic&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;6.8&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;scheduler&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;jenkins&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2.176&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;scheduler.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;mail_catcher&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mailhog&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;mail.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;After changing a service version, make sure to re-import demo data:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remove all Spryker volumes:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk clean-data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Populate Spryker demo data:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk demo-data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;p&gt;You can extend service settings on other levels for specific contexts. See &lt;a href=&quot;#regions&quot;&gt;regions: services:&lt;/a&gt;, &lt;a href=&quot;#regions&quot;&gt;regions: stores: services:&lt;/a&gt; and &lt;a href=&quot;#groups-applications-endpoints&quot;&gt;groups: applications: endpoints: services:&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;groups-applications-endpoints&quot;&gt;groups: applications: endpoints:&lt;/h3&gt;
&lt;p&gt;Defines the list of &lt;em&gt;Endpoints&lt;/em&gt; to access the &lt;em&gt;Application&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The format of the key  is &lt;code&gt;domain[:port]&lt;/code&gt;. The key must be project-wide unique.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;groups: applications: endpoints: store:&lt;/code&gt; defines the &lt;em&gt;Store&lt;/em&gt; as context to process requests within.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;groups: applications: endpoints: services:&lt;/code&gt; defines the &lt;em&gt;Store&lt;/em&gt;-specific settings for services. Only &lt;code&gt;session:&lt;/code&gt; is currently allowed here. See &lt;a href=&quot;#services&quot;&gt;Services&lt;/a&gt; to learn more.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;groups: applications: endpoints: cors-allow-origin:&lt;/code&gt; defines a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin&quot;&gt;CORS header&lt;/a&gt;. It is allowed for &lt;code&gt;glue&lt;/code&gt; application only. Possible values are:
&lt;ul&gt;
&lt;li&gt;Single domain as a string&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*&lt;/code&gt; – allows all domains&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Allowing all domains&lt;/div&gt;
&lt;p&gt;For security reasons, we recommend allowing all domains only as a temporary workaround. As a permanent solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Define the desired domains as separate endpoints with separate CORS headers.&lt;/li&gt;
&lt;li&gt;Define the desired domains on the application level&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;services-endpoints&quot;&gt;services: endpoints:&lt;/h3&gt;
&lt;p&gt;Defines the list of &lt;em&gt;Endpoints&lt;/em&gt; to access a &lt;em&gt;Service&lt;/em&gt; for development or monitoring needs. The format of the key  is &lt;code&gt;domain[:port]&lt;/code&gt;. The key must be project-wide unique.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;services: endpoints: protocol:&lt;/code&gt; defines the protocol. Possible values are: &lt;code&gt;tcp&lt;/code&gt;and &lt;code&gt;http&lt;/code&gt;. The default one is &lt;code&gt;http&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A port must be defined if protocol is set to &lt;code&gt;tcp&lt;/code&gt;. The TCP port must be project-wide unique.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker&quot;&gt;docker:&lt;/h3&gt;
&lt;p&gt;Defines the settings for Spryker Docker SDK tools to make deployment based on Docker containers.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;ssl&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;testing&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;STORE-1&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;mount&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;baked&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-newrelic&quot;&gt;docker: newrelic:&lt;/h3&gt;
&lt;p&gt;Defines the &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/configure-services.html#new-relic&quot;&gt;New Relic&lt;/a&gt; configuration.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker: newrelic: license:&lt;/code&gt;—defines a New Relic license. Aquire it from &lt;a href=&quot;https://www.newrelic.com/&quot;&gt;New Relic&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker: newrelic: appname:&lt;/code&gt;—defines a New Relic application name. This variable is optional and does not have a default value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker: newrelic: enabled:&lt;/code&gt;—defines if Newrelic is enabled. Possible values are &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt;. This variable is optional with the default value of &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker: newrelic: distributed-tracing: enabled&lt;/code&gt;—defines if &lt;a href=&quot;https://docs.newrelic.com/docs/agents/php-agent/features/distributed-tracing-php-agent/&quot;&gt;New Relic distributed tracing&lt;/a&gt; is enabled. Possible values are &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker: newrelic: distributed-tracing: exclude-newrelic-header&lt;/code&gt;—defines if New Relic distributed tracing headers are enabled. Possible values are &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt;. For information about the headers, see &lt;a href=&quot;https://docs.newrelic.com/docs/distributed-tracing/concepts/how-new-relic-distributed-tracing-works/#headers&quot;&gt;How trace context is passed between applications&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker: newrelic: distributed-tracing: transaction-tracer-threshold&lt;/code&gt;—defines the New Relic transaction tracer threshold. Accepts numeric values starting from &lt;code&gt;0&lt;/code&gt;. For information about the threshold, see &lt;a href=&quot;https://docs.newrelic.com/docs/apm/transactions/transaction-traces/configure-transaction-traces/&quot;&gt;Configure transaction traces&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;newrelic&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;license&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;eu01xxaa7460e1ea3abdfbbbd34e85c10cd0NRAL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This section covers only a subset of the New Relic agent settings. To configure distributed tracing, transaction traces, or application logging in detail, define the corresponding environment variables in &lt;a href=&quot;#image-environment&quot;&gt;image: environment:&lt;/a&gt;. For more details, see &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/configure-services.html#configure-distributed-tracing&quot;&gt;Configure distributed tracing&lt;/a&gt; and &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/configure-services.html#configure-new-relic-application-logging&quot;&gt;Configure New Relic application logging&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-ssl&quot;&gt;docker: ssl:&lt;/h3&gt;
&lt;p&gt;Defines configuration for SSL module in Spryker Docker SDK.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;docker: ssl: enabled:&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;, all endpoints use HTTPS.&lt;/p&gt;
&lt;p&gt;This variable is optional. If not specified, the default value applies: &lt;code&gt;enabled: false&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ssl&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;To enable secure connection in your browser, register the self-signed CA certificate from &lt;code&gt;./docker/generator/openssl/default.crt&lt;/code&gt; in your system.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-debug&quot;&gt;docker: debug:&lt;/h3&gt;
&lt;p&gt;Defines the configuration for debugging.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;docker: debug: enabled:&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;, all applications work in debugging mode.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker: debug: xdebug: enabled:&lt;/code&gt;—defines if Xdebug is enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-maintenance-enabled&quot;&gt;docker: maintenance: enabled:&lt;/h3&gt;
&lt;p&gt;Defines if applications work in maintenance mode. The default value is &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;maintenance&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;true | false&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-maintenance-whitelist-ips&quot;&gt;docker: maintenance: whitelist: ips:&lt;/h3&gt;
&lt;p&gt;Defines the IPs from which the application in the maintenance mode can be accessed.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;maintenance&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;whitelist&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;ips&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
              &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;IP_ADDRESS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
              &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;IP_ADDRESS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;docker-logs&quot;&gt;docker: logs:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker: logs: path:&lt;/code&gt; defines the path to the directory with Docker logs. This variable is optional. If not specified, the default value applies: &lt;code&gt;path: &apos;/var/log/spryker&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-testing&quot;&gt;docker: testing:&lt;/h3&gt;
&lt;p&gt;Defines the configuration for testing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker: testing: store:&lt;/code&gt; defines a &lt;em&gt;Store&lt;/em&gt; as the context for running tests using specific console commands, like &lt;code&gt;docker/sdk console code:test&lt;/code&gt;. This variable is optional. If not specified, the default value applies: &lt;code&gt;store: DE&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;docker-mount&quot;&gt;docker: mount:&lt;/h3&gt;
&lt;p&gt;Defines the mode for mounting source files into application containers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;baked:&lt;/code&gt;- source files are copied into the image, so they cannot be changed from host machine. This variable is optional. If not specified, the default value applies: &lt;code&gt;baked:baked&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;native:&lt;/code&gt;- source files are mounted from host machine into containers directly. We recommend using it Linux.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker-sync:&lt;/code&gt;- source files are synced from host machine into containers during runtime. Use it as a workaround solution with MacOS and Windows.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mutagen:&lt;/code&gt;- source files are synced from the host machine into running containers. Use it as a workaround for MacOS and Windows.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;As mount:&lt;/code&gt; is a platform-specific setting. You can define multiple mount modes. Use the&lt;code&gt;platforms:&lt;/code&gt; list to define a mount mode for a platform. Possible platforms are &lt;code&gt;windows&lt;/code&gt;, &lt;code&gt;macos&lt;/code&gt;, and &lt;code&gt;linux&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The first mount mode matching the host platform is selected by default.&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;mount&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;native&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;platforms&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;linux&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;mutagen&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;platforms&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;macos&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;docker-sync&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;platforms&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;windows&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;composer&quot;&gt;composer:&lt;/h3&gt;
&lt;p&gt;Defines the composer settings to be used during deployment.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mode:&lt;/code&gt;—defines whether packages should be installed from the  &lt;code&gt;require&lt;/code&gt; or &lt;code&gt;require-dev&lt;/code&gt; section of &lt;code&gt;composer.json&lt;/code&gt;. Possible values are &lt;code&gt;--no-dev&lt;/code&gt; and &lt;code&gt;-dev&lt;/code&gt;. This variable is optional. If not specified, the default values apply:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;[Development mode]: &lt;code&gt;mode: --dev&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;[Demo mode]: &lt;code&gt;mode: --no-dev&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;code&gt;autoload:&lt;/code&gt;—defines composer autoload options. Possible values are &lt;code&gt;--optimize&lt;/code&gt; and &lt;code&gt;--classmap-authoritative&lt;/code&gt;. This variable is optional. If not specified, the default values apply:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Development mode: &lt;code&gt;autoload: --optimize&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Demo mode: &lt;code&gt;autoload: --classmap-authoritative&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;services-1&quot;&gt;Services&lt;/h2&gt;
&lt;p&gt;You can configure and use external tools that are shipped with Spryker in Docker as services.
If a service has a dedicated configuration, it’s configured and run when the current environment is set up and executed.&lt;/p&gt;
&lt;p&gt;The following services are supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;blackfire&lt;/li&gt;
&lt;li&gt;broker&lt;/li&gt;
&lt;li&gt;dashboard&lt;/li&gt;
&lt;li&gt;database&lt;/li&gt;
&lt;li&gt;key_value_store&lt;/li&gt;
&lt;li&gt;kibana&lt;/li&gt;
&lt;li&gt;mail_catcher&lt;/li&gt;
&lt;li&gt;Key-value store (Redis or Valkey)-gui&lt;/li&gt;
&lt;li&gt;scheduler&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;session&lt;/li&gt;
&lt;li&gt;swagger&lt;/li&gt;
&lt;li&gt;tideways&lt;/li&gt;
&lt;li&gt;webdriver&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;blackfire&quot;&gt;blackfire:&lt;/h3&gt;
&lt;p&gt;An application profiler &lt;em&gt;Service&lt;/em&gt; used for testing and debugging.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blackfire: engine:&lt;/code&gt;—possible value is &lt;code&gt;blackfire&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blackfire: server-id:&lt;/code&gt;—defines the server id used to authenticate with Blackfire. Use it only if you have a shared agent between multiple environments.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blackfire: server-token:&lt;/code&gt;—defines the server token used to authenticate with Blackfire. Use it only if you have a shared agent between multiple environments.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blackfire: client-id:&lt;/code&gt;—defines the client ID from the Client ID/Client Token credentials pair.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blackfire: client-token:&lt;/code&gt;—defines the client Token from the Client ID/Client Token credentials pair.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;broker&quot;&gt;broker:&lt;/h3&gt;
&lt;p&gt;A message broker &lt;em&gt;Service&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Project-wide&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;broker: engine:&lt;/code&gt;—possible values is &lt;code&gt;rabbitmq&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;broker: api: username&lt;/code&gt;, &lt;code&gt;database: api: password:&lt;/code&gt;—defines the credentails for the message broker’s API.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;broker: endpoints:&lt;/code&gt;—defines the service’s port or/and web-interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Store-specific&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;broker: namespace:&lt;/code&gt;—defines a namespace (virtual host).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;broker: username:&lt;/code&gt;, &lt;code&gt;broker: password:&lt;/code&gt;—defines the credentials to access the namespace (virtual host) defined by &lt;code&gt;broker: namespace:&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;dashboard&quot;&gt;dashboard:&lt;/h3&gt;
&lt;p&gt;A real-time log monitoring &lt;em&gt;Service&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Project-wide&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dashboard: engine:&lt;/code&gt;—possible value is &lt;code&gt;dashboard&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dashboard: endpoints:&lt;/code&gt;—defines the service’s port and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;database&quot;&gt;database:&lt;/h3&gt;
&lt;p&gt;An SQL database management system &lt;em&gt;Service&lt;/em&gt;.&lt;/p&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;SCCOS&lt;/div&gt;
&lt;p&gt;In Spryker Cloud Commerse OS, &lt;code&gt;database: root: username:&lt;/code&gt; and &lt;code&gt;database: root: password:&lt;/code&gt; are generated automatically for security reasons. You &lt;em&gt;do not&lt;/em&gt; need to define them for cloud environments.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Project-wide&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;database: engine:&lt;/code&gt;—possible values are &lt;code&gt;postgres&lt;/code&gt;and &lt;code&gt;mysql&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;database: version:&lt;/code&gt;—defines the version of the database engine. If &lt;code&gt;database:engine:&lt;/code&gt; is set to &lt;code&gt;mysql&lt;/code&gt;, also defines if MySQL or MariaDB is used according to the &lt;a href=&quot;https://github.com/spryker/docker-sdk#supported-services&quot;&gt;version&lt;/a&gt;. See Database on this page for detailed configuration instructions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;database: root: username:&lt;/code&gt;, &lt;code&gt;database: root: password:&lt;/code&gt;—defines the user with root privileges.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;database: endpoints:&lt;/code&gt;—defines the service’s port that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Region-specific&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;database: database:&lt;/code&gt;—defines database name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;database: username:&lt;/code&gt;, &lt;code&gt;database: password:&lt;/code&gt;—defines database credentials.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;keyvaluestore&quot;&gt;key_value_store:&lt;/h3&gt;
&lt;p&gt;A key-value store &lt;em&gt;Service&lt;/em&gt; for storing business data.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Project-wide&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;key_value_store: engine:&lt;/code&gt;—possible value is: &lt;code&gt;redis&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key_value_store: replicas: number:&lt;/code&gt;—defines the number of replicas. The default value is &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session: endpoints:&lt;/code&gt;—defines the service’s port that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Store-specific&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;key_value_store: namespace:&lt;/code&gt;—defines a namespace (number for Redis).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;kibana&quot;&gt;kibana:&lt;/h3&gt;
&lt;p&gt;A &lt;em&gt;Service&lt;/em&gt; to visualize Elasticsearch data and navigate the Elastic Stack.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kibana: engine:&lt;/code&gt;—possible value is: &lt;code&gt;kibana&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kibana: endpoints:&lt;/code&gt;—defines the service’s port and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;mailcatcher&quot;&gt;mail_catcher:&lt;/h3&gt;
&lt;p&gt;A mail catcher &lt;em&gt;Service&lt;/em&gt; used to catch all outgoing emails for development or testing needs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Project-wide&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mail_catcher: engine:&lt;/code&gt;—possible value is &lt;code&gt;mailhog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mail_catcher: endpoints:&lt;/code&gt;-defines the service’s port and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;redis-gui&quot;&gt;redis-gui:&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;Service&lt;/strong&gt; that provides a graphical user interface to access Redis databases.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;redis-gui: engine:&lt;/code&gt;—possible value is &lt;code&gt;redis-commander&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redis-gui: endpoints:&lt;/code&gt;—defines the service’s port and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;scheduler&quot;&gt;scheduler:&lt;/h3&gt;
&lt;p&gt;A scheduler &lt;em&gt;Service&lt;/em&gt; used to run application-specific jobs periodically in the background.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;scheduler: engine:&lt;/code&gt;—possible value is &lt;code&gt;jenkins&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scheduler: endpoints:&lt;/code&gt;—defines the service’s port and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;search&quot;&gt;search:&lt;/h3&gt;
&lt;p&gt;A search &lt;em&gt;Service&lt;/em&gt; that provides a distributed, multitenant-capable full-text search engine.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;search: engine:&lt;/code&gt;—possible value is &lt;code&gt;elastic&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;search: endpoints:&lt;/code&gt;—defines the service’s port and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;session&quot;&gt;session:&lt;/h3&gt;
&lt;p&gt;A key-value store &lt;em&gt;Service&lt;/em&gt; for storing session data.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Project-wide&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session: engine:&lt;/code&gt;—possible values is &lt;code&gt;redis&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session: endpoints:&lt;/code&gt;—defines the service’s port that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Endpoint-specific&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session: namespace:&lt;/code&gt;—defines a namespace (number for Redis).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;swagger&quot;&gt;swagger:&lt;/h3&gt;
&lt;p&gt;The swagger-ui &lt;em&gt;Service&lt;/em&gt; used to run Swagger UI to develop API endpoints.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;swagger: engine:&lt;/code&gt;–possible value is &lt;code&gt;swagger-ui&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;swagger-ui: endpoints:&lt;/code&gt;—defines the service’s port or/and web interface that can be accessed via given endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;tideways&quot;&gt;tideways:&lt;/h3&gt;
&lt;p&gt;An application profiler &lt;em&gt;Service&lt;/em&gt; for testing and debugging.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tideways: apikey:&lt;/code&gt;—defines the api-key to authenticate with Tideways.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tideways: environment-name:&lt;/code&gt;—defines the environment name of your environment on Tideways. This variable is optional with the default value of &lt;code&gt;production&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tideways: cli-enabled:&lt;/code&gt;—defines if profiling of CLI script is enabled. This variable is optional with the default value of &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;webdriver&quot;&gt;webdriver:&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;Service&lt;/strong&gt; to control user agents.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;webdriver: engine:&lt;/code&gt;—possible values are &lt;code&gt;chromedriver,&lt;/code&gt; &lt;code&gt;phantomjs&lt;/code&gt;. This variable is optional with the default value of &lt;code&gt;phantomjs&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;!-- markdownlint-enable --&gt;
&lt;h2 id=&quot;change-log&quot;&gt;Change log&lt;/h2&gt;
&lt;p&gt;Initial reference document is introduced.&lt;/p&gt;
</description>
            <pubDate>Thu, 30 Jul 2026 14:51:41 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html</guid>
            
            
        </item>
        
        <item>
            <title>Install the Basic Shop Theme feature</title>
            <description>This document describes how to install the Basic Shop Theme feature.

The feature lets Business Admins configure logos, theme colors, and custom CSS for the Storefront, Back Office, and Merchant Portal directly from the Back Office.

## Prerequisites

Before installing this feature, install and configure the following:

| NAME | VERSION | INTEGRATION GUIDE |
|------|---------|-------------------|
| Configuration Management feature | ^0.1.0 | [Install the Configuration Management feature](/docs/dg/dev/integrate-and-configure/integrate-confguration-feature.html) |
| Spryker Core | ^3.82 | — |

## Install feature core

### 1) Install the required modules

Install the required modules using Composer:

```bash
composer require spryker/gui:&quot;^3.0.0&quot; spryker/zed-ui:&quot;^2.0.0&quot; spryker-shop/shop-ui:&quot;^1.0.0&quot; symfony/html-sanitizer:&quot;^7.4&quot; --update-with-dependencies
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure the following modules have been installed:

| MODULE | EXPECTED DIRECTORY |
|--------|-------------------|
| Gui | vendor/spryker/gui |
| ZedUi | vendor/spryker/zed-ui |
| ShopUi | vendor/spryker-shop/shop-ui |
| symfony/html-sanitizer | vendor/symfony/html-sanitizer |

{% endinfo_block %}

### 2) Sync the theme configuration schema

Run the configuration sync command to register the theme settings in the Back Office:

```bash
console configuration:sync
```

{% info_block warningBox &quot;Verification&quot; %}

1. Log in to the Back Office.
2. Navigate to **Configuration**.
3. Verify that the **Theme** feature appears in the sidebar with four tabs: **Storefront**, **Back Office**, **Merchant Portal**, and **Logos**.

{% endinfo_block %}

### 3) Set up behavior

The `configurationValue()` and `configurationValues()` Twig functions are made available by existing plugins that are already registered in a standard Spryker installation:

- **Storefront (Yves)**: `ShopUiTwigExtension`
- **Back Office and Merchant Portal (Zed)**: `\Spryker\Zed\Twig\Communication\Plugin\Application\TwigApplicationPlugin`

No additional Twig plugin registration is required.

#### 3.1) Register ACL plugins for Merchant Portal

Register the ACL entity configuration and rule expander plugins so that Merchant Portal users can read theme configuration values through the ACL layer:

| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
|--------|---------------|---------------|-----------|
| ConfigurationValueAclEntityConfigurationExpanderPlugin | Expands the ACL entity configuration with `ConfigurationValue` entity rules for Merchant Portal access. | None | Spryker\Zed\Configuration\Communication\Plugin\AclMerchantPortal |
| ConfigurationValueMerchantAclEntityRuleExpanderPlugin | Expands the Merchant ACL entity rule set to allow Merchant Portal users to read published configuration values. | None | Spryker\Zed\Configuration\Communication\Plugin\AclMerchantPortal |

**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php**

Add the import statements:

```php
use Spryker\Zed\Configuration\Communication\Plugin\AclMerchantPortal\ConfigurationValueAclEntityConfigurationExpanderPlugin;
use Spryker\Zed\Configuration\Communication\Plugin\AclMerchantPortal\ConfigurationValueMerchantAclEntityRuleExpanderPlugin;
```

Register the plugins in the respective methods:

```php
protected function getAclEntityConfigurationExpanderPlugins(): array
{
    return [
        // ...
        new ConfigurationValueAclEntityConfigurationExpanderPlugin(),
    ];
}

protected function getMerchantAclEntityRuleExpanderPlugins(): array
{
    return [
        // ...
        new ConfigurationValueMerchantAclEntityRuleExpanderPlugin(),
    ];
}
```

{% info_block warningBox &quot;Verification&quot; %}

Log in to the Merchant Portal and navigate to any page. Verify there are no ACL-related errors in the application log.

{% endinfo_block %}

### 4) Configure media filesystems

The logo upload feature requires three Flysystem filesystem services: one per application context. Configure them in your shared config and provide local overrides for development and CI environments.

#### 4.1) Add filesystem services to the shared config

Add the three media filesystem services to `config/Shared/config_default.php`. In production, they read from S3 using the `SPRYKER_S3_PUBLIC_ASSETS_*` environment variables.

**config/Shared/config_default.php**

Add the three media filesystem entries inside the existing `$config[FileSystemConstants::FILESYSTEM_SERVICE]` array. To enable an IAM role configuration, use `IamAws3v3FilesystemBuilderPlugin`:

```php
$config[FileSystemConstants::FILESYSTEM_SERVICE] = [
    &apos;backoffice-media&apos; =&gt; [
        &apos;sprykerAdapterClass&apos; =&gt; IamAws3v3FilesystemBuilderPlugin::class,
        &apos;bucket&apos; =&gt; getenv(&apos;SPRYKER_S3_PUBLIC_ASSETS_BUCKET&apos;) ?: &apos;&apos;,
        &apos;region&apos; =&gt; getenv(&apos;AWS_REGION&apos;) ?: &apos;&apos;,
        &apos;path&apos; =&gt; &apos;/backoffice-media&apos;,
    ],
    &apos;storefront-media&apos; =&gt; [
        &apos;sprykerAdapterClass&apos; =&gt; IamAws3v3FilesystemBuilderPlugin::class,
        &apos;bucket&apos; =&gt; getenv(&apos;SPRYKER_S3_PUBLIC_ASSETS_BUCKET&apos;) ?: &apos;&apos;,
        &apos;region&apos; =&gt; getenv(&apos;AWS_REGION&apos;) ?: &apos;&apos;,
        &apos;path&apos; =&gt; &apos;/storefront-media&apos;,
    ],
    &apos;merchant-portal-media&apos; =&gt; [
        &apos;sprykerAdapterClass&apos; =&gt; IamAws3v3FilesystemBuilderPlugin::class,
        &apos;bucket&apos; =&gt; getenv(&apos;SPRYKER_S3_PUBLIC_ASSETS_BUCKET&apos;) ?: &apos;&apos;,
        &apos;region&apos; =&gt; getenv(&apos;AWS_REGION&apos;) ?: &apos;&apos;,
        &apos;path&apos; =&gt; &apos;/merchant-portal-media&apos;,
    ],
];
```

{% info_block warningBox &quot;IAM authentication required&quot; %}

These filesystems authenticate through the IAM role attached to the workload, which resolves AWS credentials automatically. Access keys (`key` and `secret`) are not supported. If your project was set up from older documentation using access keys, migrate to this configuration. For more details, see [AWS S3 filesystem builder plugins](/docs/dg/dev/backend-development/data-manipulation/data-ingestion/structural-preparations/flysystem.html#aws-s3-filesystem-builder-plugins).

{% endinfo_block %}

#### 4.2) Add local filesystem fallback for development

In the development environment, override the three filesystem services with a local adapter when the S3 bucket is not configured. This stores uploaded files under `public/Yves/assets/static/images` and serves them via the Yves assets path.

**config/Shared/config_default-docker.dev.php**

Add the import statement:

```php
use Spryker\Shared\Flysystem\FlysystemConstants;
```

Add the following block in the filesystem section:

```php
if (!getenv(&apos;SPRYKER_S3_PUBLIC_ASSETS_BUCKET&apos;)) {
    $publicUrl = sprintf(
        &apos;%s%s&apos;,
        $config[ApplicationConstants::BASE_URL_YVES],
        &apos;/assets/static/images&apos;,
    );

    $localMediaFilesystemConfig = [
        &apos;sprykerAdapterClass&apos; =&gt; LocalFilesystemBuilderPlugin::class,
        &apos;root&apos; =&gt; APPLICATION_ROOT_DIR . &apos;/public/Yves/assets/static/images&apos;,
        &apos;path&apos; =&gt; &apos;&apos;,
    ];

    $config[FileSystemConstants::FILESYSTEM_SERVICE][&apos;backoffice-media&apos;] = $localMediaFilesystemConfig;
    $config[FileSystemConstants::FILESYSTEM_SERVICE][&apos;storefront-media&apos;] = $localMediaFilesystemConfig;
    $config[FileSystemConstants::FILESYSTEM_SERVICE][&apos;merchant-portal-media&apos;] = $localMediaFilesystemConfig;
    $config[FlysystemConstants::FLYSYSTEM_OPTIONS] = [
        &apos;public_url&apos; =&gt; $publicUrl,
    ];
}
```

#### 4.3) Add local filesystem fallback for CI

**config/Shared/config_default-docker.ci.php**

Add the import statements:

```php
use Spryker\Shared\Application\ApplicationConstants;
use Spryker\Shared\Flysystem\FlysystemConstants;
```

Add the `$localMediaFilesystemConfig` variable before the `$config[FileSystemConstants::FILESYSTEM_SERVICE]` array, and add the three services as entries inside that array. After the array, add the public URL config:

```php
$localMediaFilesystemConfig = [
    &apos;sprykerAdapterClass&apos; =&gt; LocalFilesystemBuilderPlugin::class,
    &apos;root&apos; =&gt; APPLICATION_ROOT_DIR . &apos;/public/Yves/assets/static/images&apos;,
    &apos;path&apos; =&gt; &apos;&apos;,
];

$config[FileSystemConstants::FILESYSTEM_SERVICE] = [
    // ... existing entries ...
    &apos;backoffice-media&apos; =&gt; $localMediaFilesystemConfig,
    &apos;storefront-media&apos; =&gt; $localMediaFilesystemConfig,
    &apos;merchant-portal-media&apos; =&gt; $localMediaFilesystemConfig,
];

$publicUrl = sprintf(
    &apos;%s%s&apos;,
    $config[ApplicationConstants::BASE_URL_YVES],
    &apos;/assets/static/images&apos;,
);

$config[FlysystemConstants::FLYSYSTEM_OPTIONS] = [
    &apos;public_url&apos; =&gt; $publicUrl,
];
```

{% info_block warningBox &quot;Verification&quot; %}

1. Log in to the Back Office.
2. Navigate to **Configuration &gt; Theme &gt; Logos**.
3. Upload a logo image using the file upload widget.
4. Verify the uploaded file is accessible at the public URL shown after upload.

{% endinfo_block %}

### 5) Clear caches

Clear the Twig cache and application cache to apply the new Twig functions:

```bash
console twig:cache:warmer
console cache:clear
```

## Configure the feature

After installing the feature, configure branding settings in the Back Office:

1. Log in to the Back Office.
2. Go to **Configuration &gt; Theme**.
3. Select the tab for the context you want to configure: **Storefront**, **Back Office**, **Merchant Portal**, or **Logos**.
4. Enter the desired values and click **Save**.

Changes to Storefront settings are published to key-value storage automatically. Back Office and Merchant Portal settings take effect on the next page load.

### Logo upload fields

Logo settings support direct file upload from the Back Office. Uploaded files are stored via the corresponding Flysystem media filesystem service (`storefront-media`, `backoffice-media`, `merchant-portal-media`) and served from the configured `public_url`.

| Context | Setting | Recommended size | Supported formats | Filesystem service |
|---------|---------|-----------------|-------------------|--------------------|
| Storefront | Storefront Logo | 186×50 px | GIF, PNG, JPEG, BMP, WebP, SVG | `storefront-media` |
| Back Office | Back Office Logo | 186×50 px | GIF, PNG, JPEG, BMP, WebP, SVG | `backoffice-media` |
| Merchant Portal | Merchant Portal Logo | 186×50 px | GIF, PNG, JPEG, BMP, WebP, SVG | `merchant-portal-media` |

In production, configure the `SPRYKER_S3_PUBLIC_ASSETS_BUCKET`, `SPRYKER_S3_PUBLIC_ASSETS_KEY`, `SPRYKER_S3_PUBLIC_ASSETS_SECRET`, and `AWS_REGION` environment variables to point to an S3 bucket (or compatible object storage). In development and CI, files are stored locally at `public/Yves/assets/static/images`.

### Store-level overrides

To configure a per-store override:

1. In the scope selector at the top of the Configuration page, switch from **Default** to the target store (for example, **DE**).
2. Adjust the setting value.
3. Click **Save**.

Stores without a store-level value inherit the global (Default) value.

## Theme configuration key reference

The following theme settings are registered by the feature&apos;s YAML schema. Use their compound keys in `configurationValue()` Twig calls or via `getModuleConfig()` in a module Config class.

| Compound Key | Context | Type | Default |
|-------------|---------|------|---------|
| `theme:storefront:colors:background_brand_primary` | Storefront | color | `#00bebe` |
| `theme:storefront:colors:background_brand_subtle` | Storefront | color | `#eb553c` |
| `theme:storefront:custom_css:yves_custom_css` | Storefront | text | (empty) |
| `theme:logos:logos:yves_logo_url` | Storefront | file | (empty) |
| `theme:backoffice:colors:bo_main_color` | Back Office | color | `#1ebea0` |
| `theme:backoffice:colors:bo_sidenav_color` | Back Office | color | `#23303c` |
| `theme:backoffice:colors:bo_sidenav_text_color` | Back Office | color | `#e4e4e4` |
| `theme:logos:logos:backoffice_logo_url` | Back Office | file | (empty) |
| `theme:merchant_portal:colors:spy_primary_color` | Merchant Portal | color | `#1ebea0` |
| `theme:logos:logos:merchant_portal_logo` | Merchant Portal | file | (empty) |

### Twig usage examples

Inject a theme color as a CSS custom property in a Back Office layout:

{% raw %}

```twig
&lt;style&gt;
    :root {
        --bo-main-color: {{ configurationValue(&apos;theme:backoffice:colors:bo_main_color&apos;, &apos;#1ebea0&apos;) | e(&apos;css&apos;) }};
    }
&lt;/style&gt;
```

{% endraw %}

Read multiple values at once:

{% raw %}

```twig
{% set themeValues = configurationValues([
    &apos;theme:backoffice:colors:bo_main_color&apos;,
    &apos;theme:logos:logos:backoffice_logo_url&apos;,
]) %}
```

{% endraw %}
</description>
            <pubDate>Wed, 29 Jul 2026 07:53:15 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-basic-shop-theme.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-basic-shop-theme.html</guid>
            
            
        </item>
        
        <item>
            <title>Install the Product Experience Management feature</title>
            <description>## Prerequisites

Install the required features:

| NAME | VERSION | REQUIRED |
| --- | --- | --- |
| Spryker Core | {{page.release_tag}} | Required |
| Product | {{page.release_tag}} | Required |
| Product Image | {{page.release_tag}} | Required |
| Price Product | {{page.release_tag}} | Required |
| Stock | {{page.release_tag}} | Required |
| Tax | {{page.release_tag}} | Required |
| Store | {{page.release_tag}} | Required |
| Locale | {{page.release_tag}} | Required |
| Category | {{page.release_tag}} | Required |
| Merchant | {{page.release_tag}} | Required |
| Shipment Type | {{page.release_tag}} | Required |
| File System | {{page.release_tag}} | Required |

## Install feature core

### 1) Install the required modules

Install the required modules using Composer:

```bash
composer require spryker-feature/product-experience-management:&quot;{{page.release_tag}}&quot; --update-with-dependencies
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure the following modules have been installed:

| MODULE | EXPECTED DIRECTORY |
| --- | --- |
| ProductExperienceManagement | vendor/spryker-feature/product-experience-management |

{% endinfo_block %}

### 2) Set up configuration

Configure the filesystem storage for import and export files. The feature requires two named filesystem entries: `product-experience-management-imports` and `product-experience-management-exports`.

#### Production (S3)

**config/Shared/config_default.php**

To enable an IAM role configuration, use `IamAws3v3FilesystemBuilderPlugin`:

```php
use Spryker\Service\FlysystemAws3v3FileSystem\Plugin\Flysystem\IamAws3v3FilesystemBuilderPlugin;
use Spryker\Shared\FileSystem\FileSystemConstants;

$config[FileSystemConstants::FILESYSTEM_SERVICE] = [
    // ... existing entries ...
    &apos;product-experience-management-imports&apos; =&gt; [
        &apos;sprykerAdapterClass&apos; =&gt; IamAws3v3FilesystemBuilderPlugin::class,
        &apos;bucket&apos; =&gt; getenv(&apos;SPRYKER_S3_PEM_IMPORT_BUCKET&apos;) ?: &apos;&apos;,
        &apos;region&apos; =&gt; getenv(&apos;AWS_REGION&apos;) ?: &apos;&apos;,
        &apos;path&apos; =&gt; &apos;pem-imports/&apos;,
    ],
    &apos;product-experience-management-exports&apos; =&gt; [
        &apos;sprykerAdapterClass&apos; =&gt; IamAws3v3FilesystemBuilderPlugin::class,
        &apos;bucket&apos; =&gt; getenv(&apos;SPRYKER_S3_PEM_EXPORT_BUCKET&apos;) ?: &apos;&apos;,
        &apos;region&apos; =&gt; getenv(&apos;AWS_REGION&apos;) ?: &apos;&apos;,
        &apos;path&apos; =&gt; &apos;pem-exports/&apos;,
    ],
];
```

{% info_block warningBox &quot;IAM authentication required&quot; %}

These filesystems authenticate through the IAM role attached to the workload, which resolves AWS credentials automatically. Access keys (`key` and `secret`) are not supported. If your project was set up from older documentation using access keys, migrate to this configuration. For more details, see [AWS S3 filesystem builder plugins](/docs/dg/dev/backend-development/data-manipulation/data-ingestion/structural-preparations/flysystem.html#aws-s3-filesystem-builder-plugins).

{% endinfo_block %}

#### Development (local filesystem)

**config/Shared/config_default-docker.dev.php**

```php
use Spryker\Service\FlysystemLocalFileSystem\Plugin\Flysystem\LocalFilesystemBuilderPlugin;
use Spryker\Shared\FileSystem\FileSystemConstants;

$config[FileSystemConstants::FILESYSTEM_SERVICE][&apos;product-experience-management-imports&apos;] = [
    &apos;sprykerAdapterClass&apos; =&gt; LocalFilesystemBuilderPlugin::class,
    &apos;root&apos; =&gt; &apos;/data&apos;,
    &apos;path&apos; =&gt; &apos;/data/pem-imports&apos;,
];

$config[FileSystemConstants::FILESYSTEM_SERVICE][&apos;product-experience-management-exports&apos;] = [
    &apos;sprykerAdapterClass&apos; =&gt; LocalFilesystemBuilderPlugin::class,
    &apos;root&apos; =&gt; &apos;/data&apos;,
    &apos;path&apos; =&gt; &apos;/data/pem-exports&apos;,
];
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure the filesystem directories exist and are writable by the application. For local development, verify that `/data/pem-imports` and `/data/pem-exports` directories are created inside the Docker container.

{% endinfo_block %}

### 3) Set up the database schema and transfer objects

Apply database changes and generate entity and transfer changes:

```bash
console propel:install
console transfer:generate
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that the following changes have been applied by checking your database:

| DATABASE ENTITY | TYPE | EVENT |
| --- | --- | --- |
| spy_import_job | table | created |
| spy_import_job_run | table | created |
| spy_import_job_run_error | table | created |

{% endinfo_block %}

{% info_block warningBox &quot;Verification&quot; %}

Make sure the following changes in transfer objects have been applied:

| TRANSFER | TYPE | EVENT | PATH |
| --- | --- | --- | --- |
| ImportJob | class | created | src/Generated/Shared/Transfer/ImportJobTransfer |
| ImportJobRun | class | created | src/Generated/Shared/Transfer/ImportJobRunTransfer |
| ImportJobRunFileInfo | class | created | src/Generated/Shared/Transfer/ImportJobRunFileInfoTransfer |
| ImportJobRunError | class | created | src/Generated/Shared/Transfer/ImportJobRunErrorTransfer |
| ImportJobCollection | class | created | src/Generated/Shared/Transfer/ImportJobCollectionTransfer |
| ImportJobRunCollection | class | created | src/Generated/Shared/Transfer/ImportJobRunCollectionTransfer |
| ImportJobRunErrorCollection | class | created | src/Generated/Shared/Transfer/ImportJobRunErrorCollectionTransfer |
| ImportJobRunCollectionRequest | class | created | src/Generated/Shared/Transfer/ImportJobRunCollectionRequestTransfer |
| ImportJobRunCollectionResponse | class | created | src/Generated/Shared/Transfer/ImportJobRunCollectionResponseTransfer |
| ImportJobCollectionRequest | class | created | src/Generated/Shared/Transfer/ImportJobCollectionRequestTransfer |
| ImportJobCollectionResponse | class | created | src/Generated/Shared/Transfer/ImportJobCollectionResponseTransfer |
| ImportJobCriteria | class | created | src/Generated/Shared/Transfer/ImportJobCriteriaTransfer |
| ImportJobConditions | class | created | src/Generated/Shared/Transfer/ImportJobConditionsTransfer |
| ImportJobRunCriteria | class | created | src/Generated/Shared/Transfer/ImportJobRunCriteriaTransfer |
| ImportJobRunConditions | class | created | src/Generated/Shared/Transfer/ImportJobRunConditionsTransfer |
| ImportJobRunErrorCriteria | class | created | src/Generated/Shared/Transfer/ImportJobRunErrorCriteriaTransfer |
| ImportJobRunErrorConditions | class | created | src/Generated/Shared/Transfer/ImportJobRunErrorConditionsTransfer |
| ImportJobExportResult | class | created | src/Generated/Shared/Transfer/ImportJobExportResultTransfer |
| ImportStepResponse | class | created | src/Generated/Shared/Transfer/ImportStepResponseTransfer |
| ImportStepError | class | created | src/Generated/Shared/Transfer/ImportStepErrorTransfer |
| ImportRowValidationCollection | class | created | src/Generated/Shared/Transfer/ImportRowValidationCollectionTransfer |
| ImportPublishEvent | class | created | src/Generated/Shared/Transfer/ImportPublishEventTransfer |

{% endinfo_block %}

### 4) Configure navigation

Add the following entry to the Back Office navigation:

**config/Zed/navigation.xml**

```xml
&lt;import-export&gt;
    &lt;label&gt;Import &amp;amp; Export&lt;/label&gt;
    &lt;title&gt;Import &amp;amp; Export&lt;/title&gt;
    &lt;icon&gt;swap_vert&lt;/icon&gt;
    &lt;pages&gt;
        &lt;import&gt;
            &lt;label&gt;Import&lt;/label&gt;
            &lt;title&gt;Import&lt;/title&gt;
            &lt;bundle&gt;product-experience-management&lt;/bundle&gt;
            &lt;controller&gt;job&lt;/controller&gt;
            &lt;action&gt;index&lt;/action&gt;
            &lt;visible&gt;1&lt;/visible&gt;
        &lt;/import&gt;
        &lt;export&gt;
            &lt;label&gt;Export&lt;/label&gt;
            &lt;title&gt;Export&lt;/title&gt;
            &lt;bundle&gt;product-experience-management&lt;/bundle&gt;
            &lt;controller&gt;export&lt;/controller&gt;
            &lt;action&gt;index&lt;/action&gt;
            &lt;visible&gt;1&lt;/visible&gt;
        &lt;/export&gt;
    &lt;/pages&gt;
&lt;/import-export&gt;
```

Build the navigation cache:

```bash
console navigation:cache:remove
```

{% info_block warningBox &quot;Verification&quot; %}

Log in to the Back Office and verify that the **Import &amp; Export** section appears in the main navigation with **Import** and **Export** sub-items.

{% endinfo_block %}

### 5) Set up console

#### Register the console command

Register the `import:job:run` console command that processes pending import job runs:

**src/Pyz/Zed/Console/ConsoleDependencyProvider.php**

```php
use SprykerFeature\Zed\ProductExperienceManagement\Communication\Console\ImportJobRunConsole;

// In getConsoleCommands():
new ImportJobRunConsole(),
```

{% info_block warningBox &quot;Verification&quot; %}

Execute the following and verify it completes without errors:

```bash
console import:job:run
```

The output should indicate that it processed the next pending import job run, or that no pending runs are available.

{% endinfo_block %}

#### Configure the scheduler

Register the import job run processor to run on a schedule so pending imports are picked up automatically:

**src/Pyz/Zed/SymfonyScheduler/SymfonySchedulerConfig.php**

```php
&apos;import-job-run&apos; =&gt; [
    &apos;command&apos; =&gt; $logger . &apos;$PHP_BIN vendor/bin/console import:job:run&apos;,
    &apos;schedule&apos; =&gt; &apos;* * * * *&apos;,
],
```

{% info_block warningBox &quot;Verification&quot; %}

Verify that the scheduler configuration is loaded:

```bash
console scheduler:setup
```

Check that `import-job-run` appears in the list of scheduled jobs.

{% endinfo_block %}
</description>
            <pubDate>Wed, 29 Jul 2026 07:53:15 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/product-experience-management/latest/install-the-product-experience-management-feature.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/product-experience-management/latest/install-the-product-experience-management-feature.html</guid>
            
            
        </item>
        
    </channel>
</rss>
