{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/shopware-6-configuration/latest.json",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/shopware/platform/trunk/config-schema.json",
    "sourceSha256": "9747f9fc9521f09262a7e8e88b04f62083ec01762f7be80dd251d3c9f19bb07a",
    "fileMatch": [
      "shopware.yml",
      "shopware.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "$defs": {
    "root": {
      "type": "object",
      "title": "Root",
      "properties": {
        "parameters": {
          "$ref": "#/$defs/parameters"
        },
        "shopware": {
          "$ref": "#/$defs/shopware"
        },
        "storefront": {
          "$ref": "#/$defs/storefront"
        },
        "elasticsearch": {
          "$ref": "#/$defs/elasticsearch"
        },
        "framework": {
          "$ref": "#/$defs/framework"
        }
      },
      "additionalProperties": true
    },
    "parameters": {
      "type": "object",
      "title": "Parameters",
      "additionalProperties": true
    },
    "shopware": {
      "type": "object",
      "title": "Shopware",
      "properties": {
        "http_cache": {
          "$ref": "#/$defs/http_cache"
        },
        "filesystem": {
          "$ref": "#/$defs/filesystem"
        },
        "cdn": {
          "$ref": "#/$defs/cdn"
        },
        "increment": {
          "$ref": "#/$defs/increment"
        },
        "api": {
          "$ref": "#/$defs/api"
        },
        "admin_worker": {
          "$ref": "#/$defs/admin_worker"
        },
        "auto_update": {
          "$ref": "#/$defs/auto_update"
        },
        "store": {
          "$ref": "#/$defs/shopware_store"
        },
        "analytics": {
          "$ref": "#/$defs/analytics"
        },
        "sitemap": {
          "$ref": "#/$defs/sitemap"
        },
        "deployment": {
          "$ref": "#/$defs/deployment"
        },
        "media": {
          "$ref": "#/$defs/media"
        },
        "dal": {
          "$ref": "#/$defs/dal"
        },
        "cart": {
          "$ref": "#/$defs/cart"
        },
        "number_range": {
          "$ref": "#/$defs/number_range"
        },
        "sales_channel_context": {
          "$ref": "#/$defs/sales_channel_context"
        },
        "html_sanitizer": {
          "$ref": "#/$defs/html_sanitizer"
        },
        "logger": {
          "$ref": "#/$defs/logger"
        },
        "cache": {
          "$ref": "#/$defs/cache"
        },
        "mail": {
          "$ref": "#/$defs/mail"
        },
        "profiler": {
          "$ref": "#/$defs/profiler"
        },
        "twig": {
          "$ref": "#/$defs/twig"
        },
        "dompdf": {
          "$ref": "#/$defs/dompdf"
        },
        "stock": {
          "$ref": "#/$defs/stock"
        },
        "messenger": {
          "$ref": "#/$defs/messenger"
        },
        "redis": {
          "$ref": "#/$defs/redis"
        },
        "usage_data": {
          "$ref": "#/$defs/usage_data"
        },
        "staging": {
          "$ref": "#/$defs/staging"
        },
        "system_config": {
          "type": "object"
        },
        "feature_toggle": {
          "$ref": "#/$defs/feature_toggle"
        },
        "product_stream": {
          "$ref": "#/$defs/product_stream"
        },
        "webhook": {
          "$ref": "#/$defs/webhook"
        }
      },
      "additionalProperties": false
    },
    "profiler": {
      "type": "object",
      "title": "Enabled profiler, available since 6.4.11.0",
      "properties": {
        "integrations": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "Symfony",
                  "Datadog",
                  "Tideways"
                ]
              },
              {
                "type": "string"
              }
            ]
          }
        }
      },
      "additionalProperties": false
    },
    "usage_data": {
      "type": "object",
      "title": "Usage data",
      "collection_enabled": {
        "type": "boolean"
      },
      "properties": {
        "gateway": {
          "type": "object",
          "properties": {
            "dispatch_enabled": {
              "type": "boolean"
            },
            "base_uri": {
              "type": "string"
            },
            "batch_size": {
              "type": "integer"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "staging": {
      "type": "object",
      "title": "Staging",
      "properties": {
        "mailing": {
          "type": "object",
          "properties": {
            "disable_delivery": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "storefront": {
          "type": "object",
          "properties": {
            "show_banner": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "administration": {
          "type": "object",
          "properties": {
            "show_banner": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "extensions": {
          "type": "object",
          "properties": {
            "disable": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        "sales_channel": {
          "type": "object",
          "properties": {
            "domain_rewrite": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "match": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "equal",
                      "regex",
                      "prefix"
                    ]
                  },
                  "replace": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          "additionalProperties": false
        },
        "elasticsearch": {
          "type": "object",
          "properties": {
            "check_for_existence": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "feature_toggle": {
      "type": "object",
      "title": "Feature toggle",
      "properties": {
        "enable": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "product_stream": {
      "type": "object",
      "title": "Product Stream",
      "properties": {
        "indexing": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "webhook": {
      "type": "object",
      "title": "Webhook",
      "properties": {
        "failure_strategy": {
          "type": "string",
          "enum": [
            "disable_on_threshold",
            "ignore"
          ],
          "default": "disable_on_threshold",
          "description": "@experimental stableVersion:v6.8.0 feature:WEBHOOK_FAILURE_STRATEGY this is a temporary solution until webhooks are refactored with a circuit breaker implementation"
        }
      },
      "additionalProperties": false
    },
    "twig": {
      "type": "object",
      "properties": {
        "allowed_php_functions": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "dompdf": {
      "type": "object",
      "properties": {
        "options": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "additionalProperties": false
    },
    "stock": {
      "type": "object",
      "properties": {
        "enable_stock_management": {
          "type": "boolean",
          "title": "Disable Shopware's default stock management system. This setting should be used if your ERP system manages the stock."
        }
      },
      "additionalProperties": false
    },
    "messenger": {
      "type": "object",
      "properties": {
        "routing_overwrite": {
          "type": "array",
          "title": "Allows to overwrite the routing configuration of the messenger component",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "enforce_message_size": {
          "type": "boolean",
          "title": "Enforce the message size to 256KB, bigger messages will be rejected with an exception",
          "default": false
        },
        "message_max_kib_size": {
          "type": "integer",
          "default": 1024,
          "title": "Defines the maximum message size in KiB. Messages exceeding this size will be rejected with an exception. If set to 0, no limit is enforced.",
          "description": "The current default value of 1024 KiB (1 MiB) is the maximum size supported by AWS SQS, which is most restrictive among the supported transports. See <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html>"
        },
        "stats": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "enabled": {
              "type": "boolean",
              "title": "Enable the messenger stats collection",
              "default": false
            },
            "time_span": {
              "type": "integer",
              "title": "The time span in seconds for the messenger stats. Be aware that high values can slow down message processing",
              "default": 300
            }
          },
          "additionalProperties": false
        },
        "scheduled_task": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "requeue_timeout": {
              "type": "integer",
              "title": "The timeout in hours after which a scheduled task is considered to be stuck and will be re-queued",
              "default": 12
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "search": {
      "type": "object",
      "properties": {
        "term_max_length": {
          "type": "integer",
          "title": "The maximum length of the search term"
        }
      },
      "additionalProperties": false
    },
    "mail": {
      "type": "object",
      "title": "Mail Template configuration, Available since 6.4.11.0",
      "properties": {
        "update_mail_variables_on_send": {
          "type": "boolean",
          "title": "Configure mail template variable update on each mail sending. This setting should be disabled on productive installations. "
        },
        "max_body_length": {
          "type": "integer",
          "title": "The maximum length of the mail body. If it's set to 0 there is no limit."
        }
      },
      "additionalProperties": false
    },
    "admin_worker": {
      "type": "object",
      "title": "Admin worker",
      "properties": {
        "enable_admin_worker": {
          "type": "boolean"
        },
        "enable_queue_stats_worker": {
          "type": "boolean"
        },
        "enable_notification_worker": {
          "type": "boolean"
        },
        "poll_interval": {
          "type": "integer"
        },
        "transports": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "api": {
      "type": "object",
      "title": "API",
      "properties": {
        "max_limit": {
          "type": [
            "integer",
            "null"
          ],
          "default": 100
        },
        "access_token_ttl": {
          "type": "string"
        },
        "refresh_token_ttl": {
          "type": "string"
        },
        "api_browser": {
          "$ref": "#/$defs/api_browser"
        },
        "store": {
          "$ref": "#/$defs/api_store"
        },
        "rate_limiter": {
          "$ref": "#/$defs/rate_limiter"
        }
      },
      "additionalProperties": false
    },
    "api_browser": {
      "type": "object",
      "title": "API browser",
      "properties": {
        "auth_required": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "rate_limiter": {
      "type": "object",
      "title": "RateLimiter",
      "properties": {
        "login": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "guest_login": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "oauth": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "reset_password": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "user_recovery": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "contact_form": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "notification": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "newsletter_form": {
          "$ref": "#/$defs/rate_limiter_config"
        },
        "cart_add_line_item_from": {
          "$ref": "#/$defs/rate_limiter_config"
        }
      },
      "additionalProperties": true
    },
    "rate_limiter_config": {
      "type": "object",
      "title": "Rate limiter config",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "policy": {
          "type": "string"
        },
        "reset": {
          "type": "string"
        },
        "limits": {
          "type": [
            "object",
            "array"
          ]
        }
      },
      "additionalProperties": true
    },
    "redis": {
      "type": "object",
      "properties": {
        "connections": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "dsn": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "api_store": {
      "type": "object",
      "title": "API store",
      "properties": {
        "context_lifetime": {
          "type": "string"
        },
        "max_limit": {
          "type": [
            "integer",
            "null"
          ],
          "default": 100
        }
      },
      "additionalProperties": false
    },
    "auto_update": {
      "type": "object",
      "title": "Auto update",
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "cache": {
      "type": "object",
      "title": "Cache",
      "properties": {
        "redis_prefix": {
          "type": "string"
        },
        "cache_compression": {
          "type": "boolean",
          "default": true,
          "description": "Controls the cache compression before the storage"
        },
        "cache_compression_method": {
          "type": "string",
          "enum": [
            "gzip",
            "zstd"
          ],
          "default": "gzip",
          "description": "Controls the cache compression method"
        },
        "disable_stampede_protection": {
          "type": "boolean",
          "default": false,
          "description": "Disables Symfony's cache stampede protection when using file-based sessions. Enable this ONLY if you experience session deadlocks (ABBA pattern) in environments using file-based sessions. This is a workaround for cases when Redis is not available. Trade-off: disabling stampede protection may cause increased backend load under high concurrency when cache entries expire simultaneously (cache stampede)."
        },
        "invalidation": {
          "$ref": "#/$defs/cache_invalidation"
        },
        "tagging": {
          "$ref": "#/$defs/cache_tags"
        },
        "twig": {
          "type": "object",
          "properties": {
            "string_template_renderer_cache_dir": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "cache_tags": {
      "type": "object",
      "properties": {
        "each_snippet": {
          "type": "boolean",
          "default": true,
          "description": "If enabled, each snippet will be cached with a unique tag. This allows to invalidate a single snippet. If disabled, the whole page will be invalidated on each snippet change."
        },
        "each_config": {
          "type": "boolean",
          "default": true,
          "description": "If enabled, each config will be cached with a unique tag. This allows to invalidate a single config. If disabled, the whole page will be invalidated on each config change."
        },
        "each_theme_config": {
          "type": "boolean",
          "default": true,
          "description": "If enabled, each theme config will be cached with a unique tag. This allows to invalidate a single theme config. If disabled, the whole page will be invalidated on each theme config change."
        }
      },
      "additionalProperties": false
    },
    "cache_invalidation": {
      "type": "object",
      "title": "Cache invalidation",
      "properties": {
        "delay_enabled": {
          "type": "boolean"
        },
        "delay_options": {
          "type": "object",
          "properties": {
            "storage": {
              "type": "string",
              "default": "mysql",
              "enum": [
                "cache",
                "redis",
                "mysql"
              ]
            },
            "dsn": {
              "type": "string",
              "default": "redis://localhost"
            },
            "connection": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "count": {
          "type": "integer"
        },
        "http_cache": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "product_listing_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "product_detail_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "product_review_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "product_search_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "product_suggest_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "product_cross_selling_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "payment_method_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "shipping_method_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "navigation_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "category_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "landing_page_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "language_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "currency_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "country_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "country_state_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "salutation_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "sitemap_route": {
          "$ref": "#/$defs/cache_invalidation_states"
        },
        "tag_invalidation_log_enabled": {
          "type": "boolean",
          "default": false,
          "description": "Enable logging of cache invalidation events."
        }
      },
      "additionalProperties": false
    },
    "cache_invalidation_states": {
      "type": "array",
      "title": "Cache invalidation states",
      "items": {
        "type": "string",
        "enum": [
          "logged-in",
          "cart-filled"
        ]
      }
    },
    "cart": {
      "type": "object",
      "title": "Cart",
      "properties": {
        "expire_days": {
          "type": "integer"
        },
        "compress": {
          "type": "boolean",
          "description": "All carts, which stored in redis, are compressed via gzcompress. This option is only available if redis is used."
        },
        "serialization_max_mb_size": {
          "type": "integer",
          "default": null,
          "description": "Limits the maximum size of the serialized cart (in MB). Helps prevent database errors (e.g. max_allowed_packet) by validating the payload size before persistence."
        },
        "compression_method": {
          "type": "string",
          "enum": [
            "gzip",
            "zstd"
          ],
          "default": "gzip",
          "description": "Controls the cache compression method"
        },
        "storage": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "mysql",
                "redis"
              ]
            },
            "config": {
              "type": "object",
              "properties": {
                "dsn": {
                  "type": "string",
                  "deprecationMessage": "The `dsn` option is deprecated and will be removed in v6.7.0 Please use the `connection` option instead."
                },
                "connection": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "number_range": {
      "type": "object",
      "title": "Number Range",
      "properties": {
        "increment_storage": {
          "description": "The storage engine used for the increments. Note that you need to configure also `config.dsn` if you want to use the `redis` storage.",
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "mysql",
                "redis"
              ]
            },
            {
              "type": "string"
            }
          ],
          "default": "mysql"
        },
        "config": {
          "type": "object",
          "properties": {
            "dsn": {
              "type": "string",
              "deprecationMessage": "The `dsn` option is deprecated and will be removed in v6.7.0 Please use the `connection` option instead."
            },
            "connection": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "cdn": {
      "type": "object",
      "title": "CDN",
      "properties": {
        "url": {
          "type": "string"
        },
        "strategy": {
          "type": "string"
        },
        "fastly": {
          "type": "object",
          "properties": {
            "api_key": {
              "type": "string",
              "title": "Fastly API key. Configuring this api key, will lead to purge media urls via fast purge requests"
            },
            "soft_purge": {
              "type": "string",
              "enum": [
                "1",
                "0"
              ],
              "default": "0",
              "Title": "Soft purge parameter will be passed to fastly API"
            },
            "max_parallel_invalidations": {
              "type": "integer",
              "default": 2,
              "title": "Max parallel requests to the external server"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "dal": {
      "type": "object",
      "title": "DAL",
      "properties": {
        "batch_size": {
          "type": "integer"
        },
        "max_rule_prices": {
          "type": "integer"
        },
        "versioning": {
          "type": "object",
          "properties": {
            "expire_days": {
              "type": "integer"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "deployment": {
      "type": "object",
      "title": "Deployment",
      "properties": {
        "blue_green": {
          "type": "boolean"
        },
        "cluster_setup": {
          "type": "boolean"
        },
        "runtime_extension_management": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "http_cache": {
      "title": "Http cache configuration",
      "type": "object",
      "properties": {
        "ignored_url_parameters": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "stale_while_revalidate": {
          "type": [
            "integer",
            "null"
          ],
          "default": null
        },
        "stale_if_error": {
          "type": [
            "integer",
            "null"
          ],
          "default": null
        },
        "soft_purge": {
          "type": "boolean",
          "default": false
        },
        "reverse_proxy": {
          "type": "object",
          "title": "Reverse proxy configuration",
          "properties": {
            "enabled": {
              "type": "boolean",
              "default": false
            },
            "ban_method": {
              "type": "string",
              "default": "BAN",
              "title": "HTTP method used to purge the cache at the remote server",
              "deprecationMessage": "The \"ban_method\" option has no effect anymore and therefore will be removed in 6.8.0."
            },
            "ban_headers": {
              "type": [
                "object",
                "null"
              ],
              "title": "The headers that should be send on a single purge",
              "deprecationMessage": "The \"ban_headers\" option has no effect anymore and therefore will be removed in 6.8.0."
            },
            "hosts": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "title": "List of reverse proxy servers"
            },
            "max_parallel_invalidations": {
              "type": "integer",
              "default": 2,
              "title": "Max parallel requests to the external server"
            },
            "use_varnish_xkey": {
              "type": "boolean",
              "default": false,
              "title": "Use the XKey Varnish feature",
              "deprecationMessage": "The \"use_varnish_xkey\" option has no effect anymore and therefore will be removed in 6.8.0."
            },
            "redis_url": {
              "type": "string",
              "title": "Redis URL",
              "deprecationMessage": "Using Varnish with Redis is deprecated, consider switching to Varnish with xkeys support"
            },
            "purge_all": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "ban_method": {
                  "type": "string",
                  "default": "BAN",
                  "title": "HTTP method used to purge the cache at the remote server",
                  "deprecationMessage": "The \"ban_method\" option has no effect anymore and therefore will be removed in 6.8.0."
                },
                "ban_headers": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "title": "The headers that should be send on a single purge",
                  "deprecationMessage": "The \"ban_headers\" option has no effect anymore and therefore will be removed in 6.8.0."
                },
                "urls": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "deprecationMessage": "The \"urls\" option has no effect anymore and therefore will be removed in 6.8.0."
                }
              },
              "additionalProperties": false
            },
            "fastly": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false
                },
                "instance_tag": {
                  "type": "string",
                  "default": ""
                },
                "api_key": {
                  "type": "string",
                  "title": "Fastly API key"
                },
                "service_id": {
                  "type": "string",
                  "title": "Fastly service ID"
                },
                "soft_purge": {
                  "type": "string",
                  "enum": [
                    "1",
                    "0"
                  ],
                  "default": "0"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "policies": {
          "type": "object",
          "title": "Named cache control policies",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "headers": {
                "type": "object",
                "properties": {
                  "cache_control": {
                    "type": "object",
                    "properties": {
                      "public": {
                        "type": "boolean"
                      },
                      "private": {
                        "type": "boolean"
                      },
                      "no_cache": {
                        "type": "boolean"
                      },
                      "no_store": {
                        "type": "boolean"
                      },
                      "no_transform": {
                        "type": "boolean"
                      },
                      "must_revalidate": {
                        "type": "boolean"
                      },
                      "proxy_revalidate": {
                        "type": "boolean"
                      },
                      "immutable": {
                        "type": "boolean"
                      },
                      "max_age": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "s_maxage": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "stale_while_revalidate": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "stale_if_error": {
                        "type": "integer",
                        "minimum": 0
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        },
        "default_policies": {
          "type": "object",
          "title": "Default policies per area",
          "properties": {
            "storefront": {
              "type": "object",
              "properties": {
                "cacheable": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "uncacheable": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": false
            },
            "store_api": {
              "type": "object",
              "properties": {
                "cacheable": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "uncacheable": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "route_policies": {
          "type": "object",
          "description": "Map route names to cache policies. Supports route#modifier pattern for granular script endpoint control (e.g., 'frontend.script_endpoint#hook-name').",
          "title": "Route name to policy mapping",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "filesystem": {
      "type": "object",
      "title": "Filesystem",
      "properties": {
        "private": {
          "$ref": "#/$defs/file_system_type"
        },
        "public": {
          "$ref": "#/$defs/file_system_type"
        },
        "temp": {
          "$ref": "#/$defs/file_system_type"
        },
        "theme": {
          "$ref": "#/$defs/file_system_type"
        },
        "asset": {
          "$ref": "#/$defs/file_system_type"
        },
        "sitemap": {
          "$ref": "#/$defs/file_system_type"
        },
        "allowed_extensions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "private_allowed_extensions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "private_local_download_strategy": {
          "enum": [
            "php",
            "x-sendfile",
            "x-accel"
          ]
        },
        "private_local_path_prefix": {
          "type": "string",
          "description": "Path prefix to be prepended to the path when using a local download strategy"
        },
        "batch_write_size": {
          "type": "integer",
          "default": 250,
          "description": "Batch size for writing files simultaneously using AsyncAwsS3WriteBatchAdapter"
        }
      },
      "additionalProperties": false
    },
    "file_system_type": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true
    },
    "html_sanitizer": {
      "type": "object",
      "title": "HTMLSanitizer",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "cache_dir": {
          "type": "string"
        },
        "cache_enabled": {
          "type": "boolean"
        },
        "sets": {
          "type": "array",
          "items": {
            "type": "object",
            "title": "Set",
            "properties": {
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "attributes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "custom_attributes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "attributes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "object",
            "title": "Field",
            "properties": {
              "name": {
                "type": "string"
              },
              "sets": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "increment": {
      "type": "object",
      "title": "Increment pools",
      "additionalProperties": true,
      "required": [
        "message_queue",
        "user_activity"
      ],
      "patternProperties": {
        "^.*$": {
          "$ref": "#/$defs/increment_config"
        }
      }
    },
    "increment_config": {
      "type": "object",
      "title": "Increment storage config",
      "properties": {
        "type": {
          "enum": [
            "mysql",
            "redis",
            "array"
          ],
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "redis"
              }
            }
          },
          "then": {
            "properties": {
              "config": {
                "type": "object",
                "oneOf": [
                  {
                    "required": [
                      "url"
                    ]
                  },
                  {
                    "required": [
                      "connection"
                    ]
                  }
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "deprecationMessage": "The `url` option is deprecated and will be removed in v6.7.0 Please use the `connection` option instead."
                  },
                  "connection": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "config"
            ],
            "type": "object"
          }
        }
      ],
      "additionalProperties": true
    },
    "logger": {
      "type": "object",
      "title": "Logger",
      "properties": {
        "enforce_throw_exception": {
          "type": "boolean"
        },
        "file_rotation_count": {
          "type": "integer"
        },
        "exclude_exception": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "exclude_events": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "error_code_log_levels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "media": {
      "type": "object",
      "title": "Media",
      "properties": {
        "enable_url_upload_feature": {
          "type": "boolean"
        },
        "enable_url_validation": {
          "type": "boolean"
        },
        "url_upload_max_size": {
          "type": "string"
        },
        "remote_thumbnails": {
          "type": "object",
          "properties": {
            "enable": {
              "type": "boolean"
            },
            "pattern": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "sitemap": {
      "type": "object",
      "title": "sitemap",
      "properties": {
        "batchsize": {
          "type": "integer"
        },
        "custom_urls": {
          "type": "null"
        },
        "excluded_urls": {
          "type": "null"
        },
        "scheduled_task": {
          "type": "object",
          "properties": {
            "enabled": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "shopware_store": {
      "type": "object",
      "title": "Shopware store",
      "properties": {
        "frw": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "analytics": {
      "type": "object",
      "title": "Analytics",
      "properties": {
        "gateway_url": {
          "type": "string",
          "description": "URL of the product analytics gateway"
        }
      },
      "additionalProperties": false
    },
    "sales_channel_context": {
      "type": "object",
      "title": "Sales channel context",
      "properties": {
        "expire_days": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "storefront": {
      "type": "object",
      "title": "Storefront bundle configuration",
      "properties": {
        "theme": {
          "type": "object",
          "title": "Theme loader configuration",
          "properties": {
            "config_loader_id": {
              "type": "string"
            },
            "theme_path_builder_id": {
              "type": "string"
            },
            "available_theme_provider": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "elasticsearch": {
      "title": "Elasticsearch",
      "type": "object",
      "properties": {
        "enabled": {
          "type": [
            "string",
            "boolean"
          ],
          "description": "Enable Elasticsearch Searching",
          "default": false
        },
        "indexing_enabled": {
          "type": [
            "string",
            "boolean"
          ],
          "description": "Enable Elasticsearch Indexing",
          "default": false
        },
        "indexing_batch_size": {
          "type": [
            "string",
            "integer"
          ],
          "description": "Elasticsearch Batch Size",
          "default": 100
        },
        "hosts": {
          "type": "string",
          "description": "Elasticsearch Hosts",
          "default": "localhost:9200"
        },
        "index_prefix": {
          "type": "string",
          "description": "Elasticsearch Index Prefix",
          "default": "sw"
        },
        "throw_exception": {
          "type": [
            "string",
            "boolean"
          ],
          "description": "Throw exception when Elasticsearch queries failing",
          "default": false
        },
        "product": {
          "type": "object",
          "properties": {
            "custom_fields_mapping": {
              "type": [
                "object",
                "null"
              ],
              "title": "Custom Field Mapping of Product"
            }
          },
          "additionalProperties": false
        },
        "administration": {
          "title": "Admin elasticsearch",
          "type": "object",
          "properties": {
            "hosts": {
              "type": "string",
              "description": "Admin Elasticsearch Hosts",
              "default": "localhost:9200"
            },
            "enabled": {
              "type": "boolean",
              "description": "Admin Elasticsearch Enabled",
              "default": false
            },
            "refresh_indices": {
              "type": "boolean",
              "description": "Admin Elasticsearch Refresh Indices",
              "default": false
            },
            "index_prefix": {
              "type": "string",
              "description": "Admin Elasticsearch Index Prefix",
              "default": "sw-admin"
            }
          },
          "additionalProperties": false
        },
        "ssl": {
          "type": "object",
          "properties": {
            "verify_server_cert": {
              "type": "boolean",
              "default": true
            },
            "cert_path": {
              "type": [
                "boolean",
                "string"
              ],
              "default": false
            },
            "cert_key_path": {
              "type": [
                "boolean",
                "string"
              ],
              "default": false
            },
            "sigV4": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false
                },
                "region": {
                  "type": [
                    "boolean",
                    "string"
                  ],
                  "default": false
                },
                "service": {
                  "type": [
                    "boolean",
                    "string"
                  ],
                  "default": false
                },
                "credentials_provider": {
                  "type": "object",
                  "properties": {
                    "key_id": {
                      "type": [
                        "boolean",
                        "string"
                      ],
                      "default": false
                    },
                    "secret_key": {
                      "type": [
                        "boolean",
                        "string"
                      ],
                      "default": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "index_settings": {
          "type": "object",
          "properties": {
            "number_of_shards": {
              "type": [
                "integer",
                "null"
              ],
              "default": 3
            },
            "number_of_replicas": {
              "type": [
                "integer",
                "null"
              ],
              "default": 3
            },
            "mapping.total_fields.limit": {
              "type": "integer",
              "default": 50000
            },
            "mapping.nested_fields.limit": {
              "type": "integer",
              "default": 500
            },
            "mapping.nested_objects.limit": {
              "type": "integer",
              "default": 1000000
            }
          },
          "additionalProperties": true
        },
        "analysis": {
          "type": "object",
          "title": "Analysis Config"
        },
        "dynamic_templates": {
          "type": "array",
          "title": "Dynamic Templates Config"
        },
        "use_language_analyzer": {
          "type": "boolean",
          "description": "Use language-specific analyzers for search queries. When disabled (false), searches use sw_whitespace_analyzer for more precise results.",
          "default": true
        }
      },
      "additionalProperties": false
    },
    "framework": {
      "type": "object",
      "properties": {
        "trusted_proxies": {
          "type": "string",
          "default": "",
          "description": "A list of IP ranges to be considered as proxies and trust the headers",
          "examples": [
            "REMOTE_ADDR",
            "private_ranges",
            "192.0.0.1,10.0.0.0/8"
          ]
        },
        "trusted_headers": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "x-forwarded-for",
              "x-forwarded-host",
              "x-forwarded-proto",
              "x-forwarded-port",
              "x-forwarded-prefix"
            ]
          }
        },
        "lock": {
          "type": "string",
          "default": "flock"
        },
        "session": {
          "type": "object",
          "properties": {
            "storage_factory_id": {
              "type": "string",
              "default": "session.storage.factory.native"
            },
            "handler_id": {
              "type": "string",
              "default": "",
              "examples": [
                "redis://localhost"
              ]
            },
            "name": {
              "type": "string",
              "default": "shop-",
              "description": "The cookie name of the session"
            },
            "cookie_lifetime": {
              "type": "integer",
              "default": 7200,
              "description": "The cookie lifetime of the session"
            }
          },
          "additionalProperties": true
        },
        "cache": {
          "type": "object",
          "properties": {
            "app": {
              "type": "string",
              "default": "cache.adapter.filesystem"
            },
            "system": {
              "type": "string",
              "default": "cache.adapter.filesystem"
            },
            "default_redis_provider": {
              "type": "string",
              "default": "redis://localhost",
              "examples": [
                "redis://%env(REDIS_URL)%"
              ]
            }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    }
  },
  "$ref": "#/$defs/root"
}
