Configuration

System Configuration

The system configuration of io.Connect Desktop is located in the system.json file in the main configuration folder - %LocalAppData%/interop.io/io.Connect Desktop/Desktop/config. This file allows you to alter system-wide settings for window behavior, app stores, Gateway settings and much more. In most cases, the default configuration settings should suffice.

For more details about the available system configuration properties, see the system configuration and the io.Connect Gateway configuration schemas.

See also the More Features & APIs section of the documentation, as many of the platform features are configured via the system.json file.

The logging configuration for io.Connect Desktop is found in the logger.json file located in %LocalAppData%/interop.io/io.Connect Desktop/Desktop/config.

⚠️ Note that some of the globally defined properties in the system.json file may be overridden using the respective property definitions in the app definition files.

The following examples demonstrate some of the available system-level settings.

Dynamic Gateway Port

The io.Connect Gateway starts on port 8385 by default. In environments where multiple user sessions run on the same machine (e.g., running io.Connect Desktop as a Citrix Virtual App), using a predefined port won't work, as the first instance of io.Connect Desktop will occupy that port and all other instances won't be able to connect. To avoid this, the io.Connect Gateway can be configured from the "gw" top-level key in the system.json file to choose dynamically a free port on startup.

To configure the io.Connect Gateway to use a random free port, go to the "configuration" object under the "gw" top-level key and set its "port" property to 0:

{
    "gw": {
        "configuration": {
            "port": 0
        }
    }
}

For more details on the available configuration properties for the io.Connect Gateway, see the io.Connect Gateway configuration schema.

Gateway Memory Diagnostics

The io.Connect Gateway can be configured to take heap memory snapshots when the heap memory exceeds a predefined limit. You can also set limits for the maximum client connections to the io.Connect Gateway and a maximum size of messages sent by apps to the io.Connect Gateway. If the maximum message size is exceeded, a warning in the logs will be triggered, which can help you identify the responsible apps. Use the "memory" and "limits" properties of the "configuration" object under the "gw" top-level key to specify the desired settings.

The following is an example configuration:

{
    "gw": {
        "configuration": {
            "memory": {
                "report_interval": 300000,
                "max_backups": 5,
                "memory_limit": 1073741824,
                "dump_location": "%GLUE-USER-DATA%/heapsnapshots",
                "dump_prefix": "gw"
            },
            "limits": {
                "max_connections": 1000,
                "large_msg_threshold": 524288
            }
        }
    }
}

The "memory" object has the following properties:

Property Type Description
dump_locaton string Location for dumping the heap memory snapshots. Defaults to "%GLUE-USER-DATA%/heapsnapshots".
dump_prefix string Prefix for the file containing the heap memory snapshots. Files will be named in the format <dump-prefix>.<backup-number>.heapsnapshot. Defaults to "gw".
max_backups number Maximum number of heap memory snapshots that will be saved. Defaults to 10.
memory_limit number Limit for the heap memory size that will trigger heap memory snapshot. Defaults to 1073741824 (1GB).
report_interval number Interval in milliseconds at which the heap memory size will be checked and logged. Defaults to 300000.

The "limits" object has the following properties:

Property Type Description
large_msg_threshold number Maximum size in bytes of messages sent to the io.Connect Gateway that, if exceeded, will trigger a warning in the logs. Useful for detecting apps sending excessively large messages causing the io.Connect Gateway to crash. Defaults to 20000.
max_connections number Limit for the number of simultaneous app connections to the io.Connect Gateway. Unlimited by default.

For more details on the available configuration properties for the io.Connect Gateway, see the io.Connect Gateway configuration schema.

App Stores

To specify app stores with app definitions, use the "appStores" top-level key, which accepts an array of objects defining one or more app stores.

Local

To configure io.Connect Desktop to load app definition files from a local path, set the "type" property of the app store configuration object to "path" and specify a relative or an absolute path to the app definitions. The environment variables set by io.Connect Desktop can also be used as values:

{
    "appStores": [
        {
            "type": "path",
            "details": {
                "path": "./config/apps"
            }
        },
        {
            "type": "path",
            "details": {
                "path": "%GD3-APP-STORE%"
            }
        },
        {
            "type": "path",
            "details": {
                "path": "%GLUE-USER-DATA%/apps"
            }
        }
    ]
}

Each local path app store object has the following properties:

Property Type Description
"appDefinitionOverrides" object Valid app definition properties that will override the ones in all app definitions from the app store. Top-level app definition properties can be specified directly in the "appDefinitionOverrides" 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". Available since io.Connect Desktop 9.1.
"details" object Required. Specific details about the app store.
"isRequired" boolean If true (default), 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" string Required. Type of the app store. Must be set to "path" for local path app stores.

The "details" object for a local path app store has the following properties:

Property Type Description
"path" string Required. Must point to the local app store. The specified path can be absolute or relative and you can use defined environment variables.

REST

App definitions can also be obtained from remote app stores via a REST service.

To configure a connection to the REST service providing the remote app store, add a new entry to the "appStores" top-level key and set its "type" to "rest":

{
    "appStores": [
        {
            "type": "rest",
            "details": {
                "url": "https://example.com/my-app-store/",
                "auth": "no-auth",
                "pollInterval": 30000,
                "enablePersistentCache": true,
                "cacheFolder": "%LocalAppData%/interop.io/io.Connect Desktop/UserData/%GLUE-ENV%-%GLUE-REGION%/configCache/"
            },
            "appDefinitionOverrides": {
                // Overrides for some top-level app definition properties.
                "ignoreSavedLayout": true,
                "allowMultiple": false,
                // Overrides for the properties under the `"details"` top-level key in apps of type `"window"`.
                "window": {
                    "autoInjectAPI": {
                        "enabled": true,
                        "autoInit": {
                            "channels": true
                        }
                    }
                }
            }
        }
    ]
}

Each remote app store object has the following properties:

Property Type Description
"appDefinitionOverrides" object Valid app definition properties that will override the ones in all app definitions from the app store. Top-level app definition properties can be specified directly in the "appDefinitionOverrides" 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". Available since io.Connect Desktop 9.1.
"details" object Required. Specific details about the app store.
"isRequired" boolean If true (default), 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" string Required. Type of the app store. Must be set to "rest" for remote app stores.

The "details" object for a remote app store has the following properties:

Property Type Description
"auth" string Authentication configuration. Can be one of "no-auth" (default), "negotiate" or "kerberos".
"cacheFolder" string Location to keep the persisted configuration files.
"enablePersistentCache" boolean If true (default), will cache and persist the configuration files locally (e.g., in case of connection interruptions).
"pollInterval" number Interval in milliseconds at which to poll the REST service for updates. Default is 60000.
"proxy" string HTTP proxy to use when fetching data.
"readCacheAfter" number Interval in milliseconds after which to try to read the cache. Default is 30000.
"rejectUnauthorized" boolean If true (default), SSL validation will be enabled for the REST server.
"requestTimeout" number Timeout in milliseconds to wait for a response from the REST server. Default is 20000.
"startRetries" number Number of times io.Connect Desktop will try to connect to the REST server. Default is 5.
"startRetryInterval" number Interval in milliseconds at which io.Connect Desktop will try to connect to the REST server. Default is 10000.
"url" string Required. The URL to the REST service providing the app definitions.

The remote store must return app definitions in the following response shape:

{
    "applications": [
        // List of app definition objects.
        {}, {}
    ]
}

For details on working with remote app stores compliant with FDC3 App Directory standards, see the FDC3 Compliance section and the FDC3 App Directory documentation.

For a reference implementation of a remote app definitions store, see the Node.js REST Config example that implements the FDC3 App Directory and is compatible with io.Connect Desktop. This basic implementation doesn't take the user into account and returns the same set of data for all requests. For instructions on running the sample server on your machine, see the README file in the repository.

For a .NET implementation of a remote app definitions store, see the .NET REST Config example.

io.Manager

You can also use io.Manager for hosting and retrieving app stores. io.Manager is a complete server-side solution for providing data to io.Connect. To configure io.Connect Desktop to fetch app definitions from io.Manager, set the "type" property of the app store configuration object to "server":

{
    "appStores": [
        {
            "type": "server"
        }
    ]
}

The server app store object has the following properties:

Property Type Description
"appDefinitionOverrides" object Valid app definition properties that will override the ones in all app definitions from the app store. Top-level app definition properties can be specified directly in the "appDefinitionOverrides" 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". Available since io.Connect Desktop 9.1.
"isRequired" boolean If true (default), 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" string Required. Type of the app store. Must be set to "server" for app stores retrieved from io.Manager.

If you are using only io.Manager for retrieving app definitions, you can set the "appStores" key to an empty array. io.Connect Desktop will automatically try to connect to io.Manager using its configuration, and will retrieve the app definitions from it, if any.

System App Stores

Besides the regular app stores that usually contain definitions for end user apps, you can define system app stores for critical apps that must be auto started with the platform. The system stores aren't monitored for changes and can be only of type "path" and "rest". To define a system app store, use the "systemAppStores" top-level key, which accepts an array of objects defining one or more system app stores.

The following example demonstrates how to configure a local system app store:

{
    "systemAppStores": [
        {
            "type": "path",
            "details": {
                "path": "./config/system-apps"
            }
        }
    ]
}

For details on how to set the priority of system apps, see the Configuration > Application > Boot Sequence section.

Layouts

To provide settings for handling Layouts in io.Connect Desktop, use the "layouts" top-level key.

The "layouts" object has the following properties:

Property Type Description
"restoreDefaultGlobalOnStartup" boolean If true (default), the default Global Layout (if any) will be restored on startup of io.Connect Desktop.
"splash" object Settings for the loading animation displayed when restoring a Layout.
"store" object Settings for the Layout store.

The "splash" object has the following properties:

Property Type Description
"disabled" boolean If true, the Layout loader will be disabled.
"height" number Height in pixels for the Layout loader.
"title" string Title for the Layout loader.
"url" string URL pointing to the location of the Layout loader. Defaults to "file://%GDDIR%/assets/loader/index.html".
"width" number Width in pixels for the Layout loader.

The "store" object has the following properties:

Property Type Description
"rejectUnauthorized" boolean If true (default), SSL validation will be enabled for the REST server. Valid only in "rest" mode.
"restClientAuth" "no-auth" | "negotiate" | "kerberos" Authentication configuration. Defaults to "negotiate". Valid only in "rest" mode.
"restFetchInterval" number Interval in seconds at which to poll the REST service for updates. Default is 60. Valid only in "rest" mode.
"restURL" string URL pointing to the Layout store. Valid only in "rest" mode.
"type" "file" | "rest" | "server" Type of the Layout store. Set to "file" (default) 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.

Stores

To specify a Layout store with Layout definitions, use the "store" property of the "layouts" top-level key.

Local

By default, the Layouts are saved to and loaded from a local Layout store located in the %LocalAppData%/interop.io/io.Connect Desktop/UserData/<ENV>-<REG>/layouts folder, where <ENV>-<REG> represents the environment and region of io.Connect Desktop (e.g., DEMO-INTEROP.IO). There you can store, customize and delete your Layout files locally.

To instruct io.Connect Desktop to manage Layouts as local files, set the "type" property of the "store" object to "file":

{
    "layouts" : {
        "store": {
            "type": "file"
        }
    }
}

REST

To configure a connection to the REST service providing the Layout store, set the "type" property of the "store" object to "rest":

{
    "layouts": {
        "store": {
            "type": "rest",
            "restURL": "http://localhost:8004/",
            "restFetchInterval": 20,
            "restClientAuth": "no-auth"
        }
    }
}

The remote store must return Layout definitions in the following response shape:

{
    "layouts": [
        // List of Layout definition objects.
        {}, {}
    ]
}

For a reference implementation of a remote Layout definitions store, see the Node.js REST Config example. The user Layouts are stored in files with the same structure as local Layout files. This basic implementation doesn't take the user into account and returns the same set of data for all users. New Layouts are stored in files using the name of the Layout and there isn't validation for the name. The operation for removing a Layout isn't implemented and just logs to the console. For instructions on running the sample server on your machine, see the README file in the repository.

For a .NET implementation of a remote Layout definitions store, see the .NET REST Config example.

io.Manager

To configure io.Connect Desktop to fetch Layouts from io.Manager, set the "type" property of the "store" to "server":

{
    "layouts" : {
        "store": {
            "type": "server"
        }
    }
}

⚠️ Note that when using io.Manager as a Layout store, Layout files aren't only fetched from the server, but are also saved on the server (e.g., when the user edits and saves an existing Layout).

Default Global Layout

To disable automatic restore of the default Global Layout, set the "restoreDefaultGlobalOnStartup" property to false:

{
    "layouts": {
        "restoreDefaultGlobalOnStartup": false
    }
}

Loader

The default loader for Global Layouts is an HTML file located in %LocalAppData%/interop.io/io.Connect Desktop/Desktop/assets/loader which you can replace with your own custom one or edit it directly.

To customize the Layout loader, use the "splash" property of the "layouts" top-level key.

The following example demonstrates how to provide a custom loader and settings for it:

{
    "layouts": {
        "splash": {
            "url": "https://example.com/my-custom-loader/index.html",
            "title": "My Custom Loader",
            "width": 500,
            "height": 300
        }
    }
}

App Preferences Store

App preferences can be stored locally in a file, or remotely - using a REST service or io.Manager. By default, app preferences are stored locally in the %LocalAppData%/interop.io/io.Connect Desktop/UserData/<ENV>-<REG>/prefs folder, where <ENV>-<REG> represents the environment and region of io.Connect Desktop (e.g., DEMO-INTEROP.IO). To configure io.Connect Desktop where to store app preferences, use the "store" property of the "applicationPreferences" top-level key:

{
    "applicationPreferences": {
        "store": {
            "type": "rest",
            "restURL": "https://my-rest-service.com",
            "restClientAuth": "no-auth",
            "newDataCheckInterval": 2000
        }
    }
}

The "store" object has the following properties:

Property Type Description
"newDataCheckInterval" number Interval in seconds at which to check for new data from the REST store. Executed only if subscribers are available. Defaults to 1800. Valid only in "rest" mode.
"restClientAuth" "no-auth" | "negotiate" | "kerberos" Authentication configuration. Valid only in "rest" mode.
"restURL" string URL pointing to the app preferences store. Valid only in "rest" mode.
"type" "file" | "rest" | "server" The type of the app preferences store. Set to "file" (default) 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.

For a reference implementation of a remote app preferences store, see the Node.js REST Config example. This basic implementation doesn't take the user into account and returns the same set of data for all requests. For instructions on running the sample server on your machine, see the README file in the repository.

Splash Screen

To customize the splash screen of io.Connect Desktop, use the "splash" top-level key.

The following example demonstrates how to provide a custom splash screen and settings for it:

{
    "splash": {
        "disabled": false,
        "url": "file://%GDDIR%/assets/custom/splash.html",
        "width": 350,
        "height": 233,
        "blockStartup": true
    }
}

The "splash" object has the following properties:

Property Type Description
"alwaysOnTop" boolean If true, the splash screen will always be on top of other windows. Available since io.Connect Desktop 9.5.
"blockStartup" boolean If true (default), will block startup until the splash screen has loaded.
"disabled" boolean If true, the splash screen will be disabled.
"height" number Height in pixels for the splash screen. Defaults to 233.
"showOnShutdown" boolean If true (default), will show the splash screen when io.Connect Desktop is shutting down.
"timeout" number Interval in milliseconds to wait for the splash screen to load. Defaults to 5000.
"transparent" boolean If true (default), the splash screen background will become transparent.
"url" string URL pointing to the location of the splash screen. Defaults to "file://%GDDIR%/assets/splash/splash.html".
"width" number Width in pixels for the splash screen. Defaults to 350.

Notifications

To specify global notification settings, use the "notifications" top-level key.

The following is an example configuration for notifications:

{
    "notifications": {
        "enabled": true,
        "enableToasts": true,
        "sourceFilter": {
            "allowed": ["*"]
        },
        "toastExpiry": 15000
    }
}

The "notifications" object has the following properties:

Property Type Description
"closeNotificationOnClick" boolean 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. Available since io.Connect Desktop 9.6.
"enabled" boolean If true (default), will enable all notifications - notification toasts and notifications in the Notification Panel.
"enableToasts" boolean If true (default), will enable notification toasts.
"placement" object Placement settings for the Notification Panel and the notification toasts. Available since io.Connect Desktop 9.2.
"showNotificationBadge" boolean If true, will enable showing a notification badge on the tray menu icon, in the "Notifications" section of the io.Connect launcher, and on the taskbar icon of the io.Connect launcher (or your shell app). Available since io.Connect Desktop 9.4.
"snooze" object Settings for snoozing notifications. Available since io.Connect Desktop 9.3.
"sourceFilter" object Filter with names of apps that are allowed or not allowed to raise notifications.
"toastExpiry" number Interval in milliseconds after which the notification toasts will be hidden. Defaults to 15000.
"toasts" object Settings for the notification toasts.

The "snooze" object has the following properties:

Property Type Description
"duration" number Interval in milliseconds for which the notifications will be snoozed. Defaults to 600000.
"enabled" boolean If true, will enable snoozing notifications. Defaults to false.

The "placement" object has the following properties:

Property Type Description
"panel" "left" | "right" Sets the position of the Notification Panel on the screen - left or right. Defaults to "right".
"toasts" "top-left" | "top-right" | "bottom-left" | "bottom-right" Sets the position of the notification toasts on the screen - top right, top left, bottom right or bottom left. Defaults to "bottom-right".

The "sourceFilter" object has the following properties:

Property Type Description
"allowed" string[] Names of apps allowed to raise notifications. Defaults to "*".
"blocked" string[] Names of apps not allowed to raise notifications.

The "toasts" object has the following properties:

Property Type Description
"mode" "single" | "stacked" 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). Defaults to "single".
"stackBy" "severity" | "application" Criterion for stacking the notification toasts. Defaults to "severity".

Dialogs

To configure the io.Connect dialogs, use the "dialogs" top-level key.

The following example demonstrates how to provide a URL for a custom dialog app, set default dialog size, and disable the default dialogs for preventing shut down and window close:

{
    "dialogs": {
        "url": "https://my-custom-dialog.com",
        "width": 380,
        "height": 150,
        "enableDefaultDialogs": {
            "preventShutdown": false,
            "preventWindowClose": false
        }
    }
}

The "dialogs" object has the following properties:

Property Type Description
"enableDefaultDialogs" object Enable or disable the default io.Connect dialog messages.
"height" number Height in pixels for the io.Connect dialogs.
"transparent" boolean If true, the io.Connect Window containing the dialog will be transparent.
"url" string URL pointing to the location of the io.Connect dialog app.
"width" number Width in pixels for the io.Connect dialogs.

The "enableDefaultDialogs" object has the following properties:

Property Type Description
"preventShutdown" boolean If true (default), will enable the dialog message that appears when io.Connect Desktop is about to shutdown.
"preventWindowClose" boolean If true (default), 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.
"unsavedLayoutChanges" boolean If true (default), will enable the dialog message that appears when the user modifies the current Global Layout and tries to restore another Global Layout. Available since io.Connect Desktop 9.2.

Default Search Provider

io.Connect Desktop has a built-in search provider that returns search results for apps, Workspaces, Layouts and actions. To disable it, or to modify the search types for which it will provide results, use the "searchProvider" top-level key:

The following example demonstrates how to configure the default search provider to return search results only for Workspaces and Layouts:

{
    "searchProvider": {
        "enabled": true,
        "types": ["workspace", "layout"]
    }
}

The "searchProvider" object has the following properties:

Property Type Description
"enabled" boolean If true (default), will enable the default search provider of io.Connect Desktop.
"types" string[] Predefined search types for which the provider will return results. The possible values you can use in the array are "application", "layout", "workspace" and "action". Defaults to ["application", "layout", "workspace", "action"].

Interception

Available since io.Connect Desktop 9.6

To enable your apps to register interception handlers, use the "interception" top-level key.

The following example demonstrates how to enable interception for all apps:

{
    "interception": {
        "enabled": true
    }
}

The "interception" object has the following properties:

Property Type Description
"applications" string[] List of names of the apps that will be allowed to register interception handlers.
"enabled" boolean If true, will enable intercepting platform operations. Defaults to false.

To allow only specific apps to register interception handlers, use the "applications" property and provide the names of the apps as specified in their respective app definitions:

{
    "interception": {
        "enabled": true,
        "applications": ["my-app", "my-other-app"]
    }
}

Spellchecker

Available since io.Connect Desktop 9.6

io.Connect Desktop utilizes the built-in Electron spellchecker which is enabled by default. To provide settings for the spellchecker, use the "spellchecker" top-level key:

{
    "spellchecker": {
        "enabled": true,
        "languages": ["en-US", "fr"],
        "dictionaryDownloadURL": "https://example.com/dictionaries"
    }
}

The "spellchecker" object has the following properties:

Property Type Description
"dictionaryDownloadURL" string 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.
"enabled" boolean If true (default), will enable the built-in Electron spellchecker.
"languages" string[] List of language codes for the built-in Electron spellchecker (e.g., ["en-US", "fr"]).

App Settings

Title Format

To set a format for the titles of app instances, use the "titleFormat" property of the "applications" top-level key in the system.json system configuration file of io.Connect Desktop. The supported macros are {title} and {instanceIndex}. The {title} macro will be substituted with the title set in the app definition and the {instanceIndex} macro will be substituted with the consecutive number of the started app instance which is incremented for each new app instance starting from 1. If all instances are closed, the counter is reset. If some instances are closed while others are still running, the counter will continue to increment accordingly:

{
    "applications": {
        "titleFormat": "{title} ({instanceIndex})"
    }
}

Title format

⚠️ Note that if the window title is set programmatically via the io.Connect APIs, the specified title format will be overridden. For web apps and Workspaces Apps, the "syncTitleWithDocumentTitle" property will override the specified title format.

Hibernation

To specify whether app instances are to be closed when hibernating Global Layouts, Workspaces or window groups, use the "closeOnHibernate" property of the "applications" top-level key:

{
    "applications": {
        "closeOnHibernate": false
    }
}

By default, this property is set to true. Set to false to prevent the apps participating in the hibernation process to close. This will result in faster display of hibernated apps when resuming Global Layouts, Workspaces or window groups, but won't save as much system resources.

Setting this to false may also be useful if you want to hibernate and resume io.Connect Window groups programmatically, in order to preserve the original group objects and IDs.

You can also configure the hibernation behavior per app, which provides you with flexibility in designing your hibernation strategy. You may choose to close the instances of lightweight apps, as they won't take much time to load, and preserve only the instances of heavy apps during hibernation. This will save the time needed for loading the heavy apps when the user resumes the Layout later, but comes at the expense of higher memory consumption on the user machine.

For details on how to configure hibernation per app, see the Configuration > Application > Hibernation section.

Window Management

Available since io.Connect Desktop 9.3

Global settings for the internal window management mechanisms are found under the "windowManagement" top-level key in the system.json file of io.Connect Desktop, and with the exception of window group settings, can be overridden per app from the app definition settings.

⚠️ Note that each setting under the "windowManagement" top-level may be valid only for certain app definition types. Window group settings may be valid only for classic groups or only for web groups.

Window Groups

To configure the behavior of window groups, use the "groups" property of the "windowManagement" top-level key.

The "groups" object has the following properties:

Property Type Description
"tabs" object Settings for the tabs in io.Connect Window groups. Defaults to {}.
"unlockOnLongMousePress" object 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). Defaults to {}.

Tab Overflow

Available since io.Connect Desktop 9.4

⚠️ Note that this feature is available only for web groups.

Tab overflow allows the extra tabs on the right side of the tab header to be collected in a dropdown menu in their original order instead of becoming smaller and smaller each time a new tab is added to the group. The user can open the menu and select the desired tab (or close a tab directly from the menu). The tabs will be scrolled horizontally and the selected tab will be focused.

Tab Overflow

To enable tab overflow, use the "overflow" property of the "tabs" object:

{
    "windowManagement": {
        "group": {
            "tabs": {
                "overflow": true
            }
        }
    }
}

Tab Selection

Available since io.Connect Desktop 9.4

⚠️ Note that this feature is available only for web groups.

By default, when the user closes a tab in a window group with multiple tabs, the tab immediately to its left (or immediately to its right, if the closed tab was the first one in the tab group) is automatically focused. You can override this behavior and instruct io.Connect Desktop to focus the tab that was previously selected by the user instead.

To enable focusing the previously selected tab, use the "selectPreviousOnClose" property of the "tabs" object:

{
    "windowManagement": {
        "group": {
            "tabs": {
                "selectPreviousOnClose": true
            }
        }
    }
}

Loading Strategy

Available since io.Connect Desktop 9.4

⚠️ Note that this feature is available only for web groups.

It's possible to specify a loading strategy for restoring tabbed window groups. The available options are to load all apps in the tabs simultaneously, or to load only the visible apps first and then load hidden apps on demand (only when the user clicks on a tab to activate it).

To specify a loading strategy for window groups, use the "loadingStrategy" property of the "tabs" object:

{
    "windowManagement": {
        "group": {
            "tabs": {
                "loadingStrategy": "lazy"
            }
        }
    }
}

Possible values for the "loadingStrategy" property are "direct" (default) or "lazy".

Ungrouping Windows

Available since io.Connect Desktop 9.4

To enable or disable ungrouping windows when the user holds down the left mouse button on the window header, use the "unlockOnLongMousePress" object:

{
    "windowManagement": {
        "group": {
            "unlockOnLongMousePress": {
                "enabled": true,
                "timeout": 1200,
                "tolerance": 10
            }
        }
    }
}

The "unlockOnLongMousePress" object has the following properties:

Property Type Description
"enabled" boolean If true (default), will enable unlocking windows from window groups on a long mouse press.
"timeout" number Interval in milliseconds to wait before unlocking a window from a window group on a long mouse press. Defaults to 1000.
"tolerance" number Distance in pixels allowed for the mouse to move from its initial position before the unlocking operation becomes unavailable. Defaults to 5.

Sizing

To configure the behavior for sizing windows and window groups, use the "sizing" property of the "windowManagement" top-level key.

The "sizing" object has the following properties:

Property Type Description
"groupInnerSizingMode" "internal" | "external" Specifies how the inner sizing of the window group is initiated and performed. Set to "internal" (default) to use the internal mechanism based on native Windows methods. Set to "external" to use the platform-independent mechanism used in the Web Group App itself.

Inner Sizing Borders for Window Groups

Available since io.Connect Desktop 9.4

⚠️ Note that this feature is available only for web groups.

The mechanism for controlling the inner borders used for resizing the windows within a window group can be configured. It's possible to select between the default internal mechanism based on native Windows methods and the platform-independent mechanism used in the Web Group App itself. To specify the desired mechanism, use the "groupInnerSizingMode" property of the "sizing" object:

{
    "windowManagement": {
        "sizing": {
            "groupInnerSizingMode": "external"
        }
    }
}

Collapse & Expand

Available since io.Connect Desktop 9.4

⚠️ Note that this feature is available only for classic groups.

To specify the behavior for collapsing and expanding grouped windows, use the "mode" property of the "collapseExpand" object. By default, this property is set to "Single". This means that when you collapse a window in a group, the height and shape of the group may change (depending on where the collapsed window is situated), because the neighboring windows at the bottom of the collapsed window (if any) won't try to compensate the lost group height by expanding. To override this behavior and instruct the io.Connect Windows to try to compensate the height of a collapsed window in a group by expanding, set the "mode" property of the "collapseExpand" object to "Proportional":

{
    "windowManagement": {
        "collapseExpand": {
            "mode": "Proportional"
        }
    }
}

⚠️ Note that depending on the position of the collapsed window within the group structure, it may not always be possible for the neighboring windows to fill the empty space left by collapsing it.

⚠️ Note that when the group is maximized, the neighboring windows will always try to fill in the empty space left by a collapsed window, irrespective of the mode used.

Collapsing a window in a group when using "Single" mode:

Collapse Group Single

Collapsing a window in a group when using "Proportional" mode:

Collapse Group Single

Snapping to Screen Edges

Available since io.Connect Desktop 9.3

⚠️ Note that this property is valid only for apps of type "window".

To configure whether windows should snap to the edges of the screen when the user moves them within a specified distance from a screen edge, use the "snapToScreenEdges" property:

{
    "windowManagement": {
        "snapToScreenEdges": {
            "enabled": true,
            "distance": 30
        }
    }
}

Snap to Screen Edges

The "snapToScreenEdges" object has the following properties:

Property Type Description
"distance" number Distance in pixels from the screen edge at which the window will snap to it. The minimum is 5, the maximum is 30. Defaults to 20.
"enabled" boolean If true, will enable snapping windows to the screen edges when the user moves them within the specified distance from the screen edge. Defaults to false.

For details on how to configure snapping to screen edges per app, see the Configuration > Application > Snapping to Screen Edges section.

Hardware Acceleration

Available since io.Connect Desktop 9.3

⚠️ Note that this property is valid only for apps of type "window".

To enable hardware acceleration for web apps, use the "hardwareAcceleration" property:

{
    "windowManagement": {
        "hardwareAcceleration": {
            "enabled": true
        }
    }
}

The "hardwareAcceleration" object has the following properties:

Property Type Description
"enabled" boolean If true, will enable hardware acceleration for web pages. Defaults to false.

Window Settings

Global io.Connect Window settings are found under the "windows" top-level key in the system.json file of io.Connect Desktop and can be overridden per app from the app definition settings.

⚠️ Note that each setting under the "windows" top-level may be valid only for certain app definition types.

Channels

Available since io.Connect Desktop 9.3

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce", "childWindow" and "citrix".

To configure the Channel Selector, use the "channelSelector" property:

{
    "windows": {
        "channelSelector": {
            "enabled": true,
            "type": "directionalSingle"
        }
    }
}

The "channelSelector" object has the following properties:

Property Type Description
"enabled" boolean If true, will allow showing the Channel Selector. Defaults to false.
"channelId" string Name of the Channel to which the window will be joined by default when it's started.
"readOnly" boolean If true, the Channel Selector will be visible, but the user won't be able to switch between Channels from it. Defaults to false.
"type" "single" | "directionalSingle" Type of the Channel Selector to show on the io.Connect Windows. A single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. A 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. Defaults to "single".

For details on how to configure the Channel Selector per app, see the Configuration > Application > Channels section.

Injecting Styles

Available since io.Connect Desktop 9.3

⚠️ Note that this property is valid only for apps of type "window", "workspaces" and "webGroup".

io.Connect Desktop allows injecting CSS files in your web apps, the Workspaces App and the Web Group App. Styles will be injected after the DOM content has been loaded. You can choose whether to merge the injected styles with the already existing ones, or to replace them entirely.

To define globally CSS files to inject in your apps, use the "injectedStyles" property:

{
    "windows": {
        "injectedStyles": {
            "replace": false,
            "styles": [
                {
                    "url": "https://my-org.com/my-styles.css",
                    "fallback": "https://my-org.com/my-fallback-styles.css",
                    "timeout": 20000
                },
                {
                    "url": "https://my-org.com/my-other-styles.css",
                }
            ]
        }
    }
}

The "injectedStyles" object has the following properties:

Property Type Description
"replace" boolean If true, will replace the existing styles of the web app with the injected ones. 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" object List of objects describing CSS files that will be injected in the specified order.

Each object in the "styles" array has the following properties:

Property Type Description
"fallback" string URL pointing to a local or a remote CSS file that will be used as a fallback in case the one specified in the "url" property doesn't load.
"timeout" number Interval in milliseconds to wait for the CSS file to load.
"url" string Required. URL pointing to a local or a remote CSS file.

For details on how to configure injecting styles per app, see the Configuration > Application > Injecting Styles section.

Persisting Data in Layouts

Data for both web and native apps can be persisted when the app is saved in a Layout. For web apps, this includes the current URL and title, and for native apps - the command and the parameters with which the app was started.

Available since io.Connect Desktop 9.2

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce" and "citrix".

To persist data for web and native apps in Layouts, use the "saveInLayout" property.

The "saveInLayout" object has the following properties:

Property Type Description
"command" boolean Valid only for native apps. 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.
"env" boolean Valid only for native apps. If true, when the app is saved in a Layout, the environment variables 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 variables, and not the ones in the current app definition. Available since io.Connect Desktop 9.3.
"parameters" boolean Valid only for native apps. 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.
"title" boolean | string[] Valid only for web apps. If true, the current window title will be saved for all Layout types. Alternatively, you can provide a list of Layout types for which the window title is to be saved. The possible string values are "Global", "Workspace" and "ApplicationDefault".
"url" boolean | string[] Valid only for web apps. If true, the current window URL will be saved for all Layout types. Alternatively, you can provide a list of Layout types for which the window URL is to be saved. The possible string values are "Global", "Workspace" and "ApplicationDefault".

Web Apps

Available since io.Connect Desktop 9.2

⚠️ Note that this property is valid only for apps of type "window".

To persist data for web apps in Layouts, use the "saveInLayout" property.

The following example demonstrates how to persist the current URLs of web apps only when they participate in Global Layouts and Workspaces, and how to persist the current window titles of web apps in all types of Layouts:

{
    "windows": {
        "saveInLayout": {
            "url": ["Global", "Workspace"],
            "title": true
        }
    }
}

For details on how to control saving web app data in Layouts per app, see the Configuration > Application > Persisting Data in Layouts > Web Apps section.

Native Apps

Available since io.Connect Desktop 9.2

⚠️ Note that this property is valid only for apps of type "exe", "clickonce" and "citrix".

To persist data for native apps in Layouts, use the "saveInLayout" property.

The following example demonstrates how to persist the command and the parameters with which native apps are started when they are saved in a Layout:

{
    "windows": {
        "saveInLayout": {
            "command": true,
            "parameters": true
        }
    }
}

For details on how to control saving native app data in Layouts per app, see the Configuration > Application > Persisting Data in Layouts > Native Apps section.

Synchronizing App Titles

⚠️ Note that this property is valid only for apps of type "window" and "workspaces".

Titles of web app instances and Workspaces App instances can be synchronized with the document title whenever the document title changes. To specify global settings for the desired behavior, use the "syncTitleWithDocumentTitle" property:

{
    "windows": {
        "syncTitleWithDocumentTitle": true
    }
}

Available since io.Connect Desktop 9.4

The "syncTitleWithDocumentTitle" property also accepts a "preserveCustomTitle" string as a value. 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.

{
    "details": {
        "syncTitleWithDocumentTitle": "preserveCustomTitle"
    }
}

For details on how to control the synchronizing behavior for app titles per app, see the Configuration > Application > Synchronizing App Titles section.

Handling the Browser window.open()

⚠️ Note that this property is valid only for apps of type "window".

To control the behavior of the browser window.open() method when opening child windows, use the "nativeWindowOpen" property.

The following example demonstrates how to configure io.Connect Desktop to open windows created with window.open() in the default browser:

{
    "windows": {
        "nativeWindowOpen": "browser"
    }
}

The "nativeWindowOpen" property accepts either a string or an object as a value.

The possible string values for the "nativeWindowOpen" property are:

Value Description
"browser" Windows created with window.open() will be opened in the default browser.
"off" Opening windows with window.open() is disabled.
"window" Default. Windows created with window.open() will be opened as io.Connect Windows.

The "nativeWindowOpen" object has the following properties:

Property Type Description
"grouping" object Settings for grouping the newly opened child window with the parent window. The child window can be snapped to any side of the parent window, or can be added to its tab group, provided that both windows are io.Connect tab windows. Available since io.Connect Desktop 9.3.
"mode" string Must be set to "window".
"outlivesOpener" boolean If true, will prevent child windows from being closed when their parent is closed.

Grouping Windows

Available since io.Connect Desktop 9.3

To group child windows with the parent window when using the browser native window.open() method to open windows as io.Connect Windows, use the "grouping" property of the "nativeWindowOpen" object.

The following example demonstrates how to configure io.Connect Desktop to snap newly opened child windows to the left of the parent window:

{
    "windows": {
        "nativeWindowOpen": {
            "mode": "window",
            "grouping": {
                "snap": true,
                "snappingOptions": {
                    "direction": "left"
                }
            }
        }
    }
}

The "grouping" object has the following properties:

Property Type Description
"addToTabGroup" boolean 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.
"snap" boolean If true, the child window will be snapped to the parent window. To specify a relative direction for the snapped window, use the "direction" property of the "snappingOptions" object. If no direction is specified, the child window will be snapped to the right side of the parent window.
"snappingOptions" object Options for snapping the child window to the parent window.

The "snappingOptions" object has the following properties:

Property Type Description
"direction" "right" | "left" | "bottom" | "top" Direction (bottom, top, left or right) for positioning the child window relatively to the parent window. Considered only if "snap" is set to true.

Window Options

Available since io.Connect Desktop 9.2

⚠️ Note that this property is valid only for apps of type "window".

To provide options for windows opened as io.Connect Windows via the browser window.open() method (i.e., when "nativeWindowOpen" is set to "window"), use the "nativeWindowOpenOptions" property:

{
    "windows": {
        "nativeWindowOpenOptions": {
            "maxHeight": 500,
            "hasSizeAreas": true
        }
    }
}

For a list of the supported options, see the Capabilities > Windows > Window Management > Handling the Browser window.open() > Window Options section.

For details on how to control the behavior for handling the browser window.open() per app, see the Configuration > Application > Handling the Browser window.open() section.

Cascading Windows

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce", "childWindow" and "citrix".

io.Connect Windows that are instances of the same app can be opened in a cascade. Each new window is offset from the previously opened window by a specified distance:

Cascading Windows

Cascading windows is enabled by default. To specify offset for the cascaded windows, use the "cascade" property:

{
    "windows": {
        "cascade": {
            "offset": 30
        }
    }
}

The "cascade" object has the following properties:

Property Type Description
"enabled" boolean If true (default), will enable cascading windows.
"offset" number Offset in pixels for the cascaded window.

For details on how to control window cascading per app, see the Configuration > Application > Cascading Windows section.

Group Header

⚠️ Note that this property is valid only for apps of type "window".

To hide the group header globally for all io.Connect web apps, use the "hideGroupHeader" property:

{
    "windows": {
        "hideGroupHeader": true
    }
}

⚠️ Note that this property is valid only for web apps (apps of type "window"). However, if a web app forms a window group with one or more native apps (apps of type "exe"), the group header will be hidden. For details on how to hide the group header individually per web app, see the Configuration > Application > Group Header section. For details on how to hide the group header globally for all types of apps, see the Configuration > io.Connect Windows > io.Connect Window Properties > Group Header section.

For details on how to control the group header visibility programmatically, see the Capabilities > Windows > Window Management section.

Sticky Button

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce", "childWindow" and "citrix".

To show the "Sticky" button on all io.Connect Windows, set the "showStickyButton" property to true:

{
    "windows": {
        "showStickyButton": true
    }
}

Sticky Button

For details on how to enable or disable the "Sticky" button per app, see the Configuration > Application > Sticky Button section.

For details on how to use stickiness programmatically, see the Capabilities > Windows > Window Management section.

Feedback Button

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce", "childWindow" and "citrix".

To enable the "Feedback" button globally for all io.Connect Windows, set the "showFeedbackButton" property to true:

{
    "windows": {
        "showFeedbackButton": true
    }
}

Feedback Button

For details on how to enable or disable the "Feedback" button per app, see the Configuration > Application > Feedback Button section.

Clone Button

Available since io.Connect Desktop 9.2

⚠️ Note that this feature is available only for web groups.

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce", "childWindow" and "citrix".

To enable the "Clone" button globally for all io.Connect Windows, set the "showCloneButton" property to true:

{
    "windows": {
        "showCloneButton": true
    }
}

Clone Button

For details on how to enable or disable the "Clone" button per app, see the Configuration > Application > Clone Button section.

For details on how to clone windows programmatically, see the Capabilities > Windows > Window Management section.

Context Menu

⚠️ Note that this property is valid only for apps of type "window", "workspaces" and "webGroup".

io.Connect Desktop provides a native right-click context menu available in all io.Connect web apps for which it has been enabled. It provides standard editing actions (select, cut, copy, paste, undo, redo), zoom and spelling options.

Available since io.Connect Desktop 9.4

The native context menu supports three different modes: "Edit" mode, "Edit with Suggestions" mode, and "Selection" mode. Each mode is automatically applied based on whether the text can be edited or only selected. The following demonstrates each of the context modes:

Context Menu

To configure the context menu globally, use the "contextMenu" property:

{
    "windows": {
        "contextMenu": {
            "enabled": true
        }
    }
}

For details on how to configure the context menu per app, see the Configuration > Application > Context Menu section.

Jump List

⚠️ Note that this property is valid only for apps of type "window", "exe", "clickonce", "childWindow" and "workspaces".

To configure the jump list globally for all io.Connect Windows, use the "jumpList" property:

{
    "windows": {
        "jumpList": {
            "enabled": true,
            "categories": [
                {
                    "title": "Tasks",
                    "actions": [
                        {
                            "icon": "%GDDIR%/assets/images/center.ico",
                            "type": "centerScreen",
                            "singleInstanceTitle": "Center on Primary Screen",
                            "multiInstanceTitle": "Center all on Primary Screen"
                        }
                    ]
                }
            ]
        }
    }
}

The "jumpList" object has the following properties:

Property Type Description
"categories" object[] Categorized lists with actions to execute when the user clicks on them.
"enabled" boolean If true (default), will enable the jump list.

Each object in the "categories" array has the following properties:

Property Type Description
"actions" object[] List of actions contained in the category.
"title" string Title of the category to be displayed in the context menu.

Each object in the "actions" array has the following properties:

Property Type Description
"icon" string Icon for the action to be displayed in the context menu. Must point to a local file.
"multiInstanceTitle" string Title of the action to be displayed in the context menu when there are multiple instances with grouped taskbar icons.
"singleInstanceTitle" string Title of the action to be displayed in the context menu when there is a single instance with a single taskbar icon.
"type" string Type of the predefined action to execute.

For details on how to configure jump lists per app, see the Configuration > Application > Jump List section.

For details on using jump lists programmatically, see the Capabilities > More > APIs > Jump List section.

Downloads

⚠️ Note that this property is valid only for apps of type "window".

To configure the global behavior of the io.Connect Windows when downloading files, use the "downloadSettings" property:

{
    "windows": {
        "downloadSettings": {
            "autoSave": true,
            "autoOpenPath": false,
            "autoOpenDownload": false,
            "enable": true,
            "enableDownloadBar": true,
            "path": "%DownloadsFolder%"
        }
    }
}

The "downloadSettings" object has the following properties:

Property Type Description
"autoOpenDownload" boolean If true, will open the download file after the download is completed. Defaults to false.
"autoOpenPath" boolean If true, will open the folder that contains the downloaded file after the download is completed. Defaults to false.
"autoSave" boolean If true (default), will auto save the file (without asking the user where to save it). If false, a system save dialog will appear.
"enable" boolean If true (default), will enable the window to download files.
"enableDownloadBar" boolean If true (default), a download bar tracking the download progress will appear at the bottom of the window. If false, the download process will be invisible.
"path" string 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. Defaults to "%DownloadsFolder%".

For details on how to specify download settings per app, see the Configuration > Application > Downloads section.

For details on using downloads programmatically, see the Capabilities > More > APIs > Downloads and the Capabilities > Windows > Window Management sections.

Zooming

⚠️ Note that this property is valid only for apps of type "window", "workspaces" and "webGroup".

To set the zoom behavior globally for all io.Connect Windows, use the "zoom" property:

{
    "windows": {
        "zoom": {
            "enabled": true,
            "mouseWheelZoom": false,
            "factors": [25, 33, 50, 67, 75, 80, 90, 100, 110, 125, 150, 175, 200, 250, 300, 400, 500],
            "defaultFactor": 100
        }
    }
}

The "zoom" object has the following properties:

Property Type Description
"defaultFactor" number Default zoom factor within the range of 25 to 500. Avoid negative values. Defaults to 100.
"enabled" boolean If true (default), will enable zooming.
"factors" number[] 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. Defaults to [25, 33, 50, 67, 75, 80, 90, 100, 110, 125, 150, 175, 200, 250, 300, 400, 500].
"mouseWheelZoom" boolean If true, will enable zooming with CTRL + mouse scroll. Defaults to false.

For details on how to specify zoom settings per app, see the Configuration > Application > Zooming section.

For details on zooming windows programmatically, see the Capabilities > More > APIs > Zooming section.

Printing

⚠️ Note that this property is valid only for apps of type "window".

Use the CTRL + P key combination to print a web page opened in an io.Connect Window. To enable or disable printing, or to configure the default print settings globally, use the "print" property.

The following is an example configuration for printing:

{
    "windows": {
        "print": {
            "enabled": true,
            "silent": true,
            "color": false,
            "copies": 1,
            "footer": "https://my-domain.com/",
            "pageSize": "A4",
            "duplexMode": "longEdge"
        }
    }
}
Property Type Description
"color" boolean If true (default), will print the page in color. Otherwise, in grayscale.
"copies" number The number of copies to print.
"duplexMode" string Setting for duplex printing.
"enabled" boolean If true (default), will enable printing.
"footer" string String that will be printed as a footer on each page.
"pageSize" string The size of the printed page.
"silent" boolean If true, won't ask the user for print settings. Defaults to false.

For more details on all available properties for printing, see the "print" key in the system.json schema.

To enable or disable printing a web page as a PDF file, or to configure the default settings for printing to PDF globally, use the "printToPdfSettings" property.

The following is an example configuration for printing to a PDF file:

{
    "windows": {
        "printToPdfSettings": {
            "enabled": true,
            "autoSave": true,
            "autoOpenPath": true,
            "fullPath": "C:/Users/%USERNAME%/Documents/PDF",
            "usePrintShortcutKey": true,
            "pageSize": "A4",
            "printBackground": true,
            "printSelectionOnly": true
        }
    }
}
Property Type Description
"autoOpenPath" boolean If true, will open automatically the directory where the file was saved. Defaults to false.
"autoSave" boolean If true, will auto save the PDF file. If false, a system dialog will appear asking the user where to save the file. Defaults to false.
"enabled" boolean If true (default), will enable printing to a PDF file.
"fullPath" string The default directory where PDF files will be saved. Defaults to "%DownloadsFolder%".
"pageSize" string The size of the printed page.
"printBackground" boolean If true, will print the page background.
"printSelectionOnly" boolean If true, will print only the currently selected section of the page.
"usePrintShortcutKey" boolean If true, will use CTRL + P by default to print to a PDF file.

For more details on all available properties for printing to a PDF file, see the "printToPdfSettings" key in the system.json schema.

For details on how to specify print settings per app, see the Configuration > Application > Printing section.

For details on how to print web pages programmatically, see the Capabilities > Windows > Window Management section.

Filtering Web Requests

To instruct io.Connect Desktop to filter web requests, use the "urlFilter" property. Provide a regular expression as a value 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.

The following example demonstrates how to allow only web requests for URLs that start with https://:

{
    "windows": {
        "urlFilter": "https://*"
    }
}

User Agent

⚠️ Note that this property is valid only for apps of type "window".

To specify a custom User-Agent request header to be sent when connecting to a server, use the "userAgent" property:

{
    "windows": {
        "userAgent": "custom-user-agent-string"
    }
}

Citrix Apps

The default system settings for the Citrix Virtual Apps support should work fine in most cases and usually it isn't necessary to make any modifications. If the default settings don't work for your specific environment, use the "citrix" top-level key to provide custom values.

The following configuration contains the default Citrix settings:

{
    "citrix": {
        "launcherPath": "%ProgramFiles(x86)%/Citrix/ICA Client/SelfServicePlugin",
        "launcherModule": "SelfService.exe",
        "launcherArguments": "-qlaunch \"$appName$\"",
        "launcherSpawnInterval": 1500
    }
}

The "citrix" key has the following properties:

Property Type Description
"launcherArguments" string The command line arguments used to launch published Citrix Virtual Apps. Defaults to "-qlaunch \"$appName$\"".
"launcherModule" string The file name of the Citrix module used to launch published Citrix Virtual Apps. Defaults to "SelfService.exe".
"launcherPath" string Location of the Citrix module used to launch published Citrix Virtual Apps. Defaults to "%ProgramFiles(x86)%/Citrix/ICA Client/SelfServicePlugin".
"launcherSpawnInterval" number Interval in milliseconds at which multiple launcher modules will be spawned. Defaults to 1500.

Issue Reporting

To configure the Feedback Form of io.Connect Desktop, use the "issueReporting" top-level key:

{
    "issueReporting": {
        "attachmentsViewMode": "category",
        "jira": {
            "enabled": true,
            "url": "https://jira.my-org.com/rpc/soap/jirasoapservice-v2",
            "user": "user",
            "password": "password",
            "project": "MY_PROJECT"
        },
        "mail": {
            "enabled": true,
            "zipAttachments": true,
            "bugSubjectPrefix": "Error:",
            "reportSubjectPrefix": "Feedback:",
            "recipients": ["support@example.com", "dev-support@example.com"],
            "allowEditRecipients": true,
            "maxAttachmentMB": "10"
        },
        "folderAttachments": [
            {
                "name": "Screenshots",
                "folderPath": "%GLUE-USER-DATA%/logs",
                "zipFolderPath": "io.Connect Desktop/Screenshots",
                "filter": "*.png",
                "category": "Screenshots",
                "selected": false,
                "recursive": true
            },
            {
                "name": "io.Connect Desktop-AppLogs",
                "folderPath": "%GLUE-USER-DATA%/logs",
                "zipFolderPath": "io.Connect Desktop/Logs",
                "filter": "*.log*",
                "category": "App Logs",
                "selected": true,
                "recursive": true
            },
            {
                "name": "io.Connect Desktop-Crashes",
                "folderPath": "%GLUE-USER-DATA%/crashes/reports",
                "zipFolderPath": "io.Connect Desktop/Crashes",
                "filter": "*.dmp",
                "category": "Crashes",
                "recursive": false
            }
        ],
        "form": {
            "width": 350,
            "height": 500
        }
    }
}

The "issueReporting" top-level key has the following properties:

Property Type Description
"attachmentsViewMode" "file" | "category" 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.
"attachScreenShots" boolean If true, will attach screenshots of all monitors to the issue report.
"folderAttachments" object[] Required. Attachments configuration. For more details, see the Attachments section.
"form" object 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.
"jira" object Required. Jira configuration. For more details, see the Jira section.
"mail" object Required. Email configuration. For more details, see the Email section.

Jira

The configuration for automatically creating a Jira ticket when submitting a Feedback Form is found under the required "jira" property of the "issueReporting" top-level key. It accepts an object with the following properties:

Property Type Description
"enabled" boolean If true, will enable the option to create a Jira ticket when submitting the issue.
"noEnvironment" boolean If true, the ticket "Environment" field won't be set.
"noPriority" boolean If true, the ticket "Priority" field won't be set.
"password" string Required. The password of the user who will create the ticket.
"preferredRole" string Preferred role in the Jira project.
"preferredRoleDescriptor" string Description of the preferred role in the Jira project.
"project" string Required. The name of the project in which the ticket will be created.
"tlsVersion" string Force TLS protocol version, e.g. "TLS1.2".
"url" string Required. Link to the Jira API.
"useProjectLeadAsPreferredAssignee" boolean If true, will assign the ticket to the project lead.
"user" string Required. The username of the user who will create the ticket.

Email

The configuration for automatically sending an email when submitting a Feedback Form is found under the required "mail" property of the "issueReporting" top-level key. It accepts an object with the following properties:

Property Type Description
"allowEditRecipients" boolean If true, the user will be allowed to manually add more recipients.
"bugSubjectPrefix" string Prefix for the email subject when the issue is a bug.
"enabled" boolean If true, will enable the option to send an email when submitting the issue.
"maxAttachmentMB" string The maximum size of the attachments in MB.
"recipients" string[] List of email addresses to which the issue report will be sent.
"reportSubjectPrefix" string Prefix for the email subject when sending feedback.
"zipAttachments" boolean If true, the attachments will be archived.

Attachments

The configuration for attaching files when submitting a Feedback Form is found under the required "folderAttachments" property of the "issueReporting" top-level key. It accepts an array of objects, each with the following properties:

Property Type Description
"category" string Required. Category for the attached item.
"filter" string Required. Regex filter that will be applied to each file in the folder - e.g., "*.log".
"folderPath" string Required. Path to the folder that will be attached.
"name" string Required. Name for the attachment.
"recursive" boolean 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.
"selected" boolean If true, the category (or all files under this category) in the Feedback Form will be selected by default.
"zipFolderPath" string Required. Path in the archived folder.

Form

To configure the io.Connect Window containing the Feedback Form, use the "form" property of the "issueReporting" top-level key. It accepts an object with the following properties:

Property Type Description
"height" number Height in pixels for the Feedback Form.
"showEnvironmentInfo" boolean If true, the Feedback Form will show a field with details about the io.Connect environment.
"transparent" boolean If true, the io.Connect Window containing the Feedback Form will have a transparent background. Available since io.Connect Desktop 9.1.
"url" string URL pointing to the location of the Feedback app. Defaults to "file://%GDDIR%/assets/issue-reporting/index.html".
"width" number Width in pixels for the Feedback Form.

⚠️ Note that the "transparent" property will set a transparent background only for the io.Connect Window that contains the Feedback app. To achieve actual transparency, you must also set a transparent background for your app from its styles.

Feedback Form

For details on how to enable or disable the "Feedback" button globally or per app, see the Window Settings > Feedback Button and the Configuration > Application > Feedback Button sections respectively.

For details on how to create your custom Feedback app, see the More > Features > Issue Reporting > Extending the Feedback Form section.

Download Manager

Available since io.Connect Desktop 9.2

To configure the Download Manager of io.Connect Desktop, use the "downloadManager" top-level key.

{
    "downloadManager": {
        "autoStartOnDownload": true,
        "shortcut": "ctrl+alt+d"
    }
}

The "downloadManager" object has the following properties:

Property Type Description
"appName" string Name of an io.Connect app, as specified in its definition, to be used as a Download Manager. Defaults to "io-connect-download-manager".
"autoStartOnDownload" boolean If true, the Download Manager app will be started automatically when a download is initiated. Defaults to false.
"shortcut" string Shortcut for starting the Download Manager app. Defaults to "ctrl+j".

Download Manager

About App

To customize the About app of io.Connect Desktop, use the "about" top-level key.

The "about" object has the following properties:

Property Type Description
"height" number Height in pixels for the About app.
"hideTrademark" boolean Hide the trademark information section in the About app.
"url" string URL pointing to the location of the About app.
"width" number Width in pixels for the About app.

To remove the trademark information at the bottom of the page, use the "hideTrademark" property:

{
    "about": {
        "hideTrademark": true
    }
}

Hide Trademark

You can also change the entire content displayed in the About app and its size by providing a URL to be loaded instead of the default app and specifying the desired width and height.

The following example demonstrates how to modify the size and the content of the About app:

{
    "about": {
        "url": "https://interop.io/",
        "width": 500,
        "height": 500
    }
}

Custom About

Telemetry Data

Telemetry data is disabled by default. To enable it, set the "telemetry" top-level key to true:

{
    "telemetry": {
        "enabled": true
    }
}

The "telemetry" object has the following properties:

Property Type Description
"enabled" boolean If true, will enable telemetry data published by io.Connect Desktop. If false, telemetry data won't be gathered or published.
"features" object Telemetry data sets that you can enable or disable from being published by io.Connect Desktop. Available since io.Connect Desktop 9.5.

The "features" object has the following properties:

Property Type Description
"apps" boolean If true, will enable publishing telemetry data related to web app performance.
"stores" boolean If true, will enable publishing telemetry data related to app stores.
"system" boolean If true, will enable publishing telemetry data related to system performance.

For details on how to retrieve telemetry data programmatically, see the Capabilities > More > Features > Telemetry Data section.

Folders

To configure the location of the system folders of io.Connect Desktop, use the "folders" top-level key.

The "folders" object has the following properties:

Property Type Description
"cache" string Settings for the Electron cache. Defaults to "%LocalAppData%/interop.io/io.Connect Desktop/Cache/%GLUE-ENV%-%GLUE-REGION%/".
"platformCache" string Settings for the io.Connect Desktop cache. Available since io.Connect Desktop 9.6.
"remoteConfig" string Location for storing configuration files for io.Connect Desktop downloaded from remote locations. Defaults to "%LocalAppData%/interop.io/io.Connect Desktop/UserData/%GLUE-ENV%-%GLUE-REGION%/remoteConfig".
"userData" string 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. Defaults to "%LocalAppData%/interop.io/io.Connect Desktop/UserData/%GLUE-ENV%-%GLUE-REGION%".

The following example demonstrates how to change the location of the folder containing remote configurations for io.Connect Desktop:

{
    "folders": {
        "remoteConfig": "%LocalAppData%/my-configs/%GLUE-ENV%-%GLUE-REGION%/remote"
    }
}

Available since io.Connect Desktop 9.2

The "cache" property accepts also an object with the following properties:

Property Type Description
"clearOld" boolean If true, the Electron cache from previous platform versions within the same location will be deleted on startup. Defaults to false. Available since io.Connect Desktop 9.4.
"copy" boolean | object - 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. Defaults to false.
- Settings for copying the Electron cache. Available since io.Connect Desktop 9.5.
"location" string 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. Defaults to "%LocalAppData%/interop.io/io.Connect Desktop/Cache/%GLUE-ENV%-%GLUE-REGION%/".

The following example demonstrates how to define a custom location for the Electron cache and instruct io.Connect Desktop to copy the cache from the closest previously installed version:

{
    "folders": {
        "cache": {
            "copy": true,
            "location": "../MyCache/%GLUE-ENV%-%GLUE-REGION%/"
        }
    }
}

Available since io.Connect Desktop 9.5

The "copy" property of the "cache" object accepts also an object with the following properties as a value:

Property Type Description
"path" string 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.

Available since io.Connect Desktop 9.6

The "platformCache" object has the following properties:

Property Type Description
"location" string Absolute path determining the location for storing the cached files. You can use environment variables. Defaults to "%LocalAppData%/interop.io/io.Connect Desktop/UserData/%GLUE-ENV%-%GLUE-REGION%/cache".

Logging

The logging configuration for io.Connect Desktop is found in the logger.json file located in %LocalAppData%/interop.io/io.Connect Desktop/Desktop/config. A JSON schema for the logger.json file isn't available, as the io.Connect Desktop logging mechanism is based on log4js-node. The logging configuration provided in the logger.json file defines the log appenders and the categories used by io.Connect Desktop for logging. The available configuration options are described in detail in the log4js-node API documentation.

You can also configure the system logging for io.Connect Desktop by using the "logging" top-level key in the system.json file.

⚠️ Note that io.Connect Desktop also offers a JavaScript Logger API that enables your io.Connect apps to output logs to files or to the console.

Default Configuration

By default, io.Connect Desktop uses two of the core log4js-node appenders - file and multiFile. The file appender is used for logging events related to the io.Connect Desktop app itself, while the multiFile appender is used for logging events related to io.Connect client apps.

The default logging configuration for io.Connect Desktop found in the logger.json can be modified according the specifications laid out in the log4js-node documentation.

Custom Log Appenders

You can add any other log4js-node appenders (core, optional and custom) and categories to the io.Connect Desktop logging configuration.

The following example demonstrates how to add the logstashHTTP optional appender to io.Connect Desktop:

  1. Create a directory for the appender and run the following command to install it:
npm install @log4js-node/logstash-http
  1. Create an index.js file in which import and export the appender:
module.exports = require("@log4js-node/logstash-http");
  1. Add the logstashHTTP appender to the io.Connect Desktop configuration in the logger.json file under the "appenders" top-level key:
{
    "appenders": {
        "logstash": {
            "type": "%GDDIR%/assets/logstash-http",
            "url": "http://localhost:9200/_bulk",
            "application": "My App",
            "logType": "application",
            "logChannel": "node"
        }
    }
}

The "type" property must point to the location of the logstash-http package. You can also use environment variables.

  1. Under the "categories" top-level key, define the log event categories for which the log appender will be used:
{
    "categories": {
        "my-custom-category": {
            "appenders": ["logstash"],
            "level": "info"
        }
    }
}

Log Appenders per App

Available since io.Connect Desktop 9.5

By default, io.Connect Desktop uses a multiFile appender named "applications" for logging events related to io.Connect client apps. To define separate log appenders per app, execute the following steps:

  1. Define a log appender to be used for your app:
{
    "appenders": {
        "my-app-appender": {
            "type": "file",
            "filename": "%GLUE-USER-DATA%/logs/my-app.log",
            "maxLogSize": 10485760,
            "backups": 5,
            "minLevel": "info",
            "keepFileExt": true,
            "compress": true
        }
    }
}
  1. Create a category with the name of your app as defined in its app definition and assign the log appender to it. This will instruct io.Connect Desktop to use the specified log appender for your app:
{
    "categories": {
        "my-app": {
            "appenders": [
                "my-app-appender"
            ],
            "level": "trace"
        }
    }
}

System Logs

To configure the system logging for io.Connect Desktop, use the "logging" top-level key in the system.json file.

Streaming

You can configure io.Connect Desktop to stream the system logs so that they can be consumed by your apps. To specify the log streaming configuration, use the "streaming" property of the "logging" top-level key:

{
    "logging": {
        "streaming": {
            "enabled": true,
            "minLevel": "warn",
            "interval": 60
        }
    }
}

The "streaming" object has the following properties:

Property Type Description
"enabled" boolean If true, will enable streaming system log entries. Defaults to false.
"interval" number Interval in seconds at which the log entries will be streamed. Defaults to 120.
"minLevel" "error" | "warn" | "info" The minimum level of the log entries to be streamed. Defaults to "error".

For details on how to consume the system logs, see the More > APIs > Logging > System Logs section.

Log Files

Available since io.Connect Desktop 9.3

To specify settings for handling the system log files, use the "files" property of the "logging" top-level key:

{
    "logging": {
        "files": {
            "onStartup": "archive",
            "moveOldTo": "%LocalAppData%/my-org/logs"
        }
    }
}

The "files" object has the following properties:

Property Type Description
"moveOldTo" string 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. Defaults to "%GLUE-USER-DATA%/logs/archive".
"onStartup" "archive" | "delete" | "keep" 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.

⚠️ Note that by design the gilding.log file won't be archived or deleted.

Crash Reporter

To configure io.Connect Desktop how to handle system crash reports, use the "crashReporter" top-level key. You can enable or disable crash reporter logging, define metadata to be included in the crash reports, and also provide output settings for the reports:

{
    "crashReporter": {
        "enabled": true,
        "folderPath": "%LocalAppData%/my-org/crashes",
        "companyName": "My Org",
        "productName": "My Product",
        "output": {
            "type": "local"
        }
    }
}

The "crashReporter" object has the following properties:

Property Type Description
"companyName" string Required. The company name to be included in the crash report.
"enabled" boolean Required. If true, the crash reporter will be enabled.
"folderPath" string Required. Location for the crash reporter logging and memory dumps when the output type is set to "local".
"ignoreSystemCrashHandler" boolean If true, crashes generated in the main process won't be forwarded to the system crash handler.
"output" object Required. Output settings for the crash reporter.
"productName" string Required. The product name to be included in the crash report.

The "output" object has the following properties:

Property Type Description
"dumps" object Settings for handling the dump files for crash reports. Available since io.Connect Desktop 9.3.
"backTraceConfig" object Settings for the Backtrace client.
"serverUrl" string URL pointing to the server (or to io.Manager) that will receive the crash report if the output type is set to "server". Required if "type" is set to "server".
"type" "local" | "server" | "backtrace" Type of the crash reporter output. Crash reports can be saved locally, sent to a REST service (including io.Manager), or to a Backtrace server.

Available since io.Connect Desktop 9.3

To instruct io.Connect Desktop how to handle the dump files from the crash reporter, use the "dumps" property of the "output" object under the "crashReporter" top-level key:

{
    "crashReporter": {
        "output": {
            "dumps": {
                "deleteOnSent": true,
                "limit": 10
            }
        }
    }
}

The "dumps" object has the following properties:

Property Type Description
"deleteOnSent" boolean If true, when a dump file is sent, it will be deleted instead of moved to the /sent folder located in the directory containing the dump files.
"limit" number Limit for the number of dump files to keep. On system restart, the oldest files will be deleted until the file limit is met.