Available in:  Ultimate/EE

The module lifecycle stage: Generally available version

The module has requirements for installation

How to explicitly enable or disable the module…

You may explicitly enable or disable the module in one of the following ways:

  • Via Deckhouse web UI. In the “System” → “System Management” → “Deckhouse” → “Modules” section, open the development-platform module and enable (or disable) the “Module enabled” toggle. Save changes.

    Example:

    Module enable/disable interface
  • Via Deckhouse CLI (d8).

    Use the d8 system module enable command for enabling, or d8 system module disable command for disabling the module (you need Deckhouse CLI (d8), configured to work with the cluster).

    Example of enabling the module:

    d8 system module enable development-platform
  • Using ModuleConfig development-platform.

    Set spec.enabled to true or false in ModuleConfig development-platform (create it if necessary).

    Example of a manifest to enable module development-platform:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: development-platform
    spec:
      enabled: true

How to configure the module…

You can configure the module in one of the following ways:

  • Via Deckhouse web UI.

    In the “System” → “System Management” → “Deckhouse” → “Modules” section, open the development-platform module and enable the “Advanced Settings” toggle. Fill in the required fields in the “Configuration” tab or specify the module settings in YAML format on the “YAML” tab, without the top-level settings key. Save the changes.

    Example:

    Module settings interface

    You can also edit the ModuleConfig object development-platform on the “YAML” tab in the module settings window (“System” → “System Management” → “Deckhouse” → “Modules”, open the module development-platform) by specifying the schema version in the spec.version parameter and the necessary module parameters in the spec.settings section.

  • Via Deckhouse CLI (d8) (requires Deckhouse CLI (d8) configured to work with the cluster).

    Edit the existing ModuleConfig development-platform (for more details on configuring Deckhouse Platform, see the documentation) by executing the following command:

    d8 k edit mc development-platform

    Make the necessary changes in the spec.settings section. If necessary, specify the schema version in the spec.version parameter. Save the changes.

    You can also create a manifest file for ModuleConfig development-platform using the example below. Fill in the spec.settings section with the required module parameters. If necessary, specify the schema version in the spec.version parameter.

    Apply the manifest using the following command (indicate the manifest file name):

    d8 k apply -f <FILENAME>

    Example of a manifest for ModuleConfig development-platform:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: development-platform
    spec:
      version: 2
      enabled: true
      settings: # Module parameters from the "Parameters" section below.

How to change the module release channel…

To change the module release channel, follow the steps in How do I change the release channel for a module?.

Requirements

To the Deckhouse Platform version: 1.72 and above.

To the versions of other modules:

  • user-authn: any version.

Conversions

The module is configured using the ModuleConfig resource, the schema of which contains a version number. When you apply an old version of the ModuleConfig schema in a cluster, automatic transformations are performed. To manually update the ModuleConfig schema version, the following steps must be completed sequentially for each version:

  • Updates from version 1 to 2:

    The postgres.mode and redis.mode parameters are now required: set them explicitly before upgrading. If PostgreSQL and Redis previously used the default deployment mode, set postgres.mode: internal and redis.mode: internal. ClickHouse is introduced in this release; if clickhouse.mode is not set, the module runs without ClickHouse (clickhouse.mode: external with an empty clickhouse.host).

Parameters

Schema version: 2

  • settings
    object
    • settings.actions
      object
      Action settings.

      Default: {}

      • settings.actions.logging
        object
        Action logging settings.

        Default: {}

        • settings.actions.logging.enabled
          boolean
          Writes action logs to stdout.

          Default: false

    • settings.additionalImagePullSecrets
      array of strings

      Names of additional Secrets for pulling images from private registries.

      The Secrets are added after registry-creds to the backend, workers, frontend, agent, PostgreSQL, Redis and ClickHouse pods. Create them in the d8-development-platform namespace.

      Default: []

      Examples:

      additionalImagePullSecrets: []
      
      additionalImagePullSecrets:
      - custom-registry-secret
      
      additionalImagePullSecrets:
      - additional-secret-1
      - additional-secret-2
      
    • settings.ai
      object
      AI agent and MCP settings.

      Default: {}

      • settings.ai.agent
        object
        AI agent settings.

        Default: {}

        • settings.ai.agent.audit
          object
          Settings of the AI agent run log.

          Default: {}

          • settings.ai.agent.audit.runsRetentionDays
            integer

            Minimum number of days the AI agent run log is kept.

            Records are removed by whole days once a day.

            Default: 30

            Allowed values: 1 <= X

            Example:

            runsRetentionDays: 30
            
      • settings.ai.mcp
        object
        MCP settings.

        Default: {}

        • settings.ai.mcp.audit
          object
          Settings of the MCP tool call log.

          Default: {}

          • settings.ai.mcp.audit.toolCallsRetentionDays
            integer

            Minimum number of days the MCP tool call log is kept.

            Records are removed by whole days once a day.

            Default: 30

            Allowed values: 1 <= X

            Example:

            toolCallsRetentionDays: 30
            
    • settings.clickhouse
      object

      ClickHouse connection settings.

      ClickHouse stores the historical data of the platform, such as the history of entity property changes.

      Default: {}

      • settings.clickhouse.database
        string

        Name of the ClickHouse database.

        DDP applies schema migrations to the database but does not create it with mode: external. Create the database before starting the module.

        Default: ddp

        Example:

        database: ddp
        
      • settings.clickhouse.host
        string

        Hostname or IP address of the ClickHouse server. Used with mode: external.

        Leave empty to run without the features that require ClickHouse.

        Default: ‘’

        Examples:

        host: ''
        
        host: clickhouse.example.com
        
        host: 192.168.1.102
        
      • settings.clickhouse.image
        string

        ClickHouse container image. Used with mode: internal.

        The value can include the registry address, for example registry.example.com/clickhouse/clickhouse-server:24.3.

        Default: clickhouse/clickhouse-server:24.3

        Example:

        image: clickhouse/clickhouse-server:24.3
        
      • settings.clickhouse.instance
        object
        Resources of the instance created when mode=managed.

        Default: {}

        • settings.clickhouse.instance.className
          string
          Name of the class of the managed module. The class defines allowed sizes and placement of the instance.

          Default: default

          Example:

          className: default
          
        • settings.clickhouse.instance.cpu
          object
          CPU of the instance.

          Default: {}

          • settings.clickhouse.instance.cpu.coreFraction
            string
            Guaranteed share of each core (requests).

            Default: 50%

            Pattern: ^[0-9]+%$

            Examples:

            coreFraction: 50%
            
            coreFraction: 100%
            
          • settings.clickhouse.instance.cpu.cores
            integer
            Number of CPU cores (limit).

            Default: 2

            Allowed values: 1 <= X

            Examples:

            cores: 2
            
            cores: 1
            
        • settings.clickhouse.instance.memory
          object
          Memory of the instance.

          Default: {}

          • settings.clickhouse.instance.memory.size
            string
            Memory size.

            Default: 8Gi

            Pattern: ^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([KMGTPE]i|[numkMGTPE]|[eE][+-]?[0-9]+)?$

            Example:

            size: 8Gi
            
        • settings.clickhouse.instance.persistentVolumeClaim
          object
          Disk of the instance.

          Default: {}

          • settings.clickhouse.instance.persistentVolumeClaim.size
            string
            Disk size.

            Default: 50Gi

            Pattern: ^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([KMGTPE]i|[numkMGTPE]|[eE][+-]?[0-9]+)?$

            Example:

            size: 50Gi
            
          • settings.clickhouse.instance.persistentVolumeClaim.storageClassName
            string
            StorageClass of the disk. If not set, the default StorageClass is used.

            Example:

            storageClassName: replicated
            
      • settings.clickhouse.mode
        string

        Required value

        ClickHouse deployment mode.

        • internal: The module deploys ClickHouse in the cluster.
        • external: The module connects to an existing ClickHouse instance, or runs without ClickHouse if host is empty.
        • managed: The module creates a ClickHouse instance with the managed-clickhouse module.

        Allowed values: internal, external, managed

      • settings.clickhouse.password
        string

        Password for connecting to ClickHouse.

        With mode: internal, the module creates the ClickHouse server with this password.

        Not used with mode: managed.

        Default: ddp

        Examples:

        password: ddp
        
        password: clickhouse_password
        
      • settings.clickhouse.port
        number

        ClickHouse native protocol port.

        Not used with mode: managed; the managed instance uses port 9000.

        Default: 9000

        Example:

        port: 9000
        
      • settings.clickhouse.propertyHistory
        object
        Storage settings of the history of entity property changes.

        Default: {}

        • settings.clickhouse.propertyHistory.cleanupInterval
          string
          Interval between removals of the history past its retention period, in the Go duration format.

          Default: 1h

          Example:

          cleanupInterval: 1h
          
        • settings.clickhouse.propertyHistory.retentionDays
          integer

          Minimum number of days the history of entity property changes is kept.

          With 0, the history is kept indefinitely.

          Default: 180

          Allowed values: 0 <= X

          Example:

          retentionDays: 180
          
      • settings.clickhouse.replication
        object
        Settings of data delivery from PostgreSQL to ClickHouse.

        Default: {}

        • settings.clickhouse.replication.outboxBatchSize
          integer
          Maximum number of records delivered in one replication batch.

          Default: 10000

          Allowed values: 1 <= X

        • settings.clickhouse.replication.outboxPollInterval
          string
          Interval between checks for records waiting for delivery, in the Go duration format.

          Default: 5s

          Examples:

          outboxPollInterval: 5s
          
          outboxPollInterval: 10s
          
        • settings.clickhouse.replication.outboxReindexEnabled
          boolean

          Rebuilds the queue indexes in PostgreSQL after a large batch of changes is delivered and frees the disk space they occupy.

          Disable it if database maintenance is managed outside DDP.

          Default: true

        • settings.clickhouse.replication.outboxReindexTimeout
          string

          Maximum duration of an index rebuild in the Go duration format.

          A rebuild that runs longer is stopped and repeated on the next attempt.

          Default: 10m

          Example:

          outboxReindexTimeout: 10m
          
      • settings.clickhouse.username
        string

        Username for connecting to ClickHouse.

        With mode: internal, the module creates the ClickHouse server with this user.

        Not used with mode: managed.

        Default: default

        Examples:

        username: default
        
        username: ddp
        
    • settings.datasources
      object
      Datasource settings.

      Default: {}

      • settings.datasources.logging
        object
        Datasource logging settings.

        Default: {}

        • settings.datasources.logging.enabled
          boolean
          Writes datasource logs to stdout.

          Default: false

    • settings.domain
      object
      Domain settings of the web interface.

      Default: {}

      • settings.domain.customDomain
        string

        Domain of the web interface. Used when useCustomDomain is true.

        Specify the domain without http:// or https://.

        Default: example.com

        Examples:

        customDomain: example.com
        
        customDomain: ddp.example.com
        
      • settings.domain.customSecretName
        string
        Name of the Secret with the TLS certificate. Used when useCustomSecret is true.

        Default: example-tls

        Examples:

        customSecretName: example-tls
        
        customSecretName: custom-tls-secret
        
      • settings.domain.prefix
        string
        Prefix of the domain generated from the publicDomainTemplate cluster parameter. Used when useCustomDomain is false.

        Default: ddp

        Examples:

        prefix: ddp
        
        prefix: dev-platform
        
      • settings.domain.useCustomDomain
        boolean
        Uses the domain from customDomain instead of the domain generated from prefix and the publicDomainTemplate cluster parameter.

        Default: false

      • settings.domain.useCustomSecret
        boolean

        Uses the TLS certificate from the Secret set in customSecretName.

        The Secret must be in the d8-development-platform namespace.

        Default: false

    • settings.events
      object
      Settings of platform events.

      Default: {}

      • settings.events.streamMaxLen
        integer

        Approximate maximum number of messages in each Redis event stream.

        A value of 0 or less removes the limit.

        Default: 10000

        Examples:

        streamMaxLen: 10000
        
        streamMaxLen: 5000
        
      • settings.events.ttl
        string

        Retention time of events in the Go duration format.

        Supported units: ns, us, ms, s, m, h. For days, use hours: 24h is one day.

        Default: 96h

        Examples:

        ttl: 96h
        
        ttl: 720h
        
        ttl: 30m
        
    • settings.extraCA
      string

      Additional CA certificates in the PEM format.

      DDP trusts these certificates when it connects to other services, for example to Dex by FQDN if Dex uses a certificate issued by your own CA. The certificates are mounted to /etc/ssl/certs/extraca.crt.

      Default: ‘’

      Examples:

      extraCA: ''
      
      extraCA: |
        -----BEGIN CERTIFICATE-----
        MIIEKTCCApGgAwIBAgIRAL6BA5jjXYI52wcc3b9UftAwDQYJKoZIhvcNAQELBQAw
        ...
        -----END CERTIFICATE-----
      
    • settings.logger
      object
      Logging settings of DDP components.

      Default: {}

      • settings.logger.executionLevel
        string

        Minimum level of messages shown in the execution log of a process, action, datasource synchronization or health check run, in the web interface and over WebSocket.

        Independent of level, which controls only the logs DDP writes to stdout.

        Default: info

        Allowed values: debug, info, warn, error

      • settings.logger.format
        string
        Log format.

        Default: logfmt

        Allowed values: json, logfmt

      • settings.logger.level
        string
        Log level.

        Default: info

        Allowed values: debug, info, warn, error

    • settings.postgres
      object
      PostgreSQL connection settings.

      Default: {}

      • settings.postgres.database
        string

        Name of the PostgreSQL database.

        With mode: internal, the module creates the database with this name on the first start with an empty volume.

        Default: ddp

        Examples:

        database: ddp
        
        database: development_platform
        
        database: my_database
        
      • settings.postgres.host
        string

        Hostname or IP address of the PostgreSQL server.

        With mode: internal, keep the postgres value.

        Not used with mode: managed.

        Default: postgres

        Examples:

        host: postgres
        
        host: localhost
        
        host: 192.168.1.100
        
        host: postgres.example.com
        
      • settings.postgres.image
        string

        PostgreSQL container image. Used with mode: internal.

        The value can include the registry address, for example registry.example.com/postgres:16.3.

        Default: postgres:16.3

        Examples:

        image: postgres:16.3
        
        image: registry.example.com/postgres:18.1
        
        image: my-registry.io/postgres:16.3
        
      • settings.postgres.instance
        object
        Resources of the instance created when mode=managed.

        Default: {}

        • settings.postgres.instance.className
          string
          Name of the class of the managed module. The class defines allowed sizes and placement of the instance.

          Default: default

          Example:

          className: default
          
        • settings.postgres.instance.cpu
          object
          CPU of the instance.

          Default: {}

          • settings.postgres.instance.cpu.coreFraction
            integer
            Guaranteed share of each core (requests). In percent.

            Default: 50

            Allowed values: 1 <= X <= 100

            Examples:

            coreFraction: 50
            
            coreFraction: 100
            
          • settings.postgres.instance.cpu.cores
            integer
            Number of CPU cores (limit).

            Default: 2

            Allowed values: 1 <= X

            Examples:

            cores: 2
            
            cores: 4
            
        • settings.postgres.instance.memory
          object
          Memory of the instance.

          Default: {}

          • settings.postgres.instance.memory.size
            string
            Memory size.

            Default: 4Gi

            Pattern: ^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([KMGTPE]i|[numkMGTPE]|[eE][+-]?[0-9]+)?$

            Example:

            size: 4Gi
            
        • settings.postgres.instance.persistentVolumeClaim
          object
          Disk of the instance.

          Default: {}

          • settings.postgres.instance.persistentVolumeClaim.size
            string
            Disk size.

            Default: 20Gi

            Pattern: ^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([KMGTPE]i|[numkMGTPE]|[eE][+-]?[0-9]+)?$

            Example:

            size: 20Gi
            
          • settings.postgres.instance.persistentVolumeClaim.storageClassName
            string
            StorageClass of the disk. If not set, the default StorageClass is used.

            Example:

            storageClassName: replicated
            
      • settings.postgres.mode
        string

        Required value

        PostgreSQL deployment mode.

        • internal: The module deploys PostgreSQL in the cluster.
        • external: The module connects to an existing PostgreSQL instance.
        • managed: The module creates a PostgreSQL instance with the managed-postgres module.

        Allowed values: internal, external, managed

      • settings.postgres.password
        string

        Password for connecting to PostgreSQL.

        With mode: internal, the module sets the password of the user on the first start with an empty volume.

        Default: ddp

        Examples:

        password: ddp
        
        password: secure_password_123
        
      • settings.postgres.port
        number

        PostgreSQL port.

        Not used with mode: managed; the managed instance uses port 5432.

        Default: 5432

        Examples:

        port: 5432
        
        port: 35432
        
      • settings.postgres.username
        string

        Username for connecting to PostgreSQL.

        With mode: internal, the module creates the user on the first start with an empty volume.

        Default: ddp

        Examples:

        username: ddp
        
        username: postgres
        
        username: db_user
        
    • settings.rbac
      object
      Access control settings.

      Default: {}

      • settings.rbac.ownerIsAdmin
        boolean
        Gives the resource owner administrator rights on the resource automatically.

        Default: true

      • settings.rbac.superAdminEmail
        string

        Required value

        Email of the super administrator: the user with this email has full access to the platform configuration.

        Example:

        superAdminEmail: admin@example.com
        
    • settings.redis
      object
      Redis connection settings.

      Default: {}

      • settings.redis.database
        string
        Redis database index.

        Default: 0

        Examples:

        database: '0'
        
        database: '1'
        
        database: '15'
        
      • settings.redis.host
        string

        Hostname or IP address of the Redis server.

        With mode: internal, keep the redis value.

        Not used with mode: managed.

        Default: redis

        Examples:

        host: redis
        
        host: localhost
        
        host: 192.168.1.101
        
        host: redis.example.com
        
      • settings.redis.image
        string

        Redis container image. Used with mode: internal.

        The value can include the registry address, for example registry.example.com/redis:7.4.0.

        Default: redis:7.4.0

        Examples:

        image: redis:7.4.0
        
        image: registry.example.com/redis:8.4.0
        
        image: my-registry.io/redis:7.4.0
        
      • settings.redis.instance
        object
        Resources of the instance created when mode=managed.

        Default: {}

        • settings.redis.instance.className
          string
          Name of the class of the managed module. The class defines allowed sizes and placement of the instance.

          Default: default

          Example:

          className: default
          
        • settings.redis.instance.cpu
          object
          CPU of the instance.

          Default: {}

          • settings.redis.instance.cpu.coreFraction
            string
            Guaranteed share of each core (requests).

            Default: 50%

            Pattern: ^[0-9]+%$

            Examples:

            coreFraction: 50%
            
            coreFraction: 100%
            
          • settings.redis.instance.cpu.cores
            integer
            Number of CPU cores (limit).

            Default: 1

            Allowed values: 1 <= X

            Examples:

            cores: 1
            
            cores: 2
            
        • settings.redis.instance.memory
          object
          Memory of the instance.

          Default: {}

          • settings.redis.instance.memory.size
            string
            Memory size.

            Default: 2Gi

            Pattern: ^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([KMGTPE]i|[numkMGTPE]|[eE][+-]?[0-9]+)?$

            Example:

            size: 2Gi
            
        • settings.redis.instance.persistentVolumeClaim
          object
          Disk of the instance.

          Default: {}

          • settings.redis.instance.persistentVolumeClaim.size
            string
            Disk size.

            Default: 10Gi

            Pattern: ^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([KMGTPE]i|[numkMGTPE]|[eE][+-]?[0-9]+)?$

            Example:

            size: 10Gi
            
          • settings.redis.instance.persistentVolumeClaim.storageClassName
            string
            StorageClass of the disk. If not set, the default StorageClass is used.

            Example:

            storageClassName: replicated
            
      • settings.redis.mode
        string

        Required value

        Redis deployment mode.

        • internal: The module deploys Redis in the cluster.
        • external: The module connects to an existing Redis instance.
        • managed: The module creates a Redis instance with the managed-valkey module.

        Allowed values: internal, external, managed

      • settings.redis.password
        string

        Password for connecting to Redis. Leave empty if Redis does not require a password.

        Not used with mode: managed.

        Default: ‘’

        Examples:

        password: ''
        
        password: redis_password
        
      • settings.redis.port
        number

        Redis port.

        Not used with mode: managed; the managed instance uses port 6379.

        Default: 6379

        Examples:

        port: 6379
        
        port: 6380
        
    • settings.security
      object
      Security settings.

      Default: {}

      • settings.security.headers
        object
        Settings of HTTP security headers, such as CSP and X-Frame-Options.

        Default: {}

        • settings.security.headers.csp
          object
          Content Security Policy (CSP) settings.

          Default: {}

          • settings.security.headers.csp.additionalSources
            string

            Additional CSP sources: a space-separated list of URLs or special values.

            The sources are added to the img-src, connect-src, frame-src and frame-ancestors directives.

            Default: ‘’

            Examples:

            additionalSources: ''
            
            additionalSources: https://cdn.example.com
            
            additionalSources: https://api.example.com https://cdn.example.com
            
          • settings.security.headers.csp.allowExternalImages
            boolean

            Allows loading images from any domain, for example icons from external CDNs.

            If disabled, only images from 'self' and data: are allowed.

            Default: false

            Examples:

            allowExternalImages: false
            
            allowExternalImages: true
            
          • settings.security.headers.csp.allowIframe
            boolean

            Allows embedding the web interface in iframes on any domain, for example for widgets.

            If disabled, only embedding on the same origin is allowed.

            Default: false

            Examples:

            allowIframe: false
            
            allowIframe: true
            
        • settings.security.headers.enabled
          boolean
          Sends security headers in HTTP responses.

          Default: true

          Examples:

          enabled: true
          
          enabled: false
          
        • settings.security.headers.xFrameOptions
          string

          Value of the X-Frame-Options header.

          • DENY: The page cannot be displayed in a frame.
          • SAMEORIGIN: The page can be displayed in a frame only on pages of the same origin.

          Default: SAMEORIGIN

          Allowed values: DENY, SAMEORIGIN

          Examples:

          xFrameOptions: DENY
          
          xFrameOptions: SAMEORIGIN
          
      • settings.security.secretKey
        string

        Required value

        Key that encrypts stored credentials.

        The key must be 16, 24 or 32 printable ASCII characters long. DDP does not start with a key that consists of one repeated character or is a commonly used value.

        To change the key without losing stored credentials, re-encrypt them in the web interface first, as described on the Getting started page.

        Examples:

        secretKey: mySecretKeyDefau
        
        secretKey: 16charssecretkey
        
        secretKey: 24characterssecretkey!!x
        
        secretKey: 32characterslongsecretkey1234xyz
        
    • settings.workers
      object
      Settings of the workers that process background tasks.

      Default: {}

      • settings.workers.maxTasks
        integer
        Maximum number of tasks each worker processes in parallel.

        Default: 10

        Allowed values: 1 <= X

        Examples:

        maxTasks: 5
        
        maxTasks: 10
        
        maxTasks: 20
        
      • settings.workers.replicas
        integer

        Number of worker replicas.

        Workers process tasks from the queue: datasource synchronization, action execution, health checks and AI agent runs over remote A2A.

        Default: 2

        Allowed values: 0 <= X

        Examples:

        replicas: 1
        
        replicas: 2
        
        replicas: 3