{
    "$id": "http://glue42.com/gd/system.json",
    "$schema": "http://json-schema.org/draft-06/schema#",
    "description": "System configuration settings for **io.Connect Desktop**.",
    "title": "SystemConfig",
    "type": "object",
    "properties": {
        "advancedMode": {
            "description": "If `true`, will enable additional platform features such as support for UI integration of native apps (Java, .NET), classic groups, non-rectangular window groups, and more. The advanced mode is available only on Windows and is disabled by default. It's recommended to use this mode only if your use case absolutely requires using classic groups or visual integration of native apps (e.g., native apps participating in Workspaces or window groups), because enabling it activates heavy internal logic for processing native app windows which leads to overall performance disadvantages.",
            "type": "boolean",
            "default": false
        },
        "uiVersion": {
            "description": "Version string to be displayed in selected UI elements of **io.Connect Desktop** instead of the default product version. This version is for display purposes only and doesn't have to be a valid semantic version string. It will be used in various UI elements, including the splash screen, the tray menu, the About app, and more. The value defined here will be accessible via the `uiVersion` property of the `iodesktop` object injected in the global `window` object by the io.Connect API (i.e., `iodesktop.uiVersion`).",
            "type": "string"
        },
        "region": {
            "description": "**io.Connect Desktop** region.",
            "type": "string"
        },
        "env": {
            "description": "**io.Connect Desktop** environment.",
            "type": "string"
        },
        "systemConfigurations": {
            "description": "Settings for additional system configuration sources to be used by **io.Connect Desktop**.",
            "default": {
                "sources": [
                    {
                        "type": "path",
                        "source": "./config",
                        "configs": "*",
                        "priority": 1,
                        "required": true
                    }
                ]
            },
            "$ref": "#/definitions/config"
        },
        "enableGTF": {
            "description": "Activates the GTF setup.",
            "type": "boolean",
            "default": false
        },
        "flash": {
            "description": "Deprecated. Enables the Flash plugin.",
            "default": false,
            "oneOf": [
                {
                    "description": "If `true`, the built-in Flash plugin will be enabled.",
                    "type": "boolean",
                    "default": false
                },
                {
                    "description": "URL pointing to the location of a Flash plugin to be used.",
                    "type": "string"
                }
            ]
        },
        "server": {
            "$ref": "#/definitions/serverConfig"
        },
        "commands": {
            "$ref": "#/definitions/commandsConfig"
        },
        "searchProvider": {
            "description": "Settings for the built-in search provider of **io.Connect Desktop**.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the default search provider of **io.Connect Desktop**.",
                    "type": "boolean",
                    "default": true
                },
                "types": {
                    "description": "Predefined search types for which the provider will return results.",
                    "type": "array",
                    "items": {
                        "description": "Search type for which the provider will return results.",
                        "type": "string"
                    },
                    "default": [
                        "application",
                        "layout",
                        "workspace",
                        "swimlane",
                        "action"
                    ],
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "nameLookupService": {
            "description": "Configuration for the service which is used to retrieve the name of the logged in user.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the service for retrieving the name of the logged in user.",
                    "type": "boolean",
                    "default": false
                },
                "url": {
                    "description": "URL pointing to the service for retrieving the name of the logged in user.",
                    "type": "string"
                },
                "name": {
                    "description": "Path to the name values returned by the service (e.g., `{people[0].nameFirst} {people[0].nameLast}`.",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "auth": {
            "description": "Authentication settings.",
            "oneOf": [
                {
                    "description": "If `true`, will use the default authentication mechanism. Otherwise, authentication will be disabled and the system username will be used.",
                    "type": "boolean",
                    "default": false
                },
                {
                    "description": "Authentication will be skipped and the specified string will be used as a username. May not work in all environments.",
                    "type": "string"
                },
                {
                    "description": "Configuration settings for SSO, SSPI, Gateway or custom authentication mechanisms.",
                    "$ref": "authController.json"
                },
                {
                    "description": "Credentials that will be used for authentication.",
                    "type": "object",
                    "required": [
                        "username",
                        "password"
                    ],
                    "properties": {
                        "username": {
                            "description": "Username to be used for authentication.",
                            "type": "string"
                        },
                        "password": {
                            "description": "Password to be used for authentication.",
                            "type": "string"
                        }
                    },
                    "additionalProperties": false
                }
            ]
        },
        "ssoAuth": {
            "description": "Settings for SSO authentication.",
            "$ref": "authController.json"
        },
        "entraSSO": {
            "description": "Settings for using Microsoft Entra ID authentication. Available only on Windows. If enabled, Windows proof-of-possesion cookies will be automatically injected into requests to the specified Microsoft Entra ID login URLs.",
            "$ref": "#/definitions/entraSSOConfig"
        },
        "gw": {
            "description": "Configuration settings for the io.Connect Gateway.",
            "$ref": "gw.json"
        },
        "channels": {
            "description": "Settings for the io.Connect Channels.",
            "type": "object",
            "default": {
                "enabled": true
            },
            "properties": {
                "enabled": {
                    "description": "If `true`, the io.Connect Channels defined here will be available as system Channels to all interop-enabled apps.",
                    "type": "boolean",
                    "default": true
                },
                "definitions": {
                    "description": "Array of Channel definition objects describing the default system Channels. You can define as many Channels as you need.",
                    "type": "array",
                    "default": [],
                    "items": {
                        "$ref": "#/definitions/channelConfig"
                    }
                }
            },
            "additionalProperties": false
        },
        "windows": {
            "default": {},
            "$ref": "#/definitions/windowsConfig"
        },
        "windowManagement": {
            "default": {},
            "$ref": "#/definitions/windowManagementConfig"
        },
        "appStores": {
            "description": "Defines local or remote sources of app definitions.",
            "type": "array",
            "default": [],
            "items": {
                "$ref": "#/definitions/appStoreConfig"
            },
            "additionalProperties": false
        },
        "appStoresCustomError": {
            "description": "Defines a custom error to be returned when an app store fails to initialize.",
            "type": "object",
            "default": {
                "enabled": false
            },
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable using the custom error message for app stores.",
                    "type": "boolean"
                },
                "title": {
                    "description": "Title for the custom error message.",
                    "type": "string"
                },
                "body": {
                    "description": "Body for the custom error message.",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "appStoresTimeout": {
            "description": "Interval in milliseconds to wait for all required app stores to be initialized.",
            "type": "number",
            "default": 120000,
            "additionalProperties": false
        },
        "autoUpdater": {
            "description": "Settings for automatically updating **io.Connect Desktop**.",
            "type": "object",
            "required": [
                "updateSource"
            ],
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable automatically updating **io.Connect Desktop**.",
                    "type": "boolean",
                    "default": false
                },
                "updateSource": {
                    "description": "Settings for the source from which to retrieve the updates.",
                    "oneOf": [
                        {
                            "description": "Settings for retrieving updates from a static storage.",
                            "type": "object",
                            "required": [
                                "type",
                                "baseUrl"
                            ],
                            "properties": {
                                "type": {
                                    "description": "Type of the update source. Must be set to `\"StaticStorage\"` for static storage updates.",
                                    "type": "string",
                                    "const": "StaticStorage"
                                },
                                "baseUrl": {
                                    "description": "Base URL pointing to the static storage provider from which to retrieve the **io.Connect Desktop** updates.",
                                    "type": "string"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "description": "Settings for retrieving updates from a service.",
                            "type": "object",
                            "required": [
                                "type",
                                "baseUrl"
                            ],
                            "properties": {
                                "type": {
                                    "description": "Type of the update source. Must be set to `\"Service\"` for service-based updates.",
                                    "type": "string",
                                    "const": "Service"
                                },
                                "baseUrl": {
                                    "description": "Base URL pointing to the service from which to retrieve the **io.Connect Desktop** updates. The feed URL has the following shape: `<baseUrl>/<platform>/<platform-version>/<channel>`.",
                                    "type": "string"
                                },
                                "channel": {
                                    "description": "The update channel for the feed URL.",
                                    "type": "string"
                                }
                            },
                            "additionalProperties": false
                        }
                    ]
                },
                "updateIntervalMinutes": {
                    "description": "Interval in minutes at which to check for updates. The minimum allowed interval is 5 minutes.",
                    "type": "number",
                    "minimum": 5,
                    "default": 10
                },
                "notifyUser": {
                    "description": "If `true`, the user will be prompted to apply the platform update immediately after the update has been downloaded.",
                    "type": "boolean",
                    "default": true
                },
                "ui": {
                    "description": "Settings for the UI prompt displayed to the user after the platform update has been downloaded.",
                    "type": "object",
                    "properties": {
                        "title": {
                            "description": "Title for the dialog.",
                            "type": "string",
                            "default": "Platform Update"
                        },
                        "text": {
                            "description": "Text for the dialog box.",
                            "type": "string",
                            "default": "A new version is available. Restart the platform to apply the updates."
                        },
                        "restartButtonText": {
                            "description": "Text for the button for restarting the platform.",
                            "type": "string",
                            "default": "Restart"
                        },
                        "laterButtonText": {
                            "description": "Text for the button for postponing the platform update.",
                            "type": "string",
                            "default": "Later"
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "otel": {
            "description": "Settings for OpenTelemetry metrics, traces and logs.",
            "$ref": "otel.json"
        },
        "metrics": {
            "description": "Settings for the metrics generated by **io.Connect Desktop**.",
            "type": "object",
            "default": {
                "system": "Glue42",
                "summaryMetric": {
                    "enabled": true,
                    "collectInterval": 30,
                    "minimalFocusInterval": 1000,
                    "flushOnShutdown": true,
                    "allowExternalApplications": false,
                    "debugLoggingEnabled": false
                },
                "glueInfoMetric": {
                    "enabled": true,
                    "timeout": 300
                },
                "perfMetric": {
                    "enabled": false
                }
            },
            "properties": {
                "system": {
                    "description": "Name for the root metric system.",
                    "type": "string"
                },
                "summaryMetric": {
                    "description": "Settings for the Summary Metrics generated by **io.Connect Desktop**. Summary Metrics provide information about the focus time per app and are generated at regular intervals.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable Summary Metrics.",
                            "type": "boolean",
                            "default": true
                        },
                        "collectInterval": {
                            "description": "Interval in minutes at which to publish the gathered metrics. Can't be less than 30 minutes.",
                            "type": "number",
                            "default": 30
                        },
                        "minimalFocusInterval": {
                            "description": "The minimal focus time in milliseconds for which to record metric data (e.g., if you want to filter out accidental focus of apps).",
                            "type": "number",
                            "default": 1000
                        },
                        "flushOnShutdown": {
                            "description": "If `true`, the gathered metrics will be published on shutdown.",
                            "type": "boolean",
                            "default": true
                        },
                        "allowExternalApplications": {
                            "description": "If `true`, will allow the collection of focus information from external apps (e.g., Outlook, Excel).",
                            "type": "boolean",
                            "default": false
                        },
                        "debugLoggingEnabled": {
                            "description": "If `true`, will enable debug logging. For testing purposes only.",
                            "type": "boolean",
                            "default": false
                        }
                    },
                    "additionalProperties": false
                },
                "glueInfoMetric": {
                    "description": "Provides the platform version and the initialization configuration of the app.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable the platform info metric.",
                            "type": "boolean",
                            "default": true
                        },
                        "timeout": {
                            "description": "Interval in seconds to wait for the JavaScript library to initialize. If initialization isn't complete at the end of the specified interval, the metric will be populated with the available values and with `null` values for the rest of the properties.",
                            "type": "number",
                            "default": 300
                        }
                    },
                    "additionalProperties": false
                },
                "perfMetric": {
                    "description": "Provides performance information about the platform and the apps.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable the performance metric.",
                            "type": "boolean",
                            "default": true
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "autoStart": {
            "description": "Deprecated. Auto start settings for apps.",
            "type": "object",
            "default": {
                "priorityEnabled": true,
                "highPriorityBatchSize": 3,
                "highPriorityApplicationTimeout": 1000,
                "lowPriorityBatchSize": 5,
                "lowPriorityBatchDelay": 5000
            },
            "properties": {
                "priorityEnabled": {
                    "description": "Deprecated. If `true`, apps will be started by priority.",
                    "type": "boolean"
                },
                "highPriorityBatchSize": {
                    "description": "Deprecated. The number of high priority apps that will be started together.",
                    "type": "number"
                },
                "highPriorityApplicationTimeout": {
                    "description": "Deprecated. Interval in milliseconds to wait for each high priority app to start.",
                    "type": "number"
                },
                "lowPriorityBatchSize": {
                    "description": "Deprecated. The number of low priority apps that will be started together.",
                    "type": "number"
                },
                "lowPriorityBatchDelay": {
                    "description": "Deprecated. Interval in milliseconds to wait before starting the next low priority batch of apps.",
                    "type": "number"
                }
            },
            "additionalProperties": false
        },
        "splash": {
            "default": {},
            "$ref": "#/definitions/splashConfig"
        },
        "about": {
            "default": {},
            "$ref": "#/definitions/aboutConfig"
        },
        "singleApp": {
            "description": "URL pointing to an app. Using this option will run **io.Connect Desktop** with a single app.",
            "type": "string"
        },
        "showWindowsInTrayMenu": {
            "description": "Deprecated. Shows all windows in the system tray menu.",
            "type": "boolean",
            "default": true,
            "additionalProperties": false
        },
        "showAppsInTrayMenu": {
            "description": "Deprecated. Shows all apps in the system tray menu.",
            "type": "boolean",
            "default": true,
            "additionalProperties": false
        },
        "systemAppStores": {
            "description": "App stores for critical apps that must be auto started with the platform. System stores aren't monitored for changes.",
            "type": "array",
            "items": {
                "$ref": "#/definitions/appStoreConfig"
            },
            "additionalProperties": false
        },
        "nodePath": {
            "description": "The path to the Node.js environment that **io.Connect Desktop** will use to run Node.js apps. By default, the Node.js version bundled with **io.Connect Desktop** will be used.",
            "type": "string"
        },
        "emailClient": {
            "description": "Settings for the email client to use when sending emails via API or when submitting feedback.",
            "type": "object",
            "additionalProperties": false,
            "default": {
                "type": "Outlook"
            },
            "properties": {
                "type": {
                    "description": "Defines the type of the email client.",
                    "type": "string",
                    "enum": [
                        "Outlook",
                        "MAPI",
                        "SMTP"
                    ],
                    "default": "Outlook"
                },
                "config": {
                    "description": "Configuration for the email client.",
                    "type": "object",
                    "oneOf": [
                        {
                            "description": "Configuration for the SMTP email client.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "host": {
                                    "description": "The name or IP address of the host used for SMTP transactions.",
                                    "type": "string"
                                },
                                "port": {
                                    "description": "The port used for SMTP transactions.",
                                    "type": "number"
                                },
                                "user": {
                                    "description": "The username used for authentication.",
                                    "type": "string"
                                },
                                "password": {
                                    "description": "The password used for authentication.",
                                    "type": "string"
                                },
                                "from": {
                                    "description": "The email address of the sender.",
                                    "type": "string"
                                },
                                "enableSSL": {
                                    "description": "If `true`, the SMTP email client will use SSL to encrypt the connection.",
                                    "type": "boolean"
                                }
                            }
                        }
                    ]
                }
            }
        },
        "issueReporting": {
            "description": "Settings for sending feedback from **io.Connect Desktop**.",
            "type": "object",
            "default": {
                "attachmentsViewMode": "file",
                "mail": {
                    "enabled": false
                },
                "jira": {
                    "enabled": false
                },
                "folderAttachments": []
            },
            "properties": {
                "enabled": {
                    "description": "If `true`, the Feedback Form will be enabled in **io.Connect Desktop**. Set to `false` to disable it. When disabled, the Feedback Form won't be displayed automatically in case of platform crashes and the users won't be able to access it from the platform tray menu or from the \"Feedback\" button of your interop-enabled apps.",
                    "type": "boolean",
                    "default": true
                },
                "attachScreenshots": {
                    "description": "If `true`, will attach screenshots of all monitors to the issue report.",
                    "type": "boolean"
                },
                "attachmentsViewMode": {
                    "description": "Defines how the attachments will be displayed in the Feedback Form. Possible values are `\"file\"` or `\"category\"`. If set to `\"file\"`, all attachable files will be displayed as separate items, otherwise several main categories will be displayed and if the category is selected by the user, all files in it will be attached.",
                    "type": "string",
                    "enum": [
                        "file",
                        "category"
                    ],
                    "default": "file"
                },
                "jira": {
                    "description": "Jira configuration.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable the option to create a Jira ticket when submitting the issue.",
                            "type": "boolean",
                            "default": "false"
                        },
                        "url": {
                            "description": "Link to the Jira API.",
                            "type": "string"
                        },
                        "user": {
                            "description": "The username of the user who will create the ticket.",
                            "type": "string"
                        },
                        "password": {
                            "description": "The password of the user who will create the ticket.",
                            "type": "string"
                        },
                        "project": {
                            "description": "The name of the project in which the ticket will be created.",
                            "type": "string"
                        },
                        "preferredRole": {
                            "description": "Preferred role in the Jira project.",
                            "type": "string"
                        },
                        "preferredRoleDescriptor": {
                            "description": "Description of the preferred role in the Jira project.",
                            "type": "string"
                        },
                        "useProjectLeadAsPreferredAssignee": {
                            "description": "If `true`, will assign the ticket to the project lead.",
                            "type": "boolean"
                        },
                        "tlsVersion": {
                            "description": "Force TLS protocol version, e.g. `\"TLS1.2\"`.",
                            "type": "string"
                        },
                        "noPriority": {
                            "description": "If `true`, the ticket \"Priority\" field won't be set.",
                            "type": "boolean"
                        },
                        "noEnvironment": {
                            "description": "If `true`, the ticket \"Environment\" field won't be set.",
                            "type": "boolean"
                        }
                    },
                    "additionalProperties": false
                },
                "mail": {
                    "description": "Email configuration.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable the option to send an email when submitting the issue.",
                            "type": "boolean",
                            "default": "false"
                        },
                        "action": {
                            "description": "Defines the action to be performed when submitting the Feedback Form. Possible values are `\"send\"` or `\"display\"`. If set to `\"send\"`, the email will be sent immediately (if possible, depending on security settings). If set to `\"display\"`, an email draft will be shown to be reviewed and sent manually by the user. Valid only for Outlook and MAPI email clients.",
                            "type": "string",
                            "enum": [
                                "send",
                                "display"
                            ],
                            "default": "send"
                        },
                        "zipAttachments": {
                            "description": "If `true`, the attachments will be archived.",
                            "type": "boolean"
                        },
                        "bugSubjectPrefix": {
                            "description": "Prefix for the email subject when the issue is a bug.",
                            "type": "string"
                        },
                        "reportSubjectPrefix": {
                            "description": "Prefix for the email subject when sending feedback.",
                            "type": "string"
                        },
                        "recipients": {
                            "description": "List of email addresses to which the issue report will be sent.",
                            "type": "array",
                            "items": {
                                "type": "string",
                                "description": "Single email address."
                            }
                        },
                        "allowEditRecipients": {
                            "description": "If `true`, the user will be allowed to manually add more recipients.",
                            "type": "boolean"
                        },
                        "maxAttachmentMB": {
                            "description": "The maximum size of the attachments in MB.",
                            "type": "string"
                        }
                    },
                    "additionalProperties": false
                },
                "folderAttachments": {
                    "description": "Attachments configuration.",
                    "type": "array",
                    "items": {
                        "description": "Describes an attachment.",
                        "type": "object",
                        "properties": {
                            "name": {
                                "description": "Name for the attachment.",
                                "type": "string"
                            },
                            "folderPath": {
                                "description": "Path to the folder that will be attached.",
                                "type": "string"
                            },
                            "zipFolderPath": {
                                "description": "Path in the archived folder.",
                                "type": "string"
                            },
                            "filter": {
                                "description": "Regex filter that will be applied to each file in the folder - e.g., `\"*.log\"`.",
                                "type": "string"
                            },
                            "category": {
                                "description": "Category for the attached item.",
                                "type": "string",
                                "default": "Logs"
                            },
                            "selected": {
                                "description": "If `true`, the category (or all files under this category) in the Feedback Form will be selected by default.",
                                "type": "boolean",
                                "default": true
                            },
                            "recursive": {
                                "description": "If `true`, will collect and attach all files from all folders located inside the specified folder. Set to `false` to collect the files only in the specified folder.",
                                "type": "boolean",
                                "default": true
                            }
                        },
                        "required": [
                            "name",
                            "folderPath",
                            "zipFolderPath",
                            "filter",
                            "category"
                        ],
                        "additionalProperties": false
                    },
                    "additionalProperties": false
                },
                "appVersion": {
                    "description": "Deprecated. Set automatically from the `\"version\"` top-level property.",
                    "type": "string"
                },
                "buildVersion": {
                    "description": "Deprecated. Set automatically from the `\"build\"` top-level property.",
                    "type": "string"
                },
                "environment": {
                    "description": "Deprecated. Set automatically from the `\"env\"` top-level property.",
                    "type": "string"
                },
                "region": {
                    "description": "Deprecated. Set automatically from the `\"region\"` top-level property.",
                    "type": "string"
                },
                "form": {
                    "description": "Object that can be used to specify various properties for the io.Connect Window containing the Feedback Form, or to provide a URL pointing to a custom Feedback app.",
                    "type": "object",
                    "default": {
                        "showEnvironment": false
                    },
                    "properties": {
                        "width": {
                            "description": "Width in pixels for the Feedback Form.",
                            "type": "number"
                        },
                        "height": {
                            "description": "Height in pixels for the Feedback Form.",
                            "type": "number"
                        },
                        "url": {
                            "description": "URL pointing to the location of the Feedback app.",
                            "type": "string"
                        },
                        "transparent": {
                            "description": "If `true`, the io.Connect Window containing the Feedback Form will have a transparent background.",
                            "type": "boolean"
                        },
                        "showEnvironmentInfo": {
                            "description": "If `true`, the Feedback Form will show a field with details about the io.Connect environment.",
                            "type": "boolean",
                            "default": false
                        }
                    },
                    "additionalProperties": true
                }
            },
            "additionalProperties": false
        },
        "crashReporter": {
            "description": "Settings for reporting crashes.",
            "type": "object",
            "default": {
                "enabled": true,
                "folderPath": "%IO_CD_USER_DATA_DIR%/crashes",
                "companyName": "Interop Inc",
                "productName": "io.Connect Desktop",
                "output": {
                    "type": "local"
                }
            },
            "properties": {
                "enabled": {
                    "description": "If `true`, the crash reporter will be enabled.",
                    "type": "boolean"
                },
                "folderPath": {
                    "description": "Location for the crash reporter logging and memory dumps when the output type is set to `\"local\"`.",
                    "type": "string"
                },
                "companyName": {
                    "description": "The company name to be included in the crash report.",
                    "type": "string"
                },
                "productName": {
                    "description": "The product name to be included in the crash report.",
                    "type": "string"
                },
                "output": {
                    "description": "Output settings for the crash reporter.",
                    "type": "object",
                    "properties": {
                        "type": {
                            "description": "Type of the crash reporter output. Crash reports can be saved locally, sent to a REST service, or to a Backtrace server.",
                            "type": "string",
                            "enum": [
                                "local",
                                "server",
                                "backtrace"
                            ]
                        },
                        "serverUrl": {
                            "description": "URL pointing to the server that will receive the crash report if the output type is set to `\"server\"`.",
                            "type": "string"
                        },
                        "backTraceConfig": {
                            "description": "Settings for the Backtrace client.",
                            "type": "object",
                            "properties": {
                                "token": {
                                    "description": "Unique token for sending data to Backtrace.",
                                    "type": "string"
                                },
                                "url": {
                                    "description": "URL pointing to the Backtrace server.",
                                    "type": "string"
                                },
                                "handleMainExceptions": {
                                    "description": "Enables sending unhandled errors in the main process to Backtrace. Set to `\"all\"` to send both uncaught exceptions and unhandled `Promise` rejections. Set to `\"only-errors\"` to send only uncaught exceptions.",
                                    "type": "string",
                                    "enum": [
                                        "all",
                                        "only-errors"
                                    ]
                                }
                            },
                            "additionalProperties": false,
                            "required": [
                                "token",
                                "url"
                            ]
                        },
                        "dumps": {
                            "description": "Settings for handling the dump files for crash reports.",
                            "type": "object",
                            "properties": {
                                "limit": {
                                    "description": "Limit for the number of dump files to keep. When a new dump file is created, the oldest one will be deleted to conform with the file limit.",
                                    "type": "number"
                                },
                                "deleteOnSent": {
                                    "description": "If `true`, when a dump file is sent, it will be deleted instead of moved to the `/sent` folder.",
                                    "type": "boolean"
                                }
                            }
                        }
                    },
                    "if": {
                        "properties": {
                            "type": {
                                "enum": [
                                    "server"
                                ]
                            }
                        }
                    },
                    "then": {
                        "required": [
                            "serverUrl"
                        ]
                    },
                    "additionalProperties": false
                },
                "ignoreSystemCrashHandler": {
                    "description": "If `true`, crashes generated in the main process won't be forwarded to the system crash handler.",
                    "type": "boolean",
                    "default": false
                }
            },
            "required": [
                "companyName",
                "productName",
                "folderPath",
                "enabled",
                "output"
            ],
            "additionalProperties": false
        },
        "useEmbeddedShell": {
            "description": "If `true`, will use the embedded shell app.",
            "type": "boolean",
            "default": true
        },
        "registerHtmlContainer": {
            "description": "If `true`, will inject the `htmlContainer` object. It will be used for legacy apps.",
            "type": "boolean",
            "default": false
        },
        "windowAvailableOnURLChanged": {
            "description": "Deprecated. If `true`, will return the `window` object via the `onUrlChanged()` method.",
            "type": "boolean"
        },
        "shutdownOnEmptyAppList": {
            "description": "If `true`, will show a dialog to the user when no apps are available (including a shell app). Closing the dialog will shutdown **io.Connect Desktop**. Otherwise, the platform will continue running even if no apps are available.",
            "type": "boolean",
            "default": true
        },
        "closeRunningInstancesOnAppRemoved": {
            "description": "If `true`, all running app instances will be closed when the app definition is disabled or removed.",
            "type": "boolean",
            "default": false
        },
        "licREST": {
            "description": "URL pointing to a service for validating the license.",
            "type": "string"
        },
        "activityColors": {
            "description": "Deprecated. Colors that will be used for the borders of activities.",
            "type": "array",
            "items": {
                "type": "string"
            },
            "default": [
                "#4b5d60",
                "#394e78",
                "#31758c",
                "#318c71",
                "#657839"
            ]
        },
        "hotkeys": {
            "description": "Settings for registering and using hotkeys in **io.Connect Desktop**.",
            "default": true,
            "oneOf": [
                {
                    "description": "If `true`, hotkeys will be enabled.",
                    "type": "boolean"
                },
                {
                    "$ref": "#/definitions/hotkeys"
                }
            ]
        },
        "swimlane": {
            "$ref": "#/definitions/swimlaneConfig"
        },
        "extensions": {
            "description": "List of Chrome extensions to be added.",
            "type": "array",
            "items": {
                "oneOf": [
                    {
                        "type": "object",
                        "properties": {
                            "allowFileAccess": {
                                "description": "If `true`, will allow extensions to access the file system.",
                                "type": "boolean",
                                "default": false
                            },
                            "path": {
                                "description": "Path to the extension.",
                                "type": "string"
                            }
                        },
                        "required": [
                            "path"
                        ]
                    },
                    {
                        "description": "Path to the extension.",
                        "type": "string"
                    }
                ]
            }
        },
        "devToolsExtensions": {
            "description": "List of Chrome DevTools extensions to be added.",
            "type": "array",
            "items": {
                "oneOf": [
                    {
                        "type": "object",
                        "properties": {
                            "allowFileAccess": {
                                "description": "If `true`, will allow extensions to access the file system.",
                                "type": "boolean",
                                "default": false
                            },
                            "path": {
                                "description": "Path to the extension.",
                                "type": "string"
                            }
                        },
                        "required": [
                            "path"
                        ]
                    },
                    {
                        "description": "Path to the extension.",
                        "type": "string"
                    }
                ]
            }
        },
        "layouts": {
            "default": {},
            "$ref": "#/definitions/layoutsConfig"
        },
        "themes": {
            "description": "Settings for the io.Connect themes.",
            "type": "object",
            "default": {
                "syncWithDefaultOSAppMode": false,
                "setThemesMethodName": "T42.Themes.Change",
                "getThemesMethodName": "T42.Themes.Get",
                "toggleThemesMethodName": "T42.Themes.Toggle",
                "sharedContextName": "T42.Themes",
                "availableThemes": []
            },
            "properties": {
                "availableThemes": {
                    "description": "List of objects describing the available platform themes.",
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "description": "Unique name for the theme. Will be used as a CSS class selector applied to the `<html>` element of the web app.",
                                "type": "string"
                            },
                            "displayName": {
                                "description": "Display name for the theme.",
                                "type": "string"
                            },
                            "description": {
                                "description": "Optional description for the theme.",
                                "type": "string"
                            },
                            "background": {
                                "description": "Background color for the theme in hex format (e.g., `\"#FFFFFF\"`).",
                                "type": "string"
                            },
                            "groupIcon": {
                                "description": "The name of an icon file that will be used in the Windows taskbar for io.Connect Window groups. The file must be in ICO format and must be located in the `<installation_location>/assets/images` folder.",
                                "type": "string"
                            },
                            "groupIconURL": {
                                "description": "If you have the same icon for some or all apps and want to group them with window groups in the Windows taskbar, you should provide the URL of this icon as specified in the app definitions. This icon won't be downloaded - the icon URL specified here will be used only for creating an icon ID that the OS needs for grouping icons in the Windows taskbar.",
                                "type": "string"
                            },
                            "tabGroupIcon": {
                                "description": "The name of an icon file that will be used in the Windows taskbar for io.Connect Window tab groups. The file must be in ICO format and must be located in the `<installation_location>/assets/images` folder.",
                                "type": "string"
                            },
                            "loadingAnimation": {
                                "description": "Path to a loading animation in XAML format to be used by the platform for io.Connect Windows when using classic groups. This must be a local file. The path can be absolute or relative and you can use environment variables.",
                                "type": "string"
                            }
                        },
                        "required": [
                            "name"
                        ],
                        "additionalProperties": false
                    },
                    "default": [
                        {
                            "name": "dark",
                            "displayName": "Dark",
                            "description": "Dark theme for the io.Connect platform."
                        },
                        {
                            "name": "light",
                            "displayName": "Light",
                            "description": "Light theme for the io.Connect platform."
                        }
                    ]
                },
                "syncWithDefaultOSAppMode": {
                    "description": "If `true`, will synchronize the io.Connect theme with the default OS app mode.",
                    "type": "boolean",
                    "default": false
                },
                "setThemesMethodName": {
                    "description": "The name of the registered Interop method for changing the themes.",
                    "type": "string",
                    "default": "T42.Themes.Change"
                },
                "getThemesMethodName": {
                    "description": "The name of the registered Interop method for retrieving the themes.",
                    "type": "string",
                    "default": "T42.Themes.Get"
                },
                "toggleThemesMethodName": {
                    "description": "The name of the registered Interop method for toggling the themes.",
                    "type": "string",
                    "default": "T42.Themes.Toggle"
                },
                "sharedContextName": {
                    "description": "Name of the shared context object for the themes.",
                    "type": "string",
                    "default": "T42.Themes"
                },
                "convertThemesConfigToCSS": {
                    "description": "If `true`, the theme settings for the io.Connect classic groups defined in the `themes.json` file will be converted to CSS variables and injected in the Web Group App. Set to `true` if you are using classic groups instead of web groups and want to automatically migrate your custom theme styles to the Web Group App. This is necessary, because, as of **io.Connect Desktop** 10.0, web groups are the default mechanism for handling io.Connect windows in the default platform mode.",
                    "type": "boolean",
                    "default": false
                }
            },
            "additionalProperties": false
        },
        "applications": {
            "default": {},
            "$ref": "#/definitions/applicationsConfig"
        },
        "citrix": {
            "default": {},
            "$ref": "#/definitions/citrixConfig"
        },
        "folders": {
            "default": {},
            "$ref": "#/definitions/foldersConfig"
        },
        "envVars": {
            "description": "Settings for defining environment variables that will be set when **io.Connect Desktop** starts. Environment variables can be defined both in local and in remote system configuration sources. The variables specified in the configuration source with the highest priority will override the values of the variables with the same names in all other lower priority configuration files.",
            "type": "object",
            "properties": {
                "set": {
                    "description": "Environment variables in the form of key/value pairs that will be set on platform startup. Values can contain references to other environment variables by using the `%VAR_NAME%` format. To clear the value of an environment variable, set it to an empty string.",
                    "type": "object",
                    "additionalProperties": {
                        "type": [
                            "string",
                            "number",
                            "boolean"
                        ]
                    }
                }
            },
            "additionalProperties": false
        },
        "build": {
            "description": "Allows replacing the default product name with a custom one. Visible in different UI components such as the splash screen and the \"About\" app.",
            "type": "string",
            "default": "io.Connect Desktop"
        },
        "legacy": {
            "default": {},
            "$ref": "#/definitions/legacyConfig"
        },
        "proxy": {
            "description": "Settings for the Electron proxy configuration. For more details about the available settings and example usage, see the [`ProxyConfig`](https://www.electronjs.org/docs/latest/api/structures/proxy-config) object definition in the Electron documentation.",
            "type": "object",
            "properties": {
                "mode": {
                    "description": "Proxy mode.",
                    "type": "string",
                    "enum": [
                        "direct",
                        "auto_detect",
                        "pac_script",
                        "fixed_servers",
                        "system"
                    ]
                },
                "pacScript": {
                    "description": "URL pointing to a proxy auto-configuration script (PAC).",
                    "type": "string"
                },
                "proxyRules": {
                    "description": "Rules indicating which proxies to use.",
                    "type": "string"
                },
                "proxyBypassRules": {
                    "description": "Rules indicating which URLs should bypass the proxy settings.",
                    "type": "string"
                },
                "legacy": {
                    "description": "Deprecated. Legacy io.Connect proxy settings.",
                    "type": "object",
                    "properties": {
                        "useSystemSettings": {
                            "description": "If `true`, will use the OS proxy settings.",
                            "type": "boolean"
                        },
                        "pacScript": {
                            "description": "URL pointing to a proxy auto-configuration script (PAC).",
                            "type": "string"
                        },
                        "url": {
                            "description": "Proxy URL to use.",
                            "type": "string"
                        },
                        "rules": {
                            "description": "Semicolon-delimited list of proxy rules. For syntax, see the Electron [Set Proxy Config](https://www.electronjs.org/docs/latest/api/session#sessetproxyconfig) documentation.",
                            "type": "string"
                        },
                        "bypassRules": {
                            "description": "Semicolon-delimited list of host patterns that will always use direct connection. For syntax, see the Electron [Set Proxy Config](https://www.electronjs.org/docs/latest/api/session#sessetproxyconfig) documentation.",
                            "type": "string"
                        },
                        "autodetectTimeoutMs": {
                            "description": "Interval in milliseconds to wait for response when attempting to detect a PAC script.",
                            "type": "number"
                        }
                    }
                }
            }
        },
        "extends": {
            "description": "Deprecated. List of objects defining local or remote locations of system configuration files that will be extended by the current configuration in this file.",
            "type": "array",
            "items": {
                "$ref": "#/definitions/extendsConfig"
            }
        },
        "extendedBy": {
            "description": "Deprecated. List of objects defining local or remote locations of system configuration files that will extend the current configuration in this file.",
            "type": "array",
            "items": {
                "$ref": "#/definitions/extendsConfig"
            }
        },
        "tray": {
            "default": {},
            "$ref": "#/definitions/trayConfig"
        },
        "allowMultipleInstances": {
            "description": "Specifies whether to completely disable running multiple instances of **io.Connect Desktop**, or to allow it only if they are running in different environments and regions.",
            "type": "string",
            "default": "inDifferentEnvRegion",
            "enum": [
                "never",
                "inDifferentEnvRegion"
            ]
        },
        "perfCollector": {
            "description": "Settings for the internal performance data collector.",
            "type": "object",
            "properties": {
                "intervalSec": {
                    "description": "Interval in seconds for publishing performance data.",
                    "type": "number"
                },
                "eventDelaySec": {
                    "description": "In case of specific events (app started or stopped) performance data will be published outside of the publishing interval. This setting defines an interval in seconds to wait before publishing the data after the event. If another event occurs during the delay window, the initial publishing is canceled and a new one is scheduled after the specified delay interval.",
                    "type": "number"
                },
                "memory": {
                    "description": "If `true`, will collect memory data.",
                    "type": "boolean",
                    "default": true
                },
                "cpu": {
                    "description": "If `true`, will collect CPU data.",
                    "type": "boolean",
                    "default": true
                }
            },
            "additionalProperties": false
        },
        "performanceTracker": {
            "description": "Deprecated. Settings for the internal performance tracker.",
            "type": "object",
            "default": {},
            "properties": {
                "enable": {
                    "description": "If `true`, will enable tracking apps in the Application Monitor.",
                    "type": "boolean",
                    "default": false
                },
                "trackAutoStarted": {
                    "description": "If `true`, will track the performance of auto started io.Connect apps.",
                    "type": "boolean",
                    "default": false
                },
                "isTrackingEnabled": {
                    "description": "If `true`, will enable gathering and sending app performance information to the Performance Report.",
                    "type": "boolean",
                    "default": false
                }
            },
            "additionalProperties": false
        },
        "protocolHandler": {
            "description": "Settings for the default and any custom protocol handlers in **io.Connect Desktop**.",
            "default": {},
            "anyOf": [
                {
                    "$ref": "#/definitions/protocolHandlerConfig"
                },
                {
                    "description": "List of configuration objects for multiple protocol handlers.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/protocolHandlerConfig"
                    }
                }
            ]
        },
        "alreadyRunningAction": {
            "description": "Defines the behavior when an **io.Connect Desktop** instance is already running and the user tries to start another one in the same environment and region. You can choose to show a dialog to the user, to make the platform exit silently, or to focus the already running instance.",
            "type": "string",
            "default": "focus",
            "enum": [
                "alert",
                "silent",
                "focus"
            ]
        },
        "applicationPreferences": {
            "description": "Settings for the preferences stored by using the App Preferences API.",
            "type": "object",
            "properties": {
                "store": {
                    "$ref": "#/definitions/applicationPreferencesStore"
                }
            }
        },
        "allowNTLMCredentialsForDomains": {
            "description": "Dynamically sets whether to always send credentials for NTLM over HTTP or Negotiate authentication. Accepts a comma-separated list of servers with enabled integrated authentication.",
            "type": "string"
        },
        "reloadIFrames": {
            "description": "Reloads an `<iframe>` if the `iodesktop` service object isn't registered.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "mode": {
                    "description": "Specifies for which apps to reload `<iframes>` automatically - for all apps, only for shell apps, or for no apps.",
                    "type": "string",
                    "enum": [
                        "none",
                        "shell",
                        "all"
                    ],
                    "default": "none"
                }
            }
        },
        "switches": {
            "description": "List of Electron command line arguments to be passed to the executable file of **io.Connect Desktop**. This eliminates the need for creating separate `BAT` or `CMD` files.",
            "type": "array",
            "items": {
                "description": "Command line argument in the form of a key/value pair.",
                "type": "object",
                "required": [
                    "key"
                ],
                "properties": {
                    "key": {
                        "description": "Name of the command line argument.",
                        "type": "string"
                    },
                    "value": {
                        "description": "Value for the command line argument.",
                        "type": "string"
                    }
                },
                "additionalProperties": false
            },
            "additionalProperties": false
        },
        "spellchecker": {
            "description": "Settings for the built-in Electron spellchecker.",
            "type": "object",
            "default": {},
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the built-in Electron spellchecker.",
                    "type": "boolean",
                    "default": true
                },
                "languages": {
                    "description": "List of language codes for the built-in Electron spellchecker (e.g., `[\"en-US\", \"fr\"]`).",
                    "type": "array",
                    "items": {
                        "description": "Language code.",
                        "type": "string"
                    }
                },
                "dictionaryDownloadURL": {
                    "description": "URL pointing to a location from where to download the dictionaries for the built-in Electron spellchecker. By default, the dictionaries are downloaded from a Chromium CDN.",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "telemetry": {
            "default": {
                "enabled": false
            },
            "$ref": "#/definitions/telemetryConfig"
        },
        "notifications": {
            "description": "Settings for the io.Connect notifications.",
            "type": "object",
            "default": {
                "enabled": true,
                "enableToasts": true,
                "sourceFilter": {
                    "allowed": [
                        "*"
                    ]
                },
                "toastExpiry": 15000,
                "toasts": {
                    "mode": "single",
                    "stackBy": "severity"
                },
                "placement": {
                    "panel": "right",
                    "toasts": "bottom-right"
                },
                "snooze": {
                    "enabled": false,
                    "duration": 60000
                },
                "closeNotificationOnClick": true,
                "autoHidePanel": false
            },
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable all notifications - notification toasts and notifications in the Notification Panel.",
                    "type": "boolean",
                    "default": true
                },
                "enableToasts": {
                    "description": "If `true`, will enable notification toasts.",
                    "type": "boolean",
                    "default": true
                },
                "sourceFilter": {
                    "description": "Filter with names of apps that are allowed or not allowed to raise notifications.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "allowed": {
                            "description": "Names of apps allowed to raise notifications.",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "App name.",
                                "type": "string"
                            }
                        },
                        "blocked": {
                            "description": "Names of apps not allowed to raise notifications.",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "App name.",
                                "type": "string"
                            }
                        }
                    }
                },
                "toastExpiry": {
                    "description": "Interval in milliseconds after which the notification toasts will be hidden.",
                    "type": "number",
                    "default": 15000
                },
                "toasts": {
                    "description": "Settings for the notification toasts.",
                    "type": "object",
                    "properties": {
                        "mode": {
                            "description": "Mode for the notification toasts. Notification toasts can appear individually, or can be stacked together based on a criterion (severity or app that has raised the notification).",
                            "type": "string",
                            "enum": [
                                "single",
                                "stacked"
                            ],
                            "default": "single"
                        },
                        "stackBy": {
                            "description": "Criterion for stacking the notification toasts.",
                            "type": "string",
                            "enum": [
                                "severity",
                                "application"
                            ],
                            "default": "severity"
                        }
                    }
                },
                "placement": {
                    "description": "Placement settings for the Notification Panel and the notification toasts.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "panel": {
                            "description": "Sets the position of the Notification Panel on the screen - left or right.",
                            "type": "string",
                            "default": "right",
                            "enum": [
                                "left",
                                "right"
                            ]
                        },
                        "toasts": {
                            "description": "Sets the position of the notification toasts on the screen - top right, top left, bottom right or bottom left.",
                            "type": "string",
                            "default": "bottom-right",
                            "enum": [
                                "top-left",
                                "top-right",
                                "bottom-left",
                                "bottom-right"
                            ]
                        }
                    }
                },
                "snooze": {
                    "description": "Settings for snoozing notifications.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable snoozing notifications.",
                            "type": "boolean",
                            "default": false
                        },
                        "duration": {
                            "description": "Interval in milliseconds for which the notifications will be snoozed.",
                            "type": "number",
                            "default": 60000
                        }
                    }
                },
                "showNotificationBadge": {
                    "description": "If `true`, will show the notification badge on the tray icon and on app icons.",
                    "type": "boolean"
                },
                "closeNotificationOnClick": {
                    "description": "If `true`, when the user clicks on the body of a notification in the Notification Panel, the notification will be removed from the list. Set to `false` if you want users to be able to click on the notification body (e.g., to copy text) without the notification disappearing from the Notification Panel.",
                    "type": "boolean",
                    "default": true
                },
                "autoHidePanel": {
                    "description": "If `true`, the Notification Panel will be hidden automatically when it loses focus.",
                    "type": "boolean",
                    "default": false
                }
            },
            "additionalProperties": false
        },
        "dialogs": {
            "description": "Settings for the io.Connect dialogs.",
            "type": "object",
            "default": {
                "width": 400,
                "height": 190
            },
            "properties": {
                "url": {
                    "description": "URL pointing to the location of the io.Connect dialog app.",
                    "type": "string"
                },
                "width": {
                    "description": "Width in pixels for the io.Connect dialogs.",
                    "type": "number",
                    "default": 400
                },
                "height": {
                    "description": "Height in pixels for the io.Connect dialogs.",
                    "type": "number",
                    "default": 190
                },
                "enableDefaultDialogs": {
                    "description": "Enable or disable the default io.Connect dialog messages.",
                    "type": "object",
                    "default": {
                        "preventShutdown": true,
                        "preventWindowClose": true,
                        "unsavedLayoutChanges": false
                    },
                    "properties": {
                        "preventShutdown": {
                            "description": "If `true`, will enable the dialog message that appears when **io.Connect Desktop** is about to shutdown.",
                            "type": "boolean",
                            "default": true
                        },
                        "preventWindowClose": {
                            "description": "If `true`, will enable the dialog message that appears when the user tries to close an io.Connect Window that is programmatically prevented from closing. This dialog will appear also when such window participates in a Layout that is being closed.",
                            "type": "boolean",
                            "default": true
                        },
                        "unsavedLayoutChanges": {
                            "description": "If `true`, will enable the dialog message that appears when the user modifies the current Global Layout and tries to restore another Global Layout.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                },
                "transparent": {
                    "description": "If `true`, the io.Connect Window containing the dialog will be transparent.",
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "alerts": {
            "description": "Settings for the io.Connect alerts.",
            "type": "object",
            "default": {
                "width": 460,
                "height": 60
            },
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the io.Connect alerts.",
                    "type": "boolean",
                    "default": true
                },
                "url": {
                    "description": "URL pointing to the location of the io.Connect alerts app.",
                    "type": "string"
                },
                "width": {
                    "description": "Width in pixels for the io.Connect alerts.",
                    "type": "number",
                    "default": 400
                },
                "height": {
                    "description": "Height in pixels for the io.Connect alerts.",
                    "type": "number",
                    "default": 82
                },
                "ttl": {
                    "description": "Interval in milliseconds that defines how long the alert is displayed to the user before it automatically disappears.",
                    "type": "number",
                    "default": 5000
                },
                "transparent": {
                    "description": "If `true`, the io.Connect Window containing the alerts will be transparent.",
                    "type": "boolean",
                    "default": true
                },
                "roundedCorners": {
                    "description": "If `true`, the io.Connect Window containing the alerts will have rounded corners.",
                    "type": "boolean",
                    "default": false
                }
            },
            "additionalProperties": false
        },
        "logging": {
            "description": "Configuration for the system logging of **io.Connect Desktop**.",
            "type": "object",
            "default": {
                "logSanitization": true
            },
            "properties": {
                "streaming": {
                    "default": {},
                    "$ref": "#/definitions/streamingConfig"
                },
                "files": {
                    "description": "Settings for handling log files.",
                    "type": "object",
                    "properties": {
                        "onStartup": {
                            "description": "Specifies how to handle the log files on system startup. Set to `\"archive\"` to archive the existing log files. Set to `\"delete\" to delete the existing log files. Set to `\"keep\"` (default) to leave the existing log files intact.",
                            "type": "string",
                            "enum": [
                                "archive",
                                "delete",
                                "keep"
                            ]
                        },
                        "moveOldTo": {
                            "description": "Absolute path pointing to the location where the log files from the previous session (if any) will be moved on startup of io.Connect Desktop. You can use environment variables.",
                            "type": "string",
                            "default": "%GLUE-USER-DATA%/logs/archive"
                        }
                    }
                },
                "logSanitization": {
                    "description": "If `true`, the platform logs will be sanitized. If set to `false`, sensitive information (credentials, personal details, network information, API keys and tokens, window details) won't be removed from the platform logs.",
                    "type": "boolean",
                    "default": true
                },
                "configuration": {
                    "description": "Settings for the logging mechanism of **io.Connect Desktop**. This property accepts any valid `log4js-node` configuration object containing definitions of log appenders and categories.",
                    "type": "object",
                    "additionalProperties": true
                }
            },
            "additionalProperties": false
        },
        "downloadManager": {
            "description": "Settings for the Download Manager app.",
            "type": "object",
            "default": {},
            "properties": {
                "appName": {
                    "description": "Name of an io.Connect app, as specified in its definition, to be used as a Download Manager.",
                    "type": "string",
                    "default": "io-connect-download-manager"
                },
                "autoStartOnDownload": {
                    "description": "If `true`, the Download Manager app will be started automatically when a download is initiated.",
                    "type": "boolean",
                    "default": false
                },
                "shortcut": {
                    "description": "Shortcut for starting the Download Manager app.",
                    "type": "string",
                    "default": "ctrl+j"
                }
            },
            "additionalProperties": false
        },
        "interception": {
            "description": "Settings for intercepting low-level platform operations. If enabled, the specified apps will be able to register interception handlers with which to modify the desired low-level platform operations.",
            "type": "object",
            "default": {},
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable intercepting platform operations.",
                    "type": "boolean",
                    "default": false
                },
                "applications": {
                    "description": "List of names of the apps that will be allowed to register interception handlers.",
                    "type": "array",
                    "items": {
                        "description": "Name of an app that will be allowed to register interception handlers.",
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "webPageSearch": {
            "description": "Settings for the Web Page Search feature. If enabled, pressing `CTRL + F` in an io.Connect web app will open a search bar which will enable users to search for text within the web page similarly to a regular browser.",
            "type": "object",
            "default": {},
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the search in page feature.",
                    "type": "boolean",
                    "default": true
                },
                "pool": {
                    "description": "Settings for the window pool used for creating the Web Page Search window. If enabled, will allow you to specify how many windows to keep in the pool and at what interval to create them. Keep in mind that each additional instance in the pool will require more memory. Usually, two instances are enough to provide a smooth user experience.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable using a window pool for creating the Web Page Search window.",
                            "type": "boolean",
                            "default": false
                        },
                        "interval": {
                            "description": "Interval in milliseconds at which to prepare new window instances for the Web Page Search when the window pool needs to be filled.",
                            "type": "number",
                            "default": 500
                        },
                        "max": {
                            "description": "Maximum number of instances to keep in the window pool for the Web Page Search. Keep in mind that each additional instance in the pool will require more memory. Usually, two instances are enough to provide a smooth user experience.",
                            "type": "number",
                            "default": 2
                        }
                    },
                    "additionalProperties": true
                }
            },
            "additionalProperties": false
        }
    },
    "required": [
        "region",
        "env",
        "gw"
    ],
    "definitions": {
        "appStoreConfig": {
            "description": "Settings for app stores.",
            "oneOf": [
                {
                    "$ref": "#/definitions/appStorePathConfig"
                },
                {
                    "$ref": "#/definitions/appStoreGcsConfig"
                },
                {
                    "$ref": "#/definitions/appStoreRestConfig"
                },
                {
                    "$ref": "#/definitions/appStorePermissionsFileConfig"
                },
                {
                    "$ref": "#/definitions/singleAppStorePathConfig"
                },
                {
                    "$ref": "#/definitions/serverStoreConfig"
                },
                {
                    "$ref": "#/definitions/inMemoryStoreConfig"
                }
            ]
        },
        "appStorePathConfig": {
            "description": "Settings for app stores loaded from a local path.",
            "type": "object",
            "required": [
                "type",
                "details"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store. Must be set to `\"path\"` for local path app stores.",
                    "type": "string",
                    "enum": [
                        "path"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "required": [
                        "path"
                    ],
                    "additionalProperties": false,
                    "properties": {
                        "path": {
                            "description": "Must point to the local app store. The specified path can be absolute or relative and you can use defined environment variables.",
                            "type": "string"
                        },
                        "trusted": {
                            "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                },
                "appDefinitionOverrides": {
                    "description": "Valid app definition properties that will override the ones in all app definitions from the app store. Top-level properties can be specified directly in the object. The properties that are found under the `\"details\"` top-level key for each app definition type must be specified in a top-level object with the same name as the app type - `\"window\"`, `\"exe\"`, `\"node\"`, `\"workspaces\"`, `\"webGroup\"`, `\"clickonce\"`, `\"citrix\"` or `\"childWindow\"`.",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "singleAppStorePathConfig": {
            "description": "Settings for app stores consisting of a single app definition file when **io.Connect Desktop** is started with a set `\"singleApp\"` property.",
            "type": "object",
            "required": [
                "type",
                "details"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store. Must be set to `\"singleApp\"` for single app stores.",
                    "type": "string",
                    "enum": [
                        "singleApp"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "required": [
                        "path"
                    ],
                    "additionalProperties": false,
                    "properties": {
                        "path": {
                            "description": "Must point to the single app definition. The specified path can be absolute or relative and you can use defined environment variables.",
                            "type": "string"
                        },
                        "trusted": {
                            "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                },
                "appDefinitionOverrides": {
                    "description": "Valid app definition properties that will override the ones in all app definitions from the app store. Top-level properties can be specified directly in the object. The properties that are found under the `\"details\"` top-level key for each app definition type must be specified in a top-level object with the same name as the app type - `\"window\"`, `\"exe\"`, `\"node\"`, `\"workspaces\"`, `\"webGroup\"`, `\"clickonce\"`, `\"citrix\"` or `\"childWindow\"`.",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "inMemoryStoreConfig": {
            "description": "Settings for the in-memory app store. The in-memory app store consist of app definitions imported dynamically by interop-enabled apps via the io.Connect APIs. Use these settings to specify which apps will be allowed access to the in-memory app store.",
            "type": "object",
            "required": [
                "type"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store. Must be set to `\"in-memory\"` for the in-memory app store.",
                    "type": "string",
                    "enum": [
                        "in-memory"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "allowedApps": {
                            "description": "List of app names, as defined in the io.Connect framework, that will be allowed to use the in-memory app store. Provide `\"*\"` as a value to allow all apps to use the in-memory store (e.g., `[\"*\"]`).",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "Name of an app, as defined in the io.Connect framework, that will be allowed to use the in-memory store.",
                                "type": "string"
                            }
                        },
                        "trusted": {
                            "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                },
                "appDefinitionOverrides": {
                    "description": "Valid app definition properties that will override the ones in all app definitions from the app store. Top-level properties can be specified directly in the object. The properties that are found under the `\"details\"` top-level key for each app definition type must be specified in a top-level object with the same name as the app type - `\"window\"`, `\"exe\"`, `\"node\"`, `\"workspaces\"`, `\"webGroup\"`, `\"clickonce\"`, `\"citrix\"` or `\"childWindow\"`.",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "serverStoreConfig": {
            "description": "Settings for app stores retrieved from **io.Manager**.",
            "type": "object",
            "required": [
                "type"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store. Must be set to `\"server\"` for app stores retrieved from **io.Manager**.",
                    "type": "string",
                    "enum": [
                        "server"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "appDefinitionOverrides": {
                    "description": "Valid app definition properties that will override the ones in all app definitions from the app store. Top-level properties can be specified directly in the object. The properties that are found under the `\"details\"` top-level key for each app definition type must be specified in a top-level object with the same name as the app type - `\"window\"`, `\"exe\"`, `\"node\"`, `\"workspaces\"`, `\"webGroup\"`, `\"clickonce\"`, `\"citrix\"` or `\"childWindow\"`.",
                    "type": "object",
                    "additionalProperties": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "trusted": {
                            "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                }
            }
        },
        "appStoreGcsConfig": {
            "description": "Remote app store configuration using the io.Connect Gateway. It's recommended to use the an app store of type `\"rest\"` instead, as it provides a direct connection to the REST service.",
            "type": "object",
            "required": [
                "type"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store.",
                    "type": "string",
                    "enum": [
                        "cm",
                        "gcs"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "required": [],
                    "additionalProperties": false,
                    "properties": {
                        "url": {
                            "description": "URL pointing to the remote store.",
                            "type": "string"
                        },
                        "trusted": {
                            "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                },
                "appDefinitionOverrides": {
                    "description": "Valid app definition properties that will override the ones in all app definitions from the app store. Top-level properties can be specified directly in the object. The properties that are found under the `\"details\"` top-level key for each app definition type must be specified in a top-level object with the same name as the app type - `\"window\"`, `\"exe\"`, `\"node\"`, `\"workspaces\"`, `\"webGroup\"`, `\"clickonce\"`, `\"citrix\"` or `\"childWindow\"`.",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "appStoreRestConfig": {
            "description": "Settings for app stores retrieved from a REST service.",
            "type": "object",
            "required": [
                "type",
                "details"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store. Must be set to `\"rest\"` for remote app stores.",
                    "type": "string",
                    "enum": [
                        "rest"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "required": [
                        "url"
                    ],
                    "additionalProperties": false,
                    "properties": {
                        "url": {
                            "description": "The URL to the REST service providing the app definitions.",
                            "type": "string"
                        },
                        "auth": {
                            "description": "Authentication configuration.",
                            "type": "string",
                            "enum": [
                                "no-auth",
                                "negotiate",
                                "kerberos"
                            ],
                            "default": "no-auth"
                        },
                        "startRetries": {
                            "description": "Number of times **io.Connect Desktop** will try to connect to the REST server.",
                            "type": "number",
                            "default": 5
                        },
                        "startRetryInterval": {
                            "description": "Interval in milliseconds at which **io.Connect Desktop** will try to connect to the REST server.",
                            "type": "number",
                            "default": 10000
                        },
                        "requestTimeout": {
                            "description": "Timeout in milliseconds to wait for a response from the REST server.",
                            "type": "number",
                            "default": 20000
                        },
                        "pollInterval": {
                            "description": "Interval in milliseconds at which to poll the REST service for updates.",
                            "type": "number",
                            "default": 60000
                        },
                        "enablePersistentCache": {
                            "description": "If `true`, will cache and persist the configuration files locally (e.g., in case of connection interruptions).",
                            "type": "boolean",
                            "default": true
                        },
                        "cacheFolder": {
                            "description": "Location for the persisted configuration files.",
                            "type": "string",
                            "default": "%IO_CD_USER_DATA_DIR%/gcsCache"
                        },
                        "readCacheAfter": {
                            "description": "Interval in milliseconds after which to try to read the cache.",
                            "type": "number",
                            "default": 30000
                        },
                        "proxy": {
                            "description": "HTTP proxy to use when fetching data.",
                            "type": "string"
                        },
                        "rejectUnauthorized": {
                            "description": "If `true`, SSL validation will be enabled for the REST server.",
                            "type": "boolean",
                            "default": true
                        },
                        "trusted": {
                            "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                            "type": "boolean",
                            "default": false
                        }
                    }
                },
                "appDefinitionOverrides": {
                    "description": "Valid app definition properties that will override the ones in all app definitions from the app store. Top-level properties can be specified directly in the object. The properties that are found under the `\"details\"` top-level key for each app definition type must be specified in a top-level object with the same name as the app type - `\"window\"`, `\"exe\"`, `\"node\"`, `\"workspaces\"`, `\"webGroup\"`, `\"clickonce\"`, `\"citrix\"` or `\"childWindow\"`.",
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "appStorePermissionsFileConfig": {
            "description": "Settings for app stores containing a permissions file. If valid permissions are present in the store, all previously applied permissions will be erased when the file from the store is read.",
            "type": "object",
            "required": [
                "type",
                "details"
            ],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "Type of the app store. Must be set to `\"permissionsFile\"` for app stores containing a permissions file.",
                    "type": "string",
                    "enum": [
                        "permissionsFile"
                    ]
                },
                "isRequired": {
                    "description": "If `true`, the app store will be required. If the app store can't be retrieved, **io.Connect Desktop** will throw an error and shut down. If `false`, **io.Connect Desktop** will initiate normally, without apps from that store.",
                    "type": "boolean",
                    "default": true
                },
                "details": {
                    "description": "Specific details about the app store.",
                    "type": "object",
                    "required": [
                        "path"
                    ],
                    "additionalProperties": false,
                    "properties": {
                        "path": {
                            "description": "Must point to the local permissions file. The specified path can be absolute or relative and you can use defined environment variables.",
                            "type": "string"
                        }
                    }
                }
            }
        },
        "windowsConfig": {
            "description": "Settings for the io.Connect Windows.",
            "type": "object",
            "properties": {
                "minWidth": {
                    "description": "Minimum width in pixels for the io.Connect Windows.",
                    "type": "number"
                },
                "maxWidth": {
                    "description": "Maximum width in pixels for the io.Connect Windows.",
                    "type": "number"
                },
                "minHeight": {
                    "description": "Minimum height in pixels for the io.Connect Windows.",
                    "type": "number"
                },
                "maxHeight": {
                    "description": "Maximum height in pixels for the io.Connect Windows.",
                    "type": "number"
                },
                "focus": {
                    "description": "If `true`, the window will be focused when created.",
                    "type": "boolean",
                    "default": true
                },
                "enableEventLogging": {
                    "description": "If `true`, will log all window event received from all io.Connect Windows.",
                    "type": "boolean",
                    "default": true
                },
                "contextMenu": {
                    "description": "Settings for the context menu of io.Connect Windows.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable the context menu for io.Connect Windows.",
                            "type": "boolean",
                            "default": false
                        },
                        "mode": {
                            "description": "Mode for the context menu. Set to `\"native\"` to use the standard built-in context menu. Set to `\"custom\"` to use your own implementation for a context menu.",
                            "type": "string",
                            "enum": [
                                "native",
                                "custom"
                            ],
                            "default": "native"
                        }
                    },
                    "additionalProperties": false
                },
                "security": {
                    "default": {},
                    "$ref": "#/definitions/securityConfig"
                },
                "downloadSettings": {
                    "default": {},
                    "$ref": "#/definitions/downloadConfig"
                },
                "refreshHandlers": {
                    "description": "Settings for the handlers executed when an io.Connect Window is about to be refreshed.",
                    "type": "object",
                    "default": {
                        "enabled": true,
                        "timeout": 2000
                    },
                    "properties": {
                        "enabled": {
                            "description": "If `true`, refresh handlers will be enabled.",
                            "type": "boolean"
                        },
                        "timeout": {
                            "description": "Interval in milliseconds to wait for the refresh handler to complete its operation.",
                            "type": "number"
                        }
                    },
                    "additionalProperties": false
                },
                "closeHandlers": {
                    "description": "Settings for the handlers executed when an io.Connect Window is about to be closed.",
                    "type": "object",
                    "default": {
                        "enabled": true,
                        "timeout": 2000
                    },
                    "properties": {
                        "enabled": {
                            "description": "If `true`, close handlers will be enabled.",
                            "type": "boolean"
                        },
                        "timeout": {
                            "description": "Interval in milliseconds to wait for the close handler to complete its operation.",
                            "type": "number"
                        }
                    },
                    "additionalProperties": false
                },
                "injectSIDtoContext": {
                    "description": "If `true`, will inject the SID in the window context after successful SSO authentication.",
                    "type": "boolean",
                    "default": false
                },
                "zoom": {
                    "default": {},
                    "$ref": "#/definitions/zoomConfig"
                },
                "hideGroupHeader": {
                    "description": "If `true`, the headers of io.Connect Window groups will be hidden. Valid only for apps of type `\"window\"`.",
                    "type": "boolean",
                    "default": false
                },
                "autoInjectAPI": {
                    "description": "Settings for auto injecting and auto initializing the `@interopio/desktop` library. This allows you to access the factory function without referencing the library in your apps, and possibly skip the initialization logic in your apps.",
                    "type": "object",
                    "required": [
                        "enabled",
                        "version"
                    ],
                    "default": {},
                    "additionalProperties": false,
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable auto injecting the `@interopio/desktop` library.",
                            "type": "boolean",
                            "default": false
                        },
                        "version": {
                            "description": "Semantic version of the library to inject. It's recommended to use a specific version and avoid wildcard versions.",
                            "type": "string",
                            "default": "*"
                        },
                        "autoInit": {
                            "description": "Setting for auto initializing the `@interopio/desktop` library. Accepts either a `boolean` value, or a `Config` object with which to initialize the library.",
                            "oneOf": [
                                {
                                    "description": "If `true`, will auto initialize the `@interopio/desktop` library with the default configuration.",
                                    "type": "boolean"
                                },
                                {
                                    "description": "`Config` object for initializing the `@interopio/desktop` library. Use this if you want to provide custom configuration settings for it.",
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            ]
                        },
                        "allowed": {
                            "description": "List of io.Connect app names in which the `@interopio/desktop` library will be injected.",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "App name.",
                                "type": "string"
                            }
                        },
                        "blocked": {
                            "description": "List of io.Connect app names in which the `@interopio/desktop` library won't be injected.",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "App name.",
                                "type": "string"
                            }
                        }
                    }
                },
                "autoInjectFdc3": {
                    "description": "Settings for auto injecting the `@interopio/fdc3` library. This allows you to access the library without referencing it in your apps.",
                    "type": "object",
                    "required": [
                        "enabled"
                    ],
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable auto injecting the `@interopio/fdc3` library.",
                            "type": "boolean",
                            "default": false
                        },
                        "library": {
                            "description": "Settings for the `@interopio/fdc3` library to be injected.",
                            "type": "object",
                            "properties": {
                                "source": {
                                    "description": "URL pointing to a locally or remotely hosted `@interopio/fdc3` library, or a string specifying the version of the `@interopio/fdc3` library to be used from the locally available packages in the `%LocalAppData%/interop.io/io.Connect Desktop/Desktop/assets` folder.",
                                    "type": "string"
                                },
                                "fallback": {
                                    "description": "Fallback location of the `@interopio/fdc3` library in case the one specified in the `\"source\"` property doesn't load. Accepts a URL pointing to a locally or remotely hosted `@interopio/fdc3` library, or a string specifying the version of the `@interopio/fdc3` library to be used from the locally available packages in the `%LocalAppData%/interop.io/io.Connect Desktop/Desktop/assets` folder.",
                                    "type": "string"
                                },
                                "timeout": {
                                    "description": "Interval in milliseconds to wait for loading the `@interopio/fdc3` library.",
                                    "type": "number"
                                }
                            }
                        },
                        "allowed": {
                            "description": "List of io.Connect app names in which the `@interopio/fdc3` library will be injected.",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "App name.",
                                "type": "string"
                            }
                        },
                        "blocked": {
                            "description": "List of io.Connect app names in which the `@interopio/fdc3` library won't be injected.",
                            "type": "array",
                            "default": [],
                            "items": {
                                "description": "App name.",
                                "type": "string"
                            }
                        }
                    }
                },
                "historyNavigationEnabled": {
                    "description": "If `true`, will allow users to navigate back (`CTRL + Left Arrow`) and forward (`CTRL + Right Arrow`) through the web page history.",
                    "type": "boolean",
                    "default": true
                },
                "cascade": {
                    "default": {},
                    "$ref": "#/definitions/cascadeConfig"
                },
                "consoleLogLevel": {
                    "description": "Logging level for the console.",
                    "type": "string"
                },
                "syncTitleWithDocumentTitle": {
                    "anyOf": [
                        {
                            "description": "If `true`, the window title will be synchronized with the document title when it's updated.",
                            "type": "boolean"
                        },
                        {
                            "description": "If set to `\"preserveCustomTitle\"`, the window title will be synchronized with the document title until the moment the user or the API sets a custom title for the window. After that, the custom title will be preserved and the window title won't be synchronized with the document title.",
                            "type": "string",
                            "enum": [
                                "preserveCustomTitle"
                            ]
                        }
                    ],
                    "default": true
                },
                "nativeWindowOpen": {
                    "description": "Controls the behavior of the browser `window.open()` method. Child windows opened with the browser native `window.open()` method can be opened in the default browser, in io.Connect Windows, or can be prevented from opening altogether.",
                    "anyOf": [
                        {
                            "description": "Specifies how to handle child windows opened with the browser `window.open()` method. If set to `\"off\"`, child windows will be prevented from opening. If set to `\"browser\"`, child windows will be opened in the default browser. If set to `\"window\"`, child windows will be opened in io.Connect Windows.",
                            "type": "string",
                            "enum": [
                                "off",
                                "window",
                                "browser"
                            ]
                        },
                        {
                            "description": "Controls the behavior of child windows opened with the browser `window.open()` method in io.Connect Windows.",
                            "type": "object",
                            "required": [
                                "mode"
                            ],
                            "properties": {
                                "mode": {
                                    "description": "Must be set to `\"window\"`.",
                                    "type": "string",
                                    "enum": [
                                        "window"
                                    ]
                                },
                                "outlivesOpener": {
                                    "description": "If `true`, will prevent child windows from being closed when their parent is closed.",
                                    "type": "boolean",
                                    "default": false
                                },
                                "grouping": {
                                    "description": "Settings for grouping the newly opened child window with the parent window. The child window can be snapped on any side of the parent window, or can be added to its tab group, provided that both windows are io.Connect tab windows.",
                                    "type": "object",
                                    "properties": {
                                        "addToTabGroup": {
                                            "description": "If `true`, will add the new child window to the tab group of the parent. Valid only when both the parent and the child are io.Connect tab windows.",
                                            "type": "boolean"
                                        },
                                        "snap": {
                                            "description": "If `true`, the child window will be snapped to the parent window. To specify a relative direction for the snapped window, use the `\"snappingOptions\"` object. If no direction is specified, the child window will be snapped to the right side of the parent window.",
                                            "type": "boolean"
                                        },
                                        "snappingOptions": {
                                            "description": "Options for snapping the child window to the parent window.",
                                            "type": "object",
                                            "properties": {
                                                "direction": {
                                                    "description": "Direction (bottom, top, left or right) for positioning the child window relatively to the parent window. Considered only if `\"snap\"` is set to `true`.",
                                                    "type": "string",
                                                    "enum": [
                                                        "bottom",
                                                        "top",
                                                        "left",
                                                        "right"
                                                    ]
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "additionalProperties": false
                        }
                    ],
                    "default": "window"
                },
                "nativeWindowOpenOptions": {
                    "description": "Configuration options for windows opened as io.Connect Windows (i.e. when `\"nativeWindowOpen\"` is set to `\"window\"`) using the browser `window.open()` method. The available window options are identical to the ones used in the `io.windows.open()` method.",
                    "type": "object",
                    "additionalProperties": true
                },
                "allowExtract": {
                    "description": "If `true`, windows in a window group will contain an \"Extract\" that allows the user to extract them from the group.",
                    "type": "boolean",
                    "default": false
                },
                "showStickyButton": {
                    "description": "If `true`, the windows will contain a \"Sticky\" button that allows the user to set their stickiness.",
                    "type": "boolean",
                    "default": false
                },
                "showFeedbackButton": {
                    "description": "If `true`, the windows will contain a \"Feedback\" button that opens the Feedback Form.",
                    "type": "boolean",
                    "default": false
                },
                "showCloneButton": {
                    "description": "If `true`, the windows will contain a \"Clone\" button that allows the user to clone a window with its current state.",
                    "type": "boolean",
                    "default": false
                },
                "readOnlyChannelSelector": {
                    "description": "If `true` and the Channel Selector is visible (Channels are enabled), the users won't be able to click on the Channel Selector and change the current Channel.",
                    "type": "boolean"
                },
                "pagePerformanceMetric": {
                    "description": "Settings for Performance Metrics. These metrics provide information about memory usage and statistics related to web app resources and navigation extracted from the underlying Chromium browser.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable Performance Metrics.",
                            "type": "boolean",
                            "default": false
                        },
                        "publishInterval": {
                            "description": "Interval in milliseconds at which to publish the generated metrics.",
                            "type": "number",
                            "default": 30
                        },
                        "initialPublishTimeout": {
                            "description": "Interval in milliseconds after which the initial data will be published.",
                            "type": "number",
                            "default": 1000
                        }
                    },
                    "required": [
                        "enabled"
                    ],
                    "additionalProperties": false
                },
                "search": {
                    "default": {},
                    "$ref": "#/definitions/searchConfig"
                },
                "printToPdfSettings": {
                    "default": {},
                    "$ref": "#/definitions/printToPdfConfig"
                },
                "print": {
                    "default": {},
                    "$ref": "#/definitions/printConfig"
                },
                "disableRefreshOnF5": {
                    "description": "If `true`, the user won't be able to refresh windows by pressing `F5`.",
                    "type": "boolean",
                    "default": false
                },
                "preloadScripts": {
                    "description": "Settings for preload scripts that will be executed before the actual web app is loaded and before each `<iframe>` on the page.",
                    "oneOf": [
                        {
                            "description": "List of URLs pointing to preload scripts that will be executed in the specified order.",
                            "type": "array",
                            "items": {
                                "description": "URL pointing to a local or remote preload script.",
                                "type": "string"
                            }
                        },
                        {
                            "$ref": "#/definitions/preloadScriptsConfig"
                        }
                    ]
                },
                "injectedStyles": {
                    "$ref": "#/definitions/injectedStylesConfig"
                },
                "jumpList": {
                    "default": {},
                    "$ref": "#/definitions/jumpListConfig"
                },
                "clientCertificates": {
                    "description": "Settings for the digital certificates that are provided to a server to determine the user identity.",
                    "type": "object",
                    "additionalProperties": false,
                    "default": {
                        "alwaysUseCheckbox": {
                            "enabled": true,
                            "checked": false
                        }
                    },
                    "properties": {
                        "alwaysUseCheckbox": {
                            "description": "Settings for the checkbox that allows users to always use a selected certificate if possible.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "enabled": {
                                    "description": "If `true`, the checkbox for always using a selected certificate will be visible.",
                                    "type": "boolean",
                                    "default": true
                                },
                                "checked": {
                                    "description": "If `true`, the checkbox for always using a selected certificate will be checked by default.",
                                    "type": "boolean",
                                    "default": false
                                }
                            }
                        }
                    }
                },
                "saveCurrentUrlInLayout": {
                    "description": "It's recommended to use the `\"saveInLayout\" property instead. If `true`, the current URL of the web app will be saved and loaded when the app is restored in a layout.",
                    "oneOf": [
                        {
                            "description": "If `true`, the URL will be saved for all Layout types - Application Default, Workspace and Global.",
                            "type": "boolean",
                            "default": false
                        },
                        {
                            "description": "List of Layout types for which the URL will be saved.",
                            "type": "array",
                            "items": {
                                "description": "Layout type",
                                "type": "string",
                                "enum": [
                                    "Global",
                                    "ApplicationDefault",
                                    "Workspace"
                                ]
                            }
                        }
                    ]
                },
                "saveCurrentTitleInLayout": {
                    "description": "It's recommended to use the `\"saveInLayout\" property instead. If `true`, the current application title of the web app will be saved and restored when the app is restored in a layout.",
                    "oneOf": [
                        {
                            "description": "If `true`, the app title will be saved for all Layout types - Application Default, Workspace and Global.",
                            "type": "boolean",
                            "default": false
                        },
                        {
                            "description": "List of Layout types for which the app title will be saved.",
                            "type": "array",
                            "items": {
                                "description": "Layout type",
                                "type": "string",
                                "enum": [
                                    "Global",
                                    "ApplicationDefault",
                                    "Workspace"
                                ]
                            }
                        }
                    ],
                    "default": [
                        "Workspace"
                    ]
                },
                "urlFilter": {
                    "description": "Regular expression that will be matched against the URLs for all web requests. Matched URLs will be allowed, all other requests will be blocked and a dialog will be shown to the user informing them that the URL is blocked by the organization.",
                    "type": "string"
                },
                "saveInLayout": {
                    "description": "Specifies properties to be persisted when apps are saved in Layouts. Some of the properties are valid only for web apps, others - only for native apps.",
                    "type": "object",
                    "properties": {
                        "url": {
                            "description": "Settings for persisting the current URLs of web apps when a Layout is saved. Valid only for web apps.",
                            "oneOf": [
                                {
                                    "description": "If `true`, the current URLs of web apps will be persisted in all Layout types - Application Default, Workspace, and Global.",
                                    "type": "boolean"
                                },
                                {
                                    "description": "List of Layout types in which the current URLs of web apps will be persisted.",
                                    "type": "array",
                                    "items": {
                                        "description": "Layout type.",
                                        "type": "string",
                                        "enum": [
                                            "Global",
                                            "ApplicationDefault",
                                            "Workspace"
                                        ]
                                    }
                                }
                            ]
                        },
                        "title": {
                            "description": "Settings for persisting the current titles of apps when a Layout is saved.",
                            "oneOf": [
                                {
                                    "description": "If `true`, the app titles will be persisted in all Layout types - Application Default, Workspace, and Global.",
                                    "type": "boolean"
                                },
                                {
                                    "description": "List of Layout types in which the app titles will be persisted.",
                                    "type": "array",
                                    "items": {
                                        "description": "Layout type.",
                                        "type": "string",
                                        "enum": [
                                            "Global",
                                            "ApplicationDefault",
                                            "Workspace"
                                        ]
                                    }
                                }
                            ]
                        },
                        "command": {
                            "description": "If `true`, when the app is saved in a Layout, the command with which it was started will be persisted. If the value of the `\"command\"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted command, and not the one in the current app definition. Valid only for native apps.",
                            "type": "boolean"
                        },
                        "parameters": {
                            "description": "If `true`, when the app is saved in a Layout, the parameters with which it was started will be persisted. If the value of the `\"parameters\"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted parameters, and not the ones in the current app definition. Valid only for native apps.",
                            "type": "boolean"
                        },
                        "env": {
                            "description": "If `true`, when the app is saved in a Layout, the environment options with which it was started will be persisted. If the value of the `\"env\"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted environment options, and not the ones in the current app definition. Valid only for native apps.",
                            "type": "boolean"
                        }
                    }
                },
                "channelSelector": {
                    "default": {},
                    "$ref": "#/definitions/channelSelector"
                },
                "responseHeaders": {
                    "description": "Settings for manipulating the response headers received by the platform from external servers. It's possible to remove an entire header, or to modify its directives. Use this property to define the response headers you want to remove or modify as key/value pairs. The key must be the header name (e.g., `Content-Security-Policy`) and the value must be an object holding the desired settings.",
                    "type": "object",
                    "additionalProperties": {
                        "description": "Object describing the settings for removing a response header or modifying its directives.",
                        "type": "object",
                        "properties": {
                            "remove": {
                                "description": "If `true`, the entire response header will be removed.",
                                "type": "boolean"
                            },
                            "directives": {
                                "description": "List of response header directives to be modified. It's possible to remove a directive, to replace its value, or to append a value to its current value.",
                                "type": "array",
                                "items": {
                                    "description": "Object with settings for modifying a response header directive.",
                                    "type": "object",
                                    "properties": {
                                        "name": {
                                            "description": "Name of the directive to modify.",
                                            "type": "string"
                                        },
                                        "value": {
                                            "description": "New value for the directive. Required when replacing or appending a directive value.",
                                            "type": "string"
                                        },
                                        "action": {
                                            "description": "Action to be performed on the directive. Set to `\"remove\"` to remove the directive. Set to `\"replace\"` to replace the current value. Set to `\"append\"` to append a value to the current value. When replacing or appending a value, it's required to specify a new value.",
                                            "type": "string",
                                            "enum": [
                                                "append",
                                                "remove",
                                                "replace"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "name",
                                        "action"
                                    ]
                                }
                            }
                        }
                    }
                },
                "userAgent": {
                    "$ref": "#/definitions/userAgentConfig"
                }
            },
            "additionalProperties": false
        },
        "windowManagementConfig": {
            "description": "Defines global settings for the internal window management mechanisms.",
            "properties": {
                "transparencyControl": {
                    "description": "Settings for specifying how to achieve transparency in Workspaces and web groups. These settings are valid only in the advanced platform mode.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "mode": {
                            "description": "Specifies how to handle the transparency of the HTML elements that are part of io.Connect web groups and Workspaces and are placed over the app windows. These HTML elements must be transparent in order for the app windows to be visible and for the mouse clicks to reach the app windows. By default, the io.Connect platform uses the `\"Transparent\"` option (this value is forced in the default platform mode and is the default value in the advanced platform mode) which provides more flexibility for customizing Workspaces and web groups (freely showing popups with drop shadows and irregular shapes). The other options (`\"Auto\"`, `\"KeyColor\"`, and `\"Regions\"`) are supported for legacy reasons and are valid only in the advanced platform mode. Using `\"Auto\"` will select `\"Transparent\"`.",
                            "type": "string",
                            "enum": [
                                "Auto",
                                "Transparent",
                                "KeyColor",
                                "Regions"
                            ]
                        },
                        "keyColor": {
                            "description": "Specifies the key color when `\"mode\"` is set to `\"KeyColor\"` (supported for legacy reasons). The key color is the color that will be treated as transparent in the HTML elements that are part of io.Connect web groups and Workspaces. Defaults to `\"#FD12EF\"`.",
                            "type": "string"
                        }
                    },
                    "additionalProperties": false
                },
                "snapToScreenEdges": {
                    "description": "Settings for snapping windows to the edges of the screen. Not available for macOS due to OS limitations.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable snapping windows to the screen edges when the user moves them within the specified distance from the screen edge.",
                            "type": "boolean",
                            "default": false
                        },
                        "distance": {
                            "description": "Distance in pixels from the screen edge at which the window will snap to it.",
                            "type": "number",
                            "minimum": 5,
                            "maximum": 30,
                            "default": 20
                        }
                    },
                    "additionalProperties": false
                },
                "alternateBehavior": {
                    "description": "Settings for the window management behavior when the `ALT` key is pressed or released.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "snapping": {
                            "description": "Controls window snapping when the `ALT` key is pressed or released.",
                            "type": "object",
                            "default": {},
                            "properties": {
                                "reverse": {
                                    "description": "If set to `true`, snapping windows will be enabled only when the `ALT` key is pressed. If set to `false`, snapping windows will be disabled when the `ALT` key is pressed.",
                                    "type": "boolean",
                                    "default": false
                                }
                            }
                        },
                        "dropInTabGroup": {
                            "description": "Controls dropping windows in tab groups when the `ALT` key is pressed or released.",
                            "type": "object",
                            "default": {},
                            "properties": {
                                "reverse": {
                                    "description": "If set to `true`, dropping windows in tab groups will be enabled only when the `ALT` key is pressed. If set to `false`, dropping windows in tab groups will be disabled when the `ALT` key is pressed.",
                                    "type": "boolean",
                                    "default": false
                                }
                            }
                        },
                        "dropInWorkspace": {
                            "description": "Controls dropping windows in Workspaces when the `ALT` key is pressed or released.",
                            "type": "object",
                            "default": {},
                            "properties": {
                                "reverse": {
                                    "description": "If set to `true`, dropping windows in Workspaces will be enabled only when the `ALT` key is pressed. If set to `false`, dropping windows in Workspaces will be disabled when the `ALT` key is pressed.",
                                    "type": "boolean",
                                    "default": false
                                }
                            }
                        }
                    }
                },
                "hardwareAcceleration": {
                    "description": "Settings for hardware acceleration.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable hardware acceleration for web pages. In the default platform mode, this is forced to `true`. The default value specified here is valid only in the advanced platform mode.",
                            "type": "boolean",
                            "default": false
                        }
                    },
                    "additionalProperties": false
                },
                "snapping": {
                    "description": "Settings for window snapping.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will enable io.Connect Windows to snap together forming window groups. Defaults to `true`.",
                            "type": "boolean"
                        },
                        "approachingDistance": {
                            "description": "Distance in pixels at which the approaching edges of windows will be highlighted. The approaching distance value must be in the range of 10 to 100 pixels. Defaults to `50`.",
                            "type": "number"
                        },
                        "autoAlign": {
                            "description": "If `true`, when a window is added to a window group, it will be aligned automatically to the neighboring windows. Defaults to `true`.",
                            "type": "boolean"
                        },
                        "edgeDistance": {
                            "description": "Distance in pixels between the edges of snapped windows. The edge distance value must be in the range of 2 to 10 pixels. Defaults to `4`.",
                            "type": "number"
                        }
                    },
                    "additionalProperties": false
                },
                "sizing": {
                    "description": "Settings for window sizing.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "groupInnerSizingMode": {
                            "description": "Deprecated. Valid only for web groups. Specifies how the inner sizing of web groups is initiated and performed. Forced to `\"internal\"` in the default platform mode which is also the default in the advanced platform mode. The `\"external\"` value can be used only in the advanced platform mode.",
                            "type": "string",
                            "enum": [
                                "external",
                                "internal"
                            ],
                            "default": "internal"
                        }
                    },
                    "additionalProperties": false
                },
                "collapseExpand": {
                    "description": "Settings for collapsing and expanding windows. Currently available only for classic groups in the advanced platform mode.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "mode": {
                            "description": "Specifies the behavior for collapsing and expanding windows. If set to `\"Single\"`, the group will change in height when a window with neighbors at the top or at the bottom is collapsed or expanded. If set to `\"Proportional\"`, the bottom window neighbor (if any) will attempt to compensate the height difference and preserve the overall group height.",
                            "type": "string",
                            "enum": [
                                "Proportional",
                                "Single"
                            ],
                            "default": "Single"
                        },
                        "alignBottomBordersWhenExpanding": {
                            "description": "If `true` and the expanding window is in a perfect window group column, the framework will attempt to align the bottom borders of the last windows in that column to the bottom border of the closest window neighbor.",
                            "type": "boolean",
                            "default": true
                        }
                    },
                    "additionalProperties": false
                },
                "editWindowTitle": {
                    "description": "If `true`, the user will be able to edit the title of the window. Valid only for tab and flat windows. Defaults to `true`.",
                    "type": "boolean"
                },
                "flydownWindows": {
                    "description": "Settings for the io.Connect flydown windows. Currently available only in the advanced platform mode.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "showDelay": {
                            "description": "Delay in milliseconds before showing flydown windows after the user hovers over a flydown zone. Defaults to `200`.",
                            "type": "number"
                        },
                        "hideDelay": {
                            "description": "Delay in milliseconds before hiding the flydown window (e.g., when the user moves the cursor out of the flydown zone). Defaults to `400`.",
                            "type": "number"
                        },
                        "hideCheckInterval": {
                            "description": "Interval in milliseconds at which to check whether the flydown window should be hidden. This value should be less than the value of `\"hideDelay\"`, otherwise the flydown window will be hidden at the end of this interval and not at the end of the interval specified in `\"hideDelay\"`. Defaults to `100`.",
                            "type": "number"
                        },
                        "zoneChangeCallbackTimeout": {
                            "description": "Interval in milliseconds to await the callback for handling the flydown window to return a result when the flydown zone has changed. Defaults to `150`.",
                            "type": "number"
                        }
                    },
                    "additionalProperties": false
                },
                "group": {
                    "description": "Settings for the io.Connect Window groups.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "type": {
                            "description": "Specifies the implementation type of the io.Connect Window group. If set to `\"Web\"`, decorations are implemented via HTML elements and the theme properties are set via CSS. This is the only available window group type in the default platform mode. If set to `\"Classic\"`, decorations like headers, tabs, captions, etc., are implemented via WPF components and the theme properties (colors, sizes, etc.) are set via the `themes.json` file. Classic groups are available only in the advanced platform mode. Defaults to `\"Web\"`.",
                            "type": "string",
                            "enum": [
                                "Classic",
                                "Web"
                            ]
                        },
                        "header": {
                            "description": "Settings for the window group header.",
                            "type": "object",
                            "default": {},
                            "properties": {
                                "hide": {
                                    "description": "If `true`, the window group header will be hidden. Valid for all types of apps (native and web). Defaults to `false`.",
                                    "type": "boolean"
                                },
                                "defaultTitle": {
                                    "description": "Default header title for io.Connect Window groups, also displayed in the Windows taskbar.",
                                    "type": "string",
                                    "default": "Group"
                                },
                                "editTitle": {
                                    "description": "If `true`, the user will be able to edit the title of the window group header. Defaults to `true`.",
                                    "type": "boolean"
                                }
                            },
                            "additionalProperties": false
                        },
                        "externalResizeMode": {
                            "description": "Defines the behavior of windows with size restrictions that will be violated during resize operations with Windows mouse and keyboard gestures. If set to `\"Proportional\"`, the proportions of all windows in the group will be preserved relatively to the size of the restricted window. If set to `\"Fill\"`, the group will be resized in a way that all windows unrestricted in size will fill as much space as possible left free by any size-restricted window. Currently, only rectangular groups without holes are supported in `\"Fill\"` mode. Defaults to `\"Fill\"`.",
                            "type": "string",
                            "enum": [
                                "Proportional",
                                "Fill"
                            ]
                        },
                        "unlockOnLongMousePress": {
                            "description": "Settings for unlocking windows from windows groups when the user holds down the left mouse button inside the default window move area (between the tabs and the system buttons for tab windows, the caption bar for flat windows, and the HTML move area for HTML windows).",
                            "type": "object",
                            "default": {},
                            "properties": {
                                "enabled": {
                                    "description": "If `true`, will enable unlocking windows from window groups on a long mouse press.",
                                    "type": "boolean",
                                    "default": true
                                },
                                "timeout": {
                                    "description": "Interval in milliseconds to wait before unlocking a window from a window group on a long mouse press.",
                                    "type": "number",
                                    "default": 1000
                                },
                                "tolerance": {
                                    "description": "Distance in pixels allowed for the mouse to move from its initial position before the unlocking operation becomes unavailable.",
                                    "type": "number",
                                    "default": 5
                                }
                            },
                            "additionalProperties": false
                        },
                        "tabs": {
                            "description": "Settings for the tabs in io.Connect Window groups.",
                            "type": "object",
                            "default": {},
                            "properties": {
                                "loadingStrategy": {
                                    "type": "string",
                                    "description": "Strategy for loading web apps when restoring tabbed groups. Use `\"direct\"` to load all apps in tabbed groups simultaneously. Use `\"lazy\"` to load all visible apps first, and load hidden apps on demand (only when the user clicks on a tab to activate). Currently, the `\"delayed\"` strategy isn't supported.",
                                    "enum": [
                                        "direct",
                                        "delayed",
                                        "lazy"
                                    ],
                                    "default": "direct"
                                },
                                "flatWhenSingle": {
                                    "description": "If `true`, the tab window will look as a flat window (without a tab header) when it's single. The tab header will appear automatically when you add one or more tab windows to the current window. Defaults to `false`.",
                                    "type": "boolean"
                                },
                                "selectPreviousOnClose": {
                                    "description": "If `true`, will select the previously selected tab when the current one is closed. If `false`, will select the previous adjacent tab when the current one is closed.",
                                    "type": "boolean",
                                    "default": false
                                },
                                "defaultTaskbarTitle": {
                                    "description": "Text that will be used in the Windows taskbar for single tab groups (tab groups that aren't snapped to other windows or groups) unless `\"showSelectedTabTitleInTaskbar\"` is set to `true`.",
                                    "type": "string",
                                    "default": "Group"
                                },
                                "showSelectedTabTitleInTaskbar": {
                                    "description": "If `true`, the title of the selected tab will be shown in the Windows taskbar. Valid only for single tab groups (tab groups that aren't snapped to other windows or groups) and will override the `\"defaultTaskbarTitle\"` property.",
                                    "type": "boolean",
                                    "default": false
                                },
                                "overflow": {
                                    "description": "If `true`, when the total width of the tabs in a group exceeds the width of the tab header area, the tabs will overflow. The user will be able to navigate to the desired tab by using the scroll bar or the dropdown menu that will appear automatically when the tabs exceed the available width of the tab header area. If `false`, when a new tab is added to the group, the tabs will keep shrinking in width up to the minimum possible size in order to fit in the available width of the tab header area. It's important to keep in mind that in this case if the total width of the tabs exceeds the available width of the tab header area, the rightmost tabs will start to disappear and will become inaccessible to the user unless one or more previous tabs are closed first.",
                                    "type": "boolean",
                                    "default": false
                                }
                            },
                            "additionalProperties": false
                        }
                    },
                    "additionalProperties": false
                },
                "workspaces": {
                    "description": "Settings for io.Connect Workspaces.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "operationTimeout": {
                            "description": "Interval in milliseconds to wait for API operations to complete.",
                            "type": "number",
                            "default": 30000
                        }
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "splashConfig": {
            "description": "Settings for the splash screen of **io.Connect Desktop**.",
            "type": "object",
            "properties": {
                "disabled": {
                    "description": "If `true`, the splash screen will be disabled.",
                    "type": "boolean"
                },
                "url": {
                    "description": "URL pointing to the location of the splash screen.",
                    "type": "string",
                    "default": "file:///%IO_CD_ASSETS_DIR%/splash/splash.html"
                },
                "width": {
                    "description": "Width in pixels for the splash screen.",
                    "type": "number",
                    "default": 750
                },
                "height": {
                    "description": "Height in pixels for the splash screen.",
                    "type": "number",
                    "default": 500
                },
                "blockStartup": {
                    "description": "If `true`, will block startup until the splash screen has loaded.",
                    "type": "boolean",
                    "default": true
                },
                "showOnShutdown": {
                    "description": "If `true`, will show the splash screen when **io.Connect Desktop** is shutting down.",
                    "type": "boolean",
                    "default": true
                },
                "transparent": {
                    "description": "If `true`, the splash screen background will become transparent.",
                    "type": "boolean",
                    "default": true
                },
                "timeout": {
                    "description": "Interval in milliseconds to wait for the splash screen to load.",
                    "type": "number",
                    "default": 5000
                },
                "alwaysOnTop": {
                    "description": "If `true`, the splash screen will always be on top of other windows.",
                    "type": "boolean",
                    "default": true
                },
                "showInTaskbar": {
                    "description": "If `true`, the splash screen icon will be shown in the Windows taskbar.",
                    "type": "boolean",
                    "default": true
                }
            },
            "additionalProperties": false
        },
        "aboutConfig": {
            "description": "Configuration for the About app.",
            "type": "object",
            "properties": {
                "url": {
                    "description": "URL pointing to the location of the About app.",
                    "type": "string"
                },
                "width": {
                    "description": "Width in pixels for the About app.",
                    "type": "number"
                },
                "height": {
                    "description": "Height in pixels for the About app.",
                    "type": "number"
                },
                "hideTrademark": {
                    "description": "Hide the trademark information section in the About app.",
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "hotkeys": {
            "description": "Hotkeys settings.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, hotkeys will be enabled.",
                    "type": "boolean",
                    "default": true
                },
                "blacklist": {
                    "description": "List of names of apps that won't be able to register hotkeys.",
                    "type": "array",
                    "items": {
                        "description": "App name.",
                        "type": "string"
                    }
                },
                "whitelist": {
                    "description": "List of names of apps that will be able to register hotkeys.",
                    "type": "array",
                    "items": {
                        "description": "App name.",
                        "type": "string"
                    }
                },
                "reservedHotkeys": {
                    "description": "List of reserved (system or other) hotkeys that app won't be able to override.",
                    "type": "array",
                    "items": {
                        "description": "Keyboard combination for a hotkey (e.g., `\"ctrl+v\"`).",
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "serverConfig": {
            "description": "Settings for connecting to **io.Manager**.",
            "type": "object",
            "required": [
                "url"
            ],
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable connecting to **io.Manager**.",
                    "type": "boolean"
                },
                "url": {
                    "description": "URL pointing to **io.Manager**.",
                    "type": "string"
                },
                "fetchInterval": {
                    "description": "Interval in seconds at which the server will be polled for new data (apps, Layouts, commands).",
                    "type": "number",
                    "default": 30
                },
                "startRetries": {
                    "description": "Number of times **io.Connect Desktop** will try to reconnect to **io.Manager**.",
                    "type": "number",
                    "default": 10
                },
                "startRetryInterval": {
                    "description": "Interval in seconds at which **io.Connect Desktop** will try to connect to **io.Manager**.",
                    "type": "number",
                    "default": 10
                },
                "requests": {
                    "$ref": "#/definitions/requestsConfig",
                    "default": {}
                },
                "cache": {
                    "$ref": "#/definitions/cacheConfig",
                    "default": {}
                },
                "tokenRefreshInterval": {
                    "description": "Interval in seconds at which **io.Connect Desktop** will try to refresh the **io.Manager** token.",
                    "type": "number",
                    "default": 3600
                },
                "clientAuth": {
                    "description": "The client authentication mechanism for the REST service.",
                    "type": "string",
                    "enum": [
                        "no-auth",
                        "negotiate",
                        "kerberos"
                    ],
                    "default": "no-auth"
                },
                "features": {
                    "description": "Features to be injected automatically in **io.Connect Desktop**.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "applicationsStore": {
                            "description": "If `true`, the **io.Manager** app store will be automatically injected.",
                            "type": "boolean"
                        },
                        "applicationsStoreOptions": {
                            "description": "Application store options.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "trusted": {
                                    "description": "If `true`, the app store will be trusted by the platform and the security settings specified in the app definitions won't be overridden by the security settings specified in the system configuration.",
                                    "type": "boolean",
                                    "default": false
                                }
                            },
                            "default": {
                                "trusted": false
                            }
                        },
                        "layoutsStore": {
                            "description": "If `true`, the **io.Manager** Layout store will be automatically injected.",
                            "type": "boolean"
                        },
                        "commands": {
                            "description": "If `true`, the **io.Manager** commands will be automatically injected.",
                            "type": "boolean"
                        },
                        "preferencesStore": {
                            "description": "If `true`, the **io.Manager** app preferences store will be automatically injected.",
                            "type": "boolean"
                        }
                    },
                    "default": {
                        "applicationsStore": true,
                        "layoutsStore": true,
                        "commands": true,
                        "preferencesStore": true
                    }
                }
            }
        },
        "commandsConfig": {
            "description": "Commands Config",
            "type": "object",
            "required": [
                "enabled"
            ],
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, fetching commands from a REST service will be enabled.",
                    "type": "boolean",
                    "default": "true"
                },
                "type": {
                    "description": "Type of the commands provider. Set to `\"server\"` for fetching commands from **io.Manager**.",
                    "type": "string",
                    "enum": [
                        "server",
                        "gcs"
                    ],
                    "default": "server"
                },
                "fetchInterval": {
                    "description": "Interval in seconds at which the REST service will be polled for new commands.",
                    "type": "number",
                    "default": 30
                },
                "resetFetchInterval": {
                    "description": "Interval in seconds at which fetching commands will be reset to the value of `\"fetchInterval\"` (e.g., if the fetching interval has been changed by an **io.Manager** command).",
                    "type": "number",
                    "default": 1800
                }
            }
        },
        "securityConfig": {
            "description": "Global security settings.",
            "type": "object",
            "properties": {
                "allowRunningInsecureContent": {
                    "description": "If `true`, will allow an HTTPS page to run JavaScript, CSS or plugins from HTTP URLs.",
                    "type": "boolean",
                    "default": false
                },
                "webSecurity": {
                    "description": "If `true`, web security will be enabled. Set to `false` to disable the same-origin policy (e.g., for testing purposes) and to set `\"allowRunningInsecureContent\"` to `true`.",
                    "type": "boolean",
                    "default": true
                },
                "popups": {
                    "description": "Deprecated. Use `\"nativeWindowOpen\"` instead.",
                    "type": "boolean",
                    "default": false
                },
                "stopLoadingOnCertificationErrors": {
                    "description": "Deprecated. Use `\"onCertificateError\"` instead.",
                    "type": "boolean",
                    "default": true
                },
                "onCertificateError": {
                    "description": " Settings for handling web pages with invalid certificates.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "action": {
                            "description": "Controls the behavior for loading web pages with invalid certificates - whether to allow or deny loading the page, or to ask the user.",
                            "type": "string",
                            "enum": [
                                "allow",
                                "deny",
                                "ask"
                            ],
                            "default": "deny"
                        },
                        "reportURL": {
                            "description": "URL pointing to a page that will be shown to the user and will allow them to report the issue. Only valid if `\"action\"` is set to `\"ask\"`.",
                            "type": "string"
                        }
                    },
                    "additionalProperties": false
                },
                "navigateOnDragDrop": {
                    "description": "If `true`, dragging and dropping a file or a link onto the page will trigger navigation.",
                    "type": "boolean",
                    "default": false
                },
                "sandbox": {
                    "description": "If `true`, the renderer associated with the window will be sandboxed, making it compatible with the Chromium OS-level sandbox and disabling the Node.js engine.",
                    "type": "boolean",
                    "default": true
                },
                "contextIsolation": {
                    "description": "If `true`, will allow running code in preload scripts and in Electron APIs in a dedicated JavaScript context. Context isolation allows each script running in the renderer process to make changes to its JavaScript environment without conflicting with scripts in the Electron API or preload script.",
                    "type": "boolean",
                    "default": false
                },
                "nodeIntegration": {
                    "description": "If `true`, will enable Node.js integration.",
                    "type": "boolean",
                    "default": false
                },
                "allowedExternalURISchemes": {
                    "description": "List of URI schemes allowed to be opened externally.",
                    "type": "array",
                    "items": {
                        "description": "URI scheme.",
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "swimlaneConfig": {
            "description": "Deprecated. Swimlane configurations.",
            "type": "object",
            "default": {
                "workspace": {
                    "allowDrop": true,
                    "allowExtract": true,
                    "actionButtonTooltip": "Workspace options",
                    "addButtonTooltip": "Add workspace"
                },
                "hibernation": {
                    "enabled": false,
                    "interval": 10,
                    "workspacesToClose": 1,
                    "rules": [
                        {
                            "enabled": true,
                            "type": "InsufficientSystemMemoryRule",
                            "threshold": 2048
                        },
                        {
                            "enabled": true,
                            "type": "WorkspaceIdleTimeRule",
                            "threshold": 120
                        },
                        {
                            "enabled": true,
                            "type": "MaximumActiveWorkspacesRule",
                            "threshold": 5
                        }
                    ]
                },
                "detailsApp": {
                    "managePopup": true
                },
                "saveApplicationContext": true,
                "saveActivityContext": false
            },
            "properties": {
                "loadControl": {
                    "$ref": "#/definitions/loadControlConfig"
                },
                "hibernation": {
                    "$ref": "#/definitions/hibernationConfig"
                },
                "frame": {
                    "description": "Frame configurations.",
                    "type": "object",
                    "properties": {
                        "lockdown": {
                            "description": "",
                            "type": "boolean",
                            "default": false
                        }
                    },
                    "additionalProperties": false
                },
                "workspace": {
                    "description": "Configuration properties for workspace tab.",
                    "type": "object",
                    "default": {
                        "allowDrop": true,
                        "allowExtract": true,
                        "actionButtonTooltip": "Workspace options",
                        "addButtonTooltip": "Add workspace"
                    },
                    "properties": {
                        "allowDrop": {
                            "description": "Indicates whether workspace tabs can be dropped inside other workspaces.",
                            "type": "boolean",
                            "default": true
                        },
                        "allowExtract": {
                            "description": "Indicates whether workspace tabs can be extracted from layout. If the property is set to `true`, workspace tabs can be dragged out of the layout.",
                            "type": "boolean",
                            "default": true
                        },
                        "actionButtonTooltip": {
                            "description": "Tooltip text which will be shown on mouse hover over the action button situated on the workspace tab.",
                            "type": "string",
                            "default": "Workspace options"
                        },
                        "addButtonTooltip": {
                            "description": "Tooltip text which will be shown on mouse hover over the `Add workspace` button. The `Add workspace` button is the button after the last workspace tab.",
                            "type": "string",
                            "default": "Add workspace"
                        }
                    },
                    "additionalProperties": false
                },
                "saveApplicationContext": {
                    "description": "Whether to save the application context.",
                    "type": "boolean"
                },
                "saveActivityContext": {
                    "description": "Whether to save the activity context.",
                    "type": "boolean"
                },
                "detailsApp": {
                    "description": "Configure the behavior of the Swimlanes details app.",
                    "type": "object",
                    "default": {},
                    "additionalProperties": false,
                    "properties": {
                        "managePopup": {
                            "description": "Indicates whether **io.Connect Desktop** should manage the visibility of the details app.",
                            "type": "boolean",
                            "default": true
                        }
                    }
                }
            },
            "additionalProperties": false
        },
        "hibernationConfig": {
            "description": "Settings for hibernating Workspaces.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable Workspaces hibernation.",
                    "type": "boolean"
                },
                "interval": {
                    "description": "Interval in minutes at which to check whether any Workspaces should be hibernated.",
                    "type": "number"
                },
                "workspacesToClose": {
                    "description": "Number of Workspaces to hibernate at a time. The higher the number, the more the usage of system resources will spike.",
                    "type": "number"
                },
                "rules": {
                    "description": "List of rules that will define whether a Workspace should be hibernated.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/hibernationRuleConfig"
                    },
                    "additionalProperties": false
                }
            },
            "additionalProperties": false
        },
        "hibernationRuleConfig": {
            "description": "Rule for hibernating Workspaces.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the hibernation rule.",
                    "type": "boolean"
                },
                "type": {
                    "description": "Must be set to one of the built-in rules. `\"InsufficientSystemMemory\"` - if the available system memory falls below the limit in KB set by this rule, Workspaces will be hibernated. `\"MaximumActiveWorkspaces\"` - if the maximum number of active Workspaces set by this rule has been reached, Workspace hibernation will begin. `\"WorkspaceIdleTime\"` - if a Workspace has been idle for the amount of time in minutes set by this rule, it will be hibernated.",
                    "type": "string",
                    "enum": [
                        "InsufficientSystemMemory",
                        "MaximumActiveWorkspaces",
                        "WorkspaceIdleTime"
                    ]
                },
                "threshold": {
                    "description": "Number value for the respective rule - limit in KB for insufficient memory, number of maximum active Workspaces, or minutes for Workspace idle time.",
                    "type": "number"
                }
            },
            "required": [
                "enabled",
                "type",
                "threshold"
            ],
            "additionalProperties": false
        },
        "loadControlConfig": {
            "description": "Deprecated. Configuration for the load order of applications when restoring Swimlane workspaces.",
            "type": "object",
            "properties": {
                "restoreStrategy": {
                    "description": "Default restore strategy when restoring Swimlane workspaces.",
                    "type": "string",
                    "enum": [
                        "direct",
                        "delayed",
                        "lazy"
                    ]
                },
                "initialOffsetInterval": {
                    "description": "Valid only in `delayed` mode. Initial period after which to start loading applications in batches.",
                    "type": "number"
                },
                "interval": {
                    "description": "Valid only in `delayed` mode. Interval in minutes at which to load the application batches.",
                    "type": "number"
                },
                "batch": {
                    "description": "Valid only in `delayed` mode. Number of applications in a batch to be loaded at each interval.",
                    "type": "number"
                },
                "showDelayedIndicator": {
                    "description": "Visual indicator `Zzz` on tabs of apps which are not loaded yet. Useful for developing and testing purposes.",
                    "type": "boolean",
                    "default": false
                }
            },
            "additionalProperties": false
        },
        "downloadConfig": {
            "description": "Settings for downloading files in io.Connect Windows.",
            "type": "object",
            "properties": {
                "autoSave": {
                    "description": "If `true`, will auto save the file (without asking the user where to save it). If `false`, a system save dialog will appear.",
                    "type": "boolean",
                    "default": true
                },
                "autoOpenPath": {
                    "description": "If `true`, will open the folder that contains the downloaded file after the download is completed.",
                    "type": "boolean",
                    "default": false
                },
                "autoOpenDownload": {
                    "description": "If `true`, will open the download file after the download is completed.",
                    "type": "boolean",
                    "default": false
                },
                "enable": {
                    "description": "If `true`, will enable the window to download files.",
                    "type": "boolean",
                    "default": true
                },
                "enableDownloadBar": {
                    "description": "If `true`, a download bar tracking the download progress will appear at the bottom of the window. If `false`, the download process will be invisible.",
                    "type": "boolean",
                    "default": true
                },
                "path": {
                    "description": "Location where the downloaded file will be saved. Due to security reasons, there are only two possible locations for downloads: the Windows \"Temp\" or \"Downloads\" folder.",
                    "type": "string",
                    "default": "%DownloadsFolder%"
                }
            },
            "additionalProperties": false
        },
        "layoutsConfig": {
            "description": "Settings for Layouts.",
            "type": "object",
            "additionalProperties": false,
            "default": {},
            "properties": {
                "store": {
                    "description": "Settings for the Layout store.",
                    "type": "object",
                    "properties": {
                        "type": {
                            "description": "Type of the Layout store. Set to `\"file\"` to read Layouts from a local file. Set to `\"rest\"` to fetch Layouts from a REST service. Set to `\"server\"` to fetch Layouts from **io.Manager**.",
                            "type": "string",
                            "enum": [
                                "file",
                                "rest",
                                "server",
                                "in-memory"
                            ],
                            "default": "file"
                        },
                        "restURL": {
                            "description": "URL pointing to the Layout store. Valid only in `\"rest\"` mode.",
                            "type": "string"
                        },
                        "restFetchInterval": {
                            "description": "Interval in seconds at which to poll the REST service for updates. Valid only in `\"rest\"` mode.",
                            "type": "number",
                            "default": 60
                        },
                        "restClientAuth": {
                            "description": "Authentication configuration. Valid only in `\"rest\"` mode.",
                            "type": "string",
                            "enum": [
                                "no-auth",
                                "negotiate",
                                "kerberos"
                            ],
                            "default": "negotiate"
                        },
                        "rejectUnauthorized": {
                            "description": "If `true`, SSL validation will be enabled for the REST server. Valid only in `\"rest\"` mode.",
                            "type": "boolean",
                            "default": true
                        }
                    }
                },
                "swimlaneImportExportV1Layouts": {
                    "description": "Deprecated.",
                    "type": "boolean",
                    "default": false
                },
                "restoreDefaultGlobalOnStartup": {
                    "description": "If `true`, the default Global Layout (if any) will be restored on startup of **io.Connect Desktop**.",
                    "type": "boolean",
                    "default": true
                },
                "components": {
                    "description": "Settings for instructing the io.Connect platform how to process the Layout components.",
                    "type": "object",
                    "properties": {
                        "maxSize": {
                            "description": "Maximum allowed size (width or height) in pixels for a Layout component. If this is set, the framework will check the sizes of all Layout components when restoring a Layout and if either the width or the height of the component exceeds the specified value, the component will be resized to the size of the screen on which it is being restored. This setting can be used as a safeguard against platform crashes in cases where a Layout component may be saved on a high-resolution monitor and the user then attempts to restore it on a low-resolution one due to changes in their monitor setup.",
                            "type": "number",
                            "default": 8192
                        }
                    }
                },
                "version": {
                    "description": "Deprecated.",
                    "type": "number"
                },
                "splash": {
                    "description": "Settings for the loading animation displayed when restoring a Layout.",
                    "type": "object",
                    "default": {},
                    "properties": {
                        "disabled": {
                            "description": "If `true`, the Layout loader will be disabled.",
                            "type": "boolean",
                            "default": false
                        },
                        "url": {
                            "description": "URL pointing to the location of the Layout loader.",
                            "type": "string",
                            "default": "file:///%IO_CD_ASSETS_DIR%/loader/index.html"
                        },
                        "title": {
                            "description": "Title for the Layout loader.",
                            "type": "string",
                            "default": "Global restore"
                        },
                        "width": {
                            "description": "Width in pixels for the Layout loader.",
                            "type": "number",
                            "default": 250
                        },
                        "height": {
                            "description": "Height in pixels for the Layout loader.",
                            "type": "number",
                            "default": 250
                        }
                    }
                }
            }
        },
        "applicationsConfig": {
            "description": "Settings for io.Connect apps.",
            "type": "object",
            "additionalProperties": false,
            "default": {},
            "properties": {
                "icons": {
                    "$ref": "#/definitions/iconsConfig"
                },
                "allowLogging": {
                    "description": "If `true`, apps will be allowed to create logs using the Logger API. Log files will be saved per app in `%LocalAppData%/interop.io/io.Connect Desktop/UserData/DEMO-INTEROP.IO/logs/applications`.",
                    "type": "boolean",
                    "default": false
                },
                "titleFormat": {
                    "description": "Format of the app title. The supported macros in the title format are `{title}` and `{instanceIndex}`, where `{title}` will be substituted with the value of the `\"title\"` property from the app definition and `{instanceIndex}` - with the consecutive number of the started app instance.",
                    "type": "string"
                },
                "closeOnHibernate": {
                    "description": "If `true`, app that are part of a hibernated Layout will be closed.",
                    "type": "boolean",
                    "default": true
                },
                "shells": {
                    "description": "Settings for shell apps.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "showNotificationsInfo": {
                            "description": "If `true`, will show a badge on the Windows taskbar icon of the shell app with the number of active notifications, and the jump list for the shell app will contain a \"Notifications\" action that will open the Notification Panel when the user clicks on it.",
                            "type": "boolean",
                            "default": false
                        },
                        "shutdownIfNotLoaded": {
                            "description": "If `true`, **io.Connect Desktop** will shutdown if all shell apps fail to load.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "timeout": {
                                    "description": "Interval in milliseconds to wait for the shell apps to load.",
                                    "type": "number",
                                    "default": 30000
                                },
                                "title": {
                                    "description": "Title for the error message if all shell apps fail to load.",
                                    "type": "string",
                                    "default": "Shell application failed to load."
                                },
                                "message": {
                                    "description": "Text for the error message if all shell apps fail to load.",
                                    "type": "string",
                                    "default": ""
                                }
                            }
                        }
                    }
                }
            }
        },
        "citrixConfig": {
            "description": "Settings for Citrix support.",
            "type": "object",
            "additionalProperties": false,
            "default": {},
            "properties": {
                "launcherPath": {
                    "description": "Location of the Citrix module used to launch published Citrix Virtual Apps.",
                    "type": "string",
                    "default": "%ProgramFiles(x86)%/Citrix/ICA Client/SelfServicePlugin"
                },
                "launcherModule": {
                    "description": "The file name of the Citrix module used to launch published Citrix Virtual Apps.",
                    "type": "string",
                    "default": "SelfService.exe"
                },
                "launcherArguments": {
                    "description": "The command line arguments used to launch published Citrix Virtual Apps.",
                    "type": "string",
                    "default": "-qlaunch \"$appName$\""
                },
                "launcherSpawnInterval": {
                    "description": "Interval in milliseconds at which multiple launcher modules will be spawned.",
                    "type": "number",
                    "default": 1500
                }
            }
        },
        "legacyConfig": {
            "description": "Deprecated. Legacy options that should not be used in new **io.Connect Desktop** deployments.",
            "type": "object",
            "properties": {
                "randomApplicationInInterop": {
                    "description": "If `true`, will generate random `application` property in the apps Interop instances (except for single instance apps).",
                    "type": "boolean",
                    "default": false
                },
                "registerPrintToPDFMethod": {
                    "description": "If `true`, will register the `T42.Wnd.PrintToPdf` Interop method.",
                    "type": "boolean",
                    "default": false
                },
                "userApplicationOptions": {
                    "type": "boolean",
                    "default": false
                },
                "tabTitleTakesPrecedenceOverTitle": {
                    "description": "If `true`, the tab title (if present) will take precedence over the title.",
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "iconsConfig": {
            "description": "App icons configuration.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "rejectUnauthorized": {
                    "description": "Deprecated. If `true`, the server certificate is verified against the list of supplied CA certificates.",
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "zoomConfig": {
            "description": "Settings for zooming in web apps.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable zooming.",
                    "type": "boolean",
                    "default": true
                },
                "mouseWheelZoom": {
                    "description": "If `true`, will enable zooming with `CTRL` + `mouse scroll`.",
                    "type": "boolean",
                    "default": false
                },
                "factors": {
                    "description": "List of zoom factors to be used when the user zooms in or out of the window. The factors must be in ascending order and may have integer or floating point values. Zooming will only work with factor values within the range of `25` to `500`. Avoid passing negative values when setting the zoom factor (via configuration or programmatically), as this will cause unexpected behavior.",
                    "type": "array",
                    "items": {
                        "description": "Zoom factor.",
                        "type": "number"
                    },
                    "default": [
                        25,
                        33,
                        50,
                        67,
                        75,
                        80,
                        90,
                        100,
                        110,
                        125,
                        150,
                        175,
                        200,
                        250,
                        300,
                        400,
                        500
                    ]
                },
                "defaultFactor": {
                    "description": "Default zoom factor within the range of `25` to `500`. Avoid negative values.",
                    "type": "number",
                    "default": 100
                },
                "mode": {
                    "description": "Determines the default zoom behavior for web apps. If set to `\"domain\"`, changes in the zoom factor will be applied to the current window, as well as to all other windows within the same domain (default web browser behavior). If set to `\"window\"`, changes in the zoom factor will be applied only to the current window and won't affect other windows within the domain.",
                    "type": "string",
                    "enum": [
                        "domain",
                        "window"
                    ],
                    "default": "domain"
                }
            }
        },
        "foldersConfig": {
            "description": "Settings for folders used by **io.Connect Desktop**.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "userData": {
                    "descriptions": "Location for storing user-specific data like app definitions, Layouts, logs, cache and other system information. Accepts an absolute path, or a path relative to the location of the **io.Connect Desktop** executable file. You can use environment variables.",
                    "type": "string",
                    "default": "%IO_CD_USER_DATA_DIR%"
                },
                "cache": {
                    "description": "Settings for the Electron cache.",
                    "anyOf": [
                        {
                            "description": "Settings for storing and copying the Electron cache.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "copy": {
                                    "anyOf": [
                                        {
                                            "description": "Settings for copying the Electron cache.",
                                            "type": "object",
                                            "properties": {
                                                "path": {
                                                    "descriptions": "Absolute path pointing the location from where to copy the Electron cache and add it to the cache files for the upgraded version of **io.Connect Desktop**.",
                                                    "type": "string"
                                                }
                                            }
                                        },
                                        {
                                            "description": "If `true`, the Electron cache from the closest previously installed **io.Connect Desktop** version will be copied and added to the cache files for the upgraded version of **io.Connect Desktop**.",
                                            "type": "boolean"
                                        }
                                    ],
                                    "default": false
                                },
                                "location": {
                                    "descriptions": "Location for the Electron cache. Accepts an absolute path, or a path relative to the location of the **io.Connect Desktop** executable file. You can use environment variables.",
                                    "type": "string",
                                    "default": "%IO_CD_USER_DATA_DIR%"
                                },
                                "clearOld": {
                                    "description": "If `true`, the Electron cache from previous platform versions within the same location will be deleted on startup.",
                                    "type": "boolean",
                                    "default": false
                                }
                            }
                        },
                        {
                            "descriptions": "Location for the Electron cache. Accepts an absolute path, or a path relative to the location of the **io.Connect Desktop** executable file. You can use environment variables.",
                            "type": "string",
                            "default": "%IO_CD_USER_DATA_DIR%"
                        }
                    ]
                },
                "remoteConfig": {
                    "descriptions": "Location for storing configuration files for **io.Connect Desktop** downloaded from remote locations. Accepts an absolute path, or a path relative to the location of the **io.Connect Desktop** executable file. You can use environment variables.",
                    "type": "string",
                    "default": "%IO_CD_USER_DATA_DIR%/remoteConfig"
                },
                "platformCache": {
                    "description": "Settings for the **io.Connect Desktop** cache.",
                    "type": "object",
                    "properties": {
                        "location": {
                            "description": "Absolute path determining the location for storing the cached files. You can use environment variables.",
                            "type": "string",
                            "default": "%IO_CD_USER_DATA_DIR%/cache"
                        }
                    },
                    "additionalProperties": false
                }
            }
        },
        "cascadeConfig": {
            "description": "Settings for opening new window instances of the same app in a cascade.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable cascading windows.",
                    "type": "boolean",
                    "default": true
                },
                "offset": {
                    "description": "Offset in pixels for the cascaded window.",
                    "type": "number",
                    "default": 50
                }
            }
        },
        "trayConfig": {
            "description": "Settings for the tray menu of **io.Connect Desktop**.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable the tray menu.",
                    "type": "boolean",
                    "default": true
                },
                "info": {
                    "description": "If `true`, will show the section providing information about the product.",
                    "type": "boolean",
                    "default": true
                },
                "open": {
                    "description": "If `true`, will show the \"Open\" item for starting the Open app.",
                    "type": "boolean",
                    "default": true
                },
                "applications": {
                    "description": "If `true`, will show the \"Application\" item for starting the Applications app.",
                    "type": "boolean",
                    "default": true
                },
                "themes": {
                    "description": "If `true`, will show the \"Themes\" item for switching the themes.",
                    "type": "boolean",
                    "default": true
                },
                "diagnostic": {
                    "description": "If `true`, will show the \"Diagnostic\" item containing various diagnostics actions and settings.",
                    "type": "boolean",
                    "default": true
                },
                "hotkeys": {
                    "description": "If `true`, will show the \"Hotkeys\" item for opening the Hotkeys table.",
                    "type": "boolean",
                    "default": true
                },
                "notifications": {
                    "description": "If `true`, will show the \"Notifications\" item for opening the Notification Panel when there are active notifications.",
                    "type": "boolean",
                    "default": false
                },
                "feedback": {
                    "description": "If `true`, will show the \"Feedback\" item for opening the Feedback Form.",
                    "type": "boolean",
                    "default": true
                },
                "about": {
                    "description": "If `true`, will show the \"About\" item for opening the About app.",
                    "type": "boolean",
                    "default": true
                },
                "restart": {
                    "description": "If `true`, will show the \"Restart\" item for restarting **io.Connect Desktop**.",
                    "type": "boolean",
                    "default": true
                },
                "exit": {
                    "description": "If `true`, will show the \"Exit\" item for shutting down **io.Connect Desktop**.",
                    "type": "boolean",
                    "default": true
                }
            }
        },
        "extendsConfig": {
            "description": "Deprecated. Defines a local or remote location for a configuration file that will extend or will be extended by the current configuration in this file.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "description": "The type of the extend. Can be on of the following: 'remote', 'file' or 'rest'.",
                    "type": "string"
                },
                "source": {
                    "description": "The file path or the REST endpoint",
                    "type": "string"
                },
                "timeout": {
                    "description": "A timeout in milliseconds that the system will use to wait for fetching the extends.",
                    "type": "number",
                    "default": 30000
                },
                "required": {
                    "description": "If true failing to get the resource will be treated as system error, otherwise it will be just logged",
                    "type": "boolean",
                    "default": false
                },
                "auth": {
                    "description": "The way this app store will connect to a protected server.",
                    "type": "string",
                    "enum": [
                        "no-auth",
                        "negotiate",
                        "kerberos"
                    ],
                    "default": "no-auth"
                }
            }
        },
        "searchConfig": {
            "description": "Settings for searching in web apps.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable searching in web apps with `CTRL + F`.",
                    "type": "boolean"
                }
            }
        },
        "printToPdfConfig": {
            "description": "Settings for printing the window web page as a PDF file.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable printing to a PDF file.",
                    "type": "boolean",
                    "default": true
                },
                "autoSave": {
                    "description": "If `true`, will auto save the PDF file. If `false`, a system dialog will appear asking the user where to save the file.",
                    "type": "boolean",
                    "default": false
                },
                "autoOpenPath": {
                    "description": "If `true`, will open automatically the directory where the file was saved.",
                    "type": "boolean",
                    "default": false
                },
                "autoOpen": {
                    "description": "If `true`, will open the downloaded file after the download is completed.",
                    "type": "boolean",
                    "default": false
                },
                "fullPath": {
                    "description": "The default directory where PDF files will be saved.",
                    "type": "string",
                    "default": "%DownloadsFolder%"
                },
                "usePrintShortcutKey": {
                    "description": "If `true`, will use `CTRL + P` by default to print to a PDF file.",
                    "type": "boolean",
                    "default": false
                },
                "headerFooter": {
                    "description": "Header and footer for the PDF.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "title": {
                            "description": "Title to be printed in the header and the footer..",
                            "type": "string"
                        },
                        "url": {
                            "description": "URL to be printed in the header and the footer.",
                            "type": "string"
                        }
                    }
                },
                "landscape": {
                    "description": "If `true`, will print to PDF in landscape mode. If `false`, will print to PDF in portrait mode.",
                    "type": "boolean"
                },
                "marginsType": {
                    "description": "Specifies the type of margins to use. Use `0` for default margin, `1` for no margin, and `2` for minimum margin.",
                    "type": "number"
                },
                "pageRanges": {
                    "description": "The page ranges to print.",
                    "type": "array",
                    "items": {
                        "description": "Page range.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "from": {
                                "description": "Index of the first page to print (0-based).",
                                "type": "number"
                            },
                            "to": {
                                "description": "Index of the last page to print (inclusive, 0-based).",
                                "type": "number"
                            }
                        }
                    }
                },
                "pageSize": {
                    "description": "Page size in inches or in standardized sizes such as A3, A4, Letter, Legal, etc.",
                    "anyOf": [
                        {
                            "description": "The size of the printed page.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "width": {
                                    "description": "Width in inches.",
                                    "type": "number"
                                },
                                "height": {
                                    "description": "Height in inches.",
                                    "type": "number"
                                }
                            }
                        },
                        {
                            "description": "The size of the printed page.",
                            "type": "string",
                            "enum": [
                                "A3",
                                "A4",
                                "A5",
                                "Legal",
                                "Letter",
                                "Tabloid"
                            ]
                        }
                    ]
                },
                "printBackground": {
                    "description": "If `true`, will print the page background.",
                    "type": "boolean"
                },
                "printSelectionOnly": {
                    "description": "If `true`, will print only the currently selected section of the page.",
                    "type": "boolean"
                },
                "scaleFactor": {
                    "description": "The scale factor of the web page. Can range from 0 to 100.",
                    "type": "number"
                }
            }
        },
        "printConfig": {
            "description": "Settings for printing a web page.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable printing.",
                    "type": "boolean",
                    "default": true
                },
                "collate": {
                    "description": "If `true`, printed copies will be collated.",
                    "type": "boolean"
                },
                "color": {
                    "description": "If `true`, will print the page in color. Otherwise, in grayscale.",
                    "type": "boolean",
                    "default": true
                },
                "copies": {
                    "description": "The number of copies to print.",
                    "type": "number"
                },
                "deviceName": {
                    "description": "Sets the printer device name to use. Must be the system-defined name and not the user-friendly name.",
                    "type": "string"
                },
                "dpi": {
                    "description": "Printing resolution.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "horizontal": {
                            "description": "Horizontal resolution in DPI.",
                            "type": "number"
                        },
                        "vertical": {
                            "description": "Vertical resolution in DPI.",
                            "type": "number"
                        }
                    }
                },
                "duplexMode": {
                    "description": "Setting for duplex printing.",
                    "type": "string",
                    "enum": [
                        "longEdge",
                        "shortEdge",
                        "simplex"
                    ]
                },
                "footer": {
                    "description": "String that will be printed as a footer on each page.",
                    "type": "string"
                },
                "header": {
                    "description": "String that will be printed as a header on each page.",
                    "type": "string"
                },
                "landscape": {
                    "description": "If `true`, will print the page in landscape mode. If `false`, will print the page in portrait mode.",
                    "type": "boolean",
                    "default": false
                },
                "margins": {
                    "description": "Settings for the margins of the printed page.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "bottom": {
                            "description": "Bottom margin in pixels for the printed page.",
                            "type": "number"
                        },
                        "left": {
                            "description": "Left margin in pixels for the printed page.",
                            "type": "number"
                        },
                        "marginType": {
                            "description": "Predefined margin type. If you choose `\"custom\"`, you must also set `\"top\"`, `\"bottom\"`, `\"left\"`, and `\"right\"`.",
                            "type": "string",
                            "enum": [
                                "custom",
                                "default",
                                "none",
                                "printableArea"
                            ]
                        },
                        "right": {
                            "description": "Right margin in pixels for the printed page.",
                            "type": "number"
                        },
                        "top": {
                            "description": "Top margin in pixels for the printed page.",
                            "type": "number"
                        }
                    }
                },
                "pageRanges": {
                    "description": "The page ranges to print.",
                    "type": "array",
                    "items": {
                        "description": "Page range.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "from": {
                                "description": "Index of the first page to print (0-based).",
                                "type": "number"
                            },
                            "to": {
                                "description": "Index of the last page to print (inclusive, 0-based).",
                                "type": "number"
                            }
                        }
                    }
                },
                "pageSize": {
                    "description": "Page size in inches or in standardized sizes such as A3, A4, Letter, Legal, etc.",
                    "anyOf": [
                        {
                            "description": "The size of the printed page.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "width": {
                                    "description": "Width in inches.",
                                    "type": "number"
                                },
                                "height": {
                                    "description": "Height in inches.",
                                    "type": "number"
                                }
                            }
                        },
                        {
                            "description": "The size of the printed page.",
                            "type": "string",
                            "enum": [
                                "A3",
                                "A4",
                                "A5",
                                "Legal",
                                "Letter",
                                "Tabloid"
                            ]
                        }
                    ]
                },
                "pagesPerSheet": {
                    "description": "The number of pages to print per sheet.",
                    "type": "number"
                },
                "printBackground": {
                    "description": "If `true`, will print the page background.",
                    "type": "boolean",
                    "default": false
                },
                "scaleFactor": {
                    "description": "The scale factor of the web page. Can range from 0 to 100.",
                    "type": "number"
                },
                "silent": {
                    "description": "If `true`, won't ask the user for print settings.",
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "config": {
            "description": "Settings for additional system configuration sources to be used by **io.Connect Desktop**.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "sources": {
                    "description": "Array of objects each describing a configuration source from which **io.Connect Desktop** will load system configurations. Multiple sources can be specified and will be merged based on priority.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/configSource"
                    },
                    "additionalProperties": false
                }
            }
        },
        "configSource": {
            "description": "Defines a configuration source from which **io.Connect Desktop** will load system configurations.",
            "type": "object",
            "additionalProperties": false,
            "required": [
                "type",
                "source"
            ],
            "properties": {
                "type": {
                    "description": "The type of the configuration source. Can be a local or a remote source.",
                    "type": "string",
                    "enum": [
                        "path",
                        "rest",
                        "default"
                    ]
                },
                "source": {
                    "description": "URL or an absolute or a relative file path pointing to the configuration source. You can use environment variables.",
                    "type": "string"
                },
                "configs": {
                    "description": "Comma-separated list of the names of the configuration files to apply (e.g., `\"system, my-custom-file\"`). By default, the platform will fetch and apply all available files from the specified source. If you specify one or more file names, the platform will still fetch all available files, but will apply only the specified ones.",
                    "type": "string"
                },
                "priority": {
                    "description": "The priority of the configuration source. Higher numbers indicate higher priority when merging configurations from multiple sources. Sources with the same priority will be merged based on their order in the \"sources\" array (e.g., if there are two sources with the same priority, the one that's defined last in the array will take precedence).",
                    "type": "number",
                    "default": 1000
                },
                "required": {
                    "description": "If `true`, failing to get the resource will be treated as a system error and the platform won't initialize, otherwise the platform will just log the error.",
                    "type": "boolean",
                    "default": false
                },
                "restTimeout": {
                    "description": "Interval in seconds to wait for a response from the remote store. Valid only for remote sources.",
                    "type": "number",
                    "default": 30
                },
                "restRetries": {
                    "description": "Number of retries for fetching data from the remote store. Valid only for remote sources.",
                    "type": "number",
                    "default": 3
                },
                "restBackoffFactor": {
                    "description": "Exponential backoff factor in milliseconds used for determining the waiting interval between retries when fetching data from the remote store. The waiting interval is calculated with the `<restBackoffFactor>*2^<retry>` formula and is limited to a maximum of 5 minutes between retries. Valid only for remote sources.",
                    "type": "number",
                    "default": 1000
                },
                "restUseCache": {
                    "description": "If `true`, will use the local cache as fallback when the remote source is unavailable. Valid only for remote sources.",
                    "type": "boolean",
                    "default": true
                },
                "impersonation": {
                    "description": "Settings for impersonating a user, a user group, and a platform version for which to fetch configurations. The impersonation details are sent in all requests to all defined remote sources. The remote source implementation may use them to determine which version of a configuration file to return as a response.",
                    "type": "object",
                    "properties": {
                        "user": {
                            "description": "The user to impersonate.",
                            "type": "string"
                        },
                        "version": {
                            "description": "The platform version to impersonate.",
                            "type": "string"
                        },
                        "group": {
                            "description": "The user group to impersonate.",
                            "type": "string"
                        }
                    }
                }
            }
        },
        "applicationPreferencesStore": {
            "description": "Settings for the app preferences store.",
            "type": "object",
            "properties": {
                "type": {
                    "description": "The type of the app preferences store. Set to `\"file\"` to read app preferences from a local file. Set to `\"rest\"` to fetch app preferences from a REST service. Set to `\"server\"` to fetch app preferences from **io.Manager**.",
                    "type": "string",
                    "enum": [
                        "file",
                        "rest",
                        "server"
                    ],
                    "default": "file"
                },
                "newDataCheckInterval": {
                    "description": "Interval in seconds at which to check for new data from the REST store. Executed only if subscribers are available. Valid only in `\"rest\"` mode.",
                    "type": "number",
                    "default": 1800
                },
                "restURL": {
                    "description": "URL pointing to the app preferences store. Valid only in `\"rest\"` mode.",
                    "type": "string"
                },
                "restClientAuth": {
                    "description": "Authentication configuration. Valid only in `\"rest\"` mode.",
                    "type": "string",
                    "enum": [
                        "no-auth",
                        "negotiate",
                        "kerberos"
                    ]
                },
                "restRetries": {
                    "description": "Number of retries when fetching data from the REST store. Valid only in `\"rest\"` mode.",
                    "type": "number",
                    "default": 3
                },
                "restBackoffFactor": {
                    "description": "Exponential backoff factor in milliseconds used for determining the waiting interval between retries when fetching data from the REST store. The waiting interval is calculated with the `<restBackoffFactor>*2^<retry>` formula and is limited to a maximum of 5 minutes between retries. Valid only in `\"rest\"` mode.",
                    "type": "number",
                    "default": 1000
                }
            }
        },
        "jumpListConfig": {
            "description": "Settings for app jump lists. Jump lists are categorized lists with actions that appear in the context menu when the user right-clicks on the Windows taskbar icons of io.Connect apps. Currently available only in the advanced platform mode.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable jump lists.",
                    "type": "boolean",
                    "default": true
                },
                "categories": {
                    "description": "Categorized lists with actions to execute when the user clicks on them.",
                    "type": "array",
                    "items": {
                        "description": "Describes a jump list category.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "title": {
                                "description": "Title of the category to be displayed in the context menu.",
                                "type": "string"
                            },
                            "actions": {
                                "description": "List of actions contained in the category.",
                                "type": "array",
                                "items": {
                                    "description": "Describes a jump list action.",
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "type": {
                                            "description": "Type of the predefined action to execute.",
                                            "type": "string",
                                            "enum": [
                                                "notifications",
                                                "centerScreen",
                                                "userDefined",
                                                "focusApplication",
                                                "newWorkspace"
                                            ]
                                        },
                                        "icon": {
                                            "description": "Icon for the action to be displayed in the context menu. Must point to a local file.",
                                            "type": "string"
                                        },
                                        "singleInstanceTitle": {
                                            "description": "Title of the action to be displayed in the context menu when there is a single instance with a single Windows taskbar icon.",
                                            "type": "string"
                                        },
                                        "multiInstanceTitle": {
                                            "description": "Title of the action to be displayed in the context menu when there are multiple instances with grouped Windows taskbar icons.",
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "type"
                                    ]
                                },
                                "default": []
                            }
                        }
                    },
                    "default": [
                        {
                            "title": "Tasks",
                            "actions": [
                                {
                                    "type": "centerScreen",
                                    "icon": "%IO_CD_ASSETS_DIR%/images/center.ico",
                                    "singleInstanceTitle": "Center on Primary Screen",
                                    "multiInstanceTitle": "Center all on Primary Screen"
                                }
                            ]
                        }
                    ]
                }
            }
        },
        "telemetryConfig": {
            "description": "Settings for telemetry data published by **io.Connect Desktop**.",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable telemetry data published by **io.Connect Desktop**. If `false`, telemetry data won't be gathered or published.",
                    "type": "boolean",
                    "default": true
                },
                "features": {
                    "description": "Telemetry data sets that you can enable or disable from being published by **io.Connect Desktop**.",
                    "type": "object",
                    "properties": {
                        "apps": {
                            "description": "If `true`, will enable publishing telemetry data related to web app performance.",
                            "type": "boolean"
                        },
                        "stores": {
                            "description": "If `true`, will enable publishing telemetry data related to app stores.",
                            "type": "boolean"
                        },
                        "system": {
                            "description": "If `true`, will enable publishing telemetry data related to system performance.",
                            "type": "boolean"
                        }
                    }
                }
            }
        },
        "streamingConfig": {
            "description": "Settings for streaming the system log entries. If enabled, all log entries at the specified log level will be streamed at the specified interval and can be acquired by registering an Interop method named `\"T42.Logs.Listen\"`.",
            "type": "object",
            "default": {
                "enabled": false,
                "minLevel": "error",
                "interval": 120
            },
            "additionalProperties": false,
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable streaming system log entries.",
                    "type": "boolean",
                    "default": false
                },
                "minLevel": {
                    "description": "The minimum level of the log entries to be streamed.",
                    "type": "string",
                    "enum": [
                        "error",
                        "warn",
                        "info"
                    ],
                    "default": "error"
                },
                "interval": {
                    "description": "Interval in seconds at which the log entries will be streamed.",
                    "type": "number",
                    "default": 120
                }
            }
        },
        "protocolHandlerConfig": {
            "description": "Describes a protocol handler.",
            "type": "object",
            "default": {},
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable registering the default io.Connect protocol handler, as well as any other custom protocol handlers.",
                    "type": "boolean",
                    "default": true
                },
                "register": {
                    "description": "If `true`, **io.Connect Desktop** will register the global protocol handler in the system registry. Set to `false` if you want to register the protocol some other way.",
                    "type": "boolean",
                    "default": true
                },
                "protocol": {
                    "description": "Custom name for the protocol prefix.",
                    "type": "string",
                    "default": "ioconnect"
                },
                "type": {
                    "description": "Type of the global protocol handler. If `\"custom\"`, then the Interop method defined in `\"customHandler\"` will be invoked to handle the protocol command. Otherwise, it will be handled by the default io.Connect protocol handler.",
                    "type": "string",
                    "enum": [
                        "ioconnect",
                        "glue42",
                        "custom"
                    ],
                    "default": "ioconnect"
                },
                "customHandler": {
                    "description": "Interop method that will be used as a custom global protocol handler.",
                    "type": "string",
                    "default": "T42.GD.ProtocolHandler.Handle"
                },
                "startNewInstance": {
                    "description": "If enabled, will start a new io.Connect instance whenever a command for the default io.Connect or any custom global protocol handler is received.",
                    "type": "object",
                    "properties": {
                        "enabled": {
                            "description": "If `true`, will allow starting a new instance of io.Connect when opening links with the io.Connect protocol handler.",
                            "type": "boolean",
                            "default": true
                        },
                        "defaultExecutable": {
                            "description": "Settings for the default executable file to be started.",
                            "type": "object",
                            "properties": {
                                "path": {
                                    "description": "Path to an executable file that will be started if no other io.Connect instance is running. Note that if the path points to a script file that in turn will launch **io.Connect Desktop**, then you must pass the startup arguments from the script to **io.Connect Desktop**.",
                                    "type": "string"
                                },
                                "args": {
                                    "description": "List of command line arguments.",
                                    "type": "array",
                                    "items": {
                                        "description": "Command line argument.",
                                        "type": "string"
                                    }
                                },
                                "iconPath": {
                                    "description": "Absolute or relative local path pointing to an icon file to be used for the new platform instance. You can use environment variables.",
                                    "type": "string"
                                }
                            },
                            "additionalProperties": false
                        },
                        "errorMessage": {
                            "description": "Message that will override the default error message displayed when starting a new io.Connect instance is disabled.",
                            "type": "string"
                        }
                    },
                    "additionalProperties": false
                },
                "allowOpeningURLs": {
                    "description": "Setting for allowed and forbidden URLs to open. This setting won't be applied to any custom protocol handlers. If you want to use this setting in your custom protocol implementation, you can access its value via the object passed as an argument to your custom protocol handler.",
                    "default": true,
                    "oneOf": [
                        {
                            "description": "If `true`, will allow opening of all URLs.",
                            "type": "boolean"
                        },
                        {
                            "description": "Lists of allowed and forbidden URLs.",
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                                "allowed": {
                                    "description": "List of allowed URLs.",
                                    "type": "array",
                                    "default": [],
                                    "items": {
                                        "description": "URL.",
                                        "type": "string"
                                    }
                                },
                                "forbidden": {
                                    "description": "List of forbidden URLs.",
                                    "type": "array",
                                    "default": [],
                                    "items": {
                                        "description": "URL.",
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "preloadScriptsConfig": {
            "description": "Settings for preload scripts.",
            "type": "object",
            "properties": {
                "scripts": {
                    "description": "List of preload scripts that will be executed in the specified order.",
                    "type": "array",
                    "items": {
                        "oneOf": [
                            {
                                "$ref": "#/definitions/injectedItemDefinition"
                            },
                            {
                                "description": "URL pointing to a local or a remote preload script.",
                                "type": "string"
                            }
                        ]
                    }
                },
                "useBase64PreloadScripts": {
                    "description": "If `true`, will import the preload scripts as Base64 strings.",
                    "type": "boolean",
                    "default": false
                }
            },
            "additionalProperties": false,
            "required": [
                "scripts"
            ]
        },
        "injectedItemDefinition": {
            "description": "Describes a preload script or a CSS file to be injected in a web app.",
            "type": "object",
            "properties": {
                "url": {
                    "description": "URL pointing to a local or a remote preload script or a CSS file.",
                    "type": "string"
                },
                "fallback": {
                    "description": "URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `\"url\"` property doesn't load.",
                    "type": "string"
                },
                "timeout": {
                    "description": "Interval in milliseconds to wait for the item to load.",
                    "type": "number"
                },
                "critical": {
                    "description": "If `true`, the preload script or CSS file failure will be treated as a critical error.",
                    "type": "boolean",
                    "default": false
                }
            },
            "required": [
                "url"
            ]
        },
        "otelMetricsDefinition": {
            "description": "Settings for OpenTelemetry metrics.",
            "type": "object",
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "If `true`, will enable publishing of OpenTelemetry metrics."
                },
                "url": {
                    "type": "string",
                    "description": "URL pointing to an OpenTelemetry metrics server."
                },
                "publishInterval": {
                    "type": "number",
                    "description": "Interval in milliseconds at which to publish the generated metrics."
                },
                "defaultMetricsEnabled": {
                    "type": "boolean",
                    "description": "If `true`, will enable publishing of all default OpenTelemetry metrics defined in **io.Connect Desktop**."
                },
                "additionalAttributes": {
                    "type": "object",
                    "description": "Additional metrics properties to publish as part of each metric, specified as key/value pairs. You can use environment variables as values. Environment variables must start and end with a percent sign (e.g., `%MyEnvVar%`), and can contain a fallback value (e.g., `%MyEnvVar?literalDefaultValue%`).",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "additionalResourceAttributes": {
                    "type": "object",
                    "description": "Additional metrics properties to publish as part of the OTEL resource definition, specified as key/value pairs. You can use environment variables as values. Environment variables must start and end with a percent sign (e.g., `%MyEnvVar%`), and can contain a fallback value (e.g., `%MyEnvVar?literalDefaultValue%`).",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "metrics": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/otelMetricDefinition"
                    },
                    "default": []
                }
            },
            "additionalProperties": true
        },
        "otelMetricDefinition": {
            "description": "Settings for an OpenTelemetry metric.",
            "type": "object",
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "If `true`, will enable publishing of the OpenTelemetry metric."
                },
                "name": {
                    "type": "string",
                    "description": "Name for the OpenTelemetry metric. May be used in visualization tools."
                },
                "description": {
                    "type": "string",
                    "description": "Description for the OpenTelemetry metric."
                },
                "buckets": {
                    "description": "Specify explicit bucket boundaries for the OpenTelemetry SDK if the metric has been created by a `HistogramAggregator`.",
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                "type": {
                    "type": "string",
                    "description": "Type of the predefined OpenTelemetry metric.",
                    "enum": [
                        "app_started",
                        "app_stopped",
                        "app_startup",
                        "app_count",
                        "app_duration",
                        "app_memory",
                        "app_cpu",
                        "app_error",
                        "app_crash",
                        "layout_startup",
                        "workspace_startup",
                        "workspace_started",
                        "workspace_stopped",
                        "workspace_count",
                        "platform_startup",
                        "platform_error",
                        "system_memory",
                        "system_cpu"
                    ]
                }
            },
            "required": [
                "type"
            ],
            "additionalProperties": false
        },
        "otelTracesDefinition": {
            "description": "Settings for OpenTelemetry traces.",
            "type": "object",
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "If `true`, will enable publishing of OpenTelemetry traces."
                },
                "url": {
                    "type": "string",
                    "description": "URL pointing to an OpenTelemetry traces server."
                },
                "publishInterval": {
                    "type": "number",
                    "description": "Interval in milliseconds at which to publish the generated traces."
                }
            },
            "additionalProperties": true
        },
        "otelLogsDefinition": {
            "description": "Settings for OpenTelemetry logs.",
            "type": "object",
            "default": {
                "enabled": true
            },
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "If `true`, will enable publishing of OpenTelemetry logs."
                },
                "url": {
                    "type": "string",
                    "description": "URL pointing to an OpenTelemetry logs server."
                },
                "publishInterval": {
                    "type": "number",
                    "description": "Interval in milliseconds at which to publish the generated logs."
                }
            },
            "additionalProperties": true
        },
        "injectedStylesConfig": {
            "description": "Settings for injecting CSS files in web apps. The CSS files will be injected after the page has been loaded.",
            "default": {},
            "properties": {
                "replace": {
                    "type": "boolean",
                    "description": "If `true`, will replace the existing styles of the web app with the injected ones. Note that this won't affect styles added dynamically after the initial page load. If `false`, the existing styles will be merged with the injected ones."
                },
                "styles": {
                    "description": "List of objects describing CSS files that will be injected in the specified order.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/injectedItemDefinition"
                    }
                }
            }
        },
        "channelSelector": {
            "description": "Settings for the Channel Selector UI.",
            "type": "object",
            "properties": {
                "type": {
                    "description": "Type of the Channel Selector to show on the io.Connect Windows. The single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. The directional single Channel Selector allows the window to join a single Channel, but also enables the user to restrict the window from publishing or from subscribing to the current Channel. The multi Channel Selector allows the window to join multiple Channels simultaneously to which it can subscribe and publish data unrestrictedly. The directional multi Channel Selector allows the window to join multiple Channels, but also enables the user to restrict the window from publishing or from subscribing to the currently joined Channels.",
                    "type": "string",
                    "enum": [
                        "single",
                        "directionalSingle",
                        "multi",
                        "directionalMulti"
                    ],
                    "default": "single"
                },
                "enabled": {
                    "description": "If `true`, will allow showing the Channel Selector.",
                    "type": "boolean",
                    "default": false
                },
                "readOnly": {
                    "description": "If `true`, the Channel Selector will be visible, but the user won't be able to switch between Channels from it.",
                    "type": "boolean",
                    "default": false
                },
                "channelId": {
                    "description": "Name of the Channel to which the window will be joined by default when it's started.",
                    "type": "string"
                }
            }
        },
        "requestsConfig": {
            "description": "Settings for the requests sent to **io.Manager**.",
            "type": "object",
            "properties": {
                "timeout": {
                    "description": "Interval in milliseconds to wait for a response from **io.Manager**.",
                    "type": "number",
                    "default": 60000
                },
                "openSessionTimeout": {
                    "description": "Interval in milliseconds to wait for a response to the `openSession` request to **io.Manager** before proceeding from cache.",
                    "type": "number",
                    "default": 60000
                },
                "closeSessionTimeout": {
                    "description": "Interval in milliseconds to wait for a response to the `closeSession` request to **io.Manager**.",
                    "type": "number",
                    "default": 10000
                },
                "logSanitization": {
                    "description": "If `true`, the logged requests will be sanitized. If set to `false`, sensitive information (tokens) won't be removed from the logged requests.",
                    "type": "boolean",
                    "default": true
                },
                "loggerLevel": {
                    "description": "Log level with which the requests to **io.Manager** will be logged.",
                    "type": "string",
                    "default": "trace"
                },
                "logHTTPHeaders": {
                    "description": "If `true`, will log the request and response HTTP headers of the requests sent to **io.Manager**.",
                    "type": "boolean",
                    "default": false
                },
                "requestBodyValidation": {
                    "description": "If `true`, the bodies of the requests sent to **io.Manager** will be validated.",
                    "type": "boolean",
                    "default": true
                },
                "responseBodyValidation": {
                    "description": "If `true`, the response bodies received by **io.Manager** will be validated.",
                    "type": "boolean",
                    "default": true
                }
            }
        },
        "cacheConfig": {
            "description": "Settings for persisting data received from **io.Manager**.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable caching and persisting data from **io.Manager** locally (e.g., in case of connection interruptions).",
                    "type": "boolean",
                    "default": false
                },
                "location": {
                    "description": "Location for the persisted cache files.",
                    "type": "string",
                    "default": "%IO_CD_USER_DATA_DIR%/ioManagerCache"
                },
                "clearOld": {
                    "description": "If `true`, on opening a new session to **io.Manager**, all cache files from previous sessions will be deleted.",
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "entraSSOConfig": {
            "title": "EntraSSOConfig",
            "description": "Settings for using Microsoft Entra ID authentication. Available only on Windows. If enabled, Windows proof-of-possesion cookies will be automatically injected into requests to the specified Microsoft Entra ID login URLs.",
            "type": "object",
            "properties": {
                "enabled": {
                    "description": "If `true`, will enable proof-of-possesion cookie injection for Microsoft Entra ID authentication.",
                    "type": "boolean",
                    "default": false
                },
                "urls": {
                    "description": "List of Microsoft Entra ID login URLs for which proof-of-possession cookies will be injected. Supports wildcard symbols (`*`). The default Microsoft Entra ID endpoints are included by default.",
                    "type": "array",
                    "items": {
                        "description": "Microsoft Entra ID login URL.",
                        "type": "string"
                    },
                    "default": [
                        "https://login.microsoftonline.com/*",
                        "https://login.microsoft.com/*",
                        "https://login.live.com/*",
                        "https://*.microsoftonline.com/*"
                    ]
                }
            },
            "additionalProperties": false
        },
        "channelConfig": {
            "description": "Describes an io.Connect Channel.",
            "type": "object",
            "required": [
                "name",
                "meta"
            ],
            "properties": {
                "name": {
                    "description": "Unique name for the io.Connect Channel.",
                    "type": "string"
                },
                "meta": {
                    "description": "Metadata associated with the Channel. This object may contain any data related to the respective Channel.",
                    "type": "object",
                    "required": [
                        "color"
                    ],
                    "properties": {
                        "color": {
                            "description": "The Channel color displayed on the Channel Selector UI and on each app using that Channel. Can be either an HTML color name or a hexadecimal color code.",
                            "type": "string"
                        }
                    },
                    "additionalProperties": true
                }
            },
            "additionalProperties": false
        },
        "userAgentConfig": {
            "description": "Custom string to use for the `User-Agent` request header.",
            "oneOf": [
                {
                    "type": "string",
                    "description": "String to be used for the `User-Agent` request header. If set to `\"chromium\"`, will use the default Chromium `User-Agent` string without the Electron token. Any other string will be treated as a custom `User-Agent` string."
                },
                {
                    "type": "object",
                    "description": "Settings for the string to use for the `User-Agent` request header.",
                    "properties": {
                        "type": {
                            "type": "string",
                            "description": "Type of the `User-Agent` string. If set to `\"chromium\"`, will use the default Chromium `User-Agent` string without the Electron token. If set to `\"custom\"`, you must provide a custom string via the `\"value\"` property.",
                            "enum": [
                                "chromium",
                                "custom"
                            ]
                        },
                        "value": {
                            "type": "string",
                            "description": "Custom string to use for the `User-Agent` request header. Valid only if `\"type\"` is set to `\"custom\"`. This value will replace the entire default `User-Agent` string."
                        },
                        "append": {
                            "type": "string",
                            "description": "String to append to the end of the clean Chromium `User-Agent` string. Valid only if `\"type\"` is set to `\"chromium\"`. Use this to add custom tokens to the clean Chromium `User-Agent` string."
                        }
                    },
                    "required": [
                        "type"
                    ]
                }
            ]
        }
    },
    "additionalProperties": false
}