# io.Manager

Source: https://docs.interop.io/desktop/capabilities/manager/index.html

## Overview

**io.Connect Desktop** projects can connect to **io.Manager** and use its functionalities.

[**io.Manager**](https://docs.interop.io/manager/overview/index.md) is a server-side app that provides data to io.Connect (apps, Layouts, preferences) and allows monitoring and interacting with users running io.Connect.

It also includes an Admin UI that facilitates managing the data stored in **io.Manager**.

![](https://docs.interop.io/manager/images/manager-architecture.png)

> ℹ️ *For more details about **io.Manager**, see the [**io.Manager**](https://docs.interop.io/manager/overview/index.md) documentation.*

## Configuration

To configure **io.Connect Desktop** to connect to **io.Manager**, use the `"server"` top-level key in the `system.json` [system configuration](https://docs.interop.io/desktop/developers/configuration/system/index.md) file of **io.Connect Desktop**. Add the following basic configuration to enable connection to **io.Manager**:

```json
{
    "server": {
        "enabled": true,
        "url": "http://localhost:4356/api"
    }
}
```

This will add **io.Manager** as an additional app store and instruct it to store Layouts and app preferences. If you want **io.Manager** to be the only app store, set the `"appStores"` top-level key in the `system.json` file to an empty array.

The `"server"` object has the following properties:

| Property | Type | Description |
|----------|------|-------------|
| `"cache"` | `object` | Settings for persisting data received from **io.Manager**. Defaults to `{}`. *Available since **io.Connect Desktop** 9.4.* |
| `"clientAuth"` | `"no-auth"` \| `"negotiate"` \| `"kerberos"` | The client authentication mechanism for the REST service. Defaults to `"no-auth"`. |
| `"enabled"` | `boolean` | If `true`, will enable connecting to **io.Manager**. |
| `"features"` | `object` | Features to be injected automatically in **io.Connect Desktop**. |
| `"fetchInterval"` | `number` | Interval in seconds at which the server will be polled for new data (apps, Layouts, commands). Defaults to `30`. |
| `"requests"` | `object` | Settings for the requests sent to **io.Manager**. Defaults to `{}`. *Available since **io.Connect Desktop** 9.4.* |
| `"startRetries"` | `number` | Number of times **io.Connect Desktop** will try to reconnect to **io.Manager**. Defaults to `10`. |
| `"startRetryInterval"` | `number` | Interval in seconds at which **io.Connect Desktop** will try to connect to **io.Manager**. Defaults to `10`. |
| `"tokenRefreshInterval"` | `number` | Interval in seconds at which **io.Connect Desktop** will try to refresh the **io.Manager** token. Defaults to `3600`. |
| `"url"` | `string` | **Required.** URL pointing to **io.Manager**. |

The `"features"` object has the following properties:

| Property | Type | Description |
|----------|------|-------------|
| `"applicationsStore"` | `boolean` | If `true` (default), the **io.Manager** app store will be automatically injected. |
| `"layoutsStore"` | `boolean` | If `true` (default), the **io.Manager** Layout store will be automatically injected. |
| `"commands"` | `boolean` | If `true` (default), the **io.Manager** commands will be automatically injected. |
| `"preferencesStore"` | `boolean` | If `true` (default), the **io.Manager** app preferences store will be automatically injected. |

To send client crashes to the **io.Manager** Server, use the `"output"` property of the `"crashReporter"` top-level key in the `system.json` file:

```json
{
    "crashReporter": {
        "output": {
            "type": "server",
            "serverUrl": "http://localhost:4356/api/crashes"
        }
    }
}
```

If you want to support different environments and regions that connect to different **io.Manager** instances, see the [Getting Started > How to > Rebrand io.Connect Desktop > Functionality > Environments & Regions](https://docs.interop.io/desktop/getting-started/how-to/rebrand-io-connect/functionality/index.md#environments__regions) section.

Available since io.Connect Desktop 9.4

The `"cache"` object has the following properties:

| Property | Type | Description |
|----------|------|-------------|
| `"clearOld"` | `boolean` | If `true`, on opening a new session to **io.Manager**, all cache files from previous sessions will be deleted. Defaults to `false`. |
| `"enabled"` | `boolean` | If `true`, will enable caching and persisting data from **io.Manager** locally (e.g., in case of connection interruptions). Defaults to `false`. |
| `"location"` | `string` | Location for the persisted cache files. Defaults to `"%IO_CD_USER_DATA_DIR%/ioManagerCache"`. |

The `"requests"` object has the following properties:

| Property | Type | Description |
|----------|------|-------------|
| `"closeSessionTimeout"` | `number` | Interval in milliseconds to wait for a response to the `closeSession` request to **io.Manager**. Defaults to `10000`. |
| `"loggerLevel"` | `string`  | Log level with which the requests to **io.Manager** will be logged. Defaults to `"trace"`. |
| `"logHTTPHeaders"` | `boolean` | If `true`, will log the request and response HTTP headers of the requests sent to **io.Manager**. Defaults to `false`. |
| `"logSanitization"` | `boolean` | If `true` (default), the logged requests will be sanitized. If set to `false`, sensitive information (tokens) won't be removed from the logged requests. |
| `"openSessionTimeout"` | `number` | Interval in milliseconds to wait for a response to the `openSession` request to **io.Manager** before proceeding from cache. Defaults to `60000`. |
| `"requestBodyValidation"` | `boolean` | If `true` (default), the bodies of the requests sent to **io.Manager** will be validated. |
| `"responseBodyValidation"` | `boolean` | If `true` (default), the response bodies received from **io.Manager** will be validated. |
| `"timeout"` | `number` | Interval in milliseconds to wait for a response from **io.Manager**. Defaults to `60000`. |
