# Migrate to io.Connect Desktop

Source: https://docs.interop.io/desktop/getting-started/how-to/migrate-to-io-connect/index.html

## Overview

The **io.Connect Desktop** platform is the result of merging and rebranding the previous **Glue42 Enterprise** and **Finsemble** desktop integration platforms. If you want to migrate your existing platform to the new, improved and much more powerful **io.Connect Desktop** platform, you should take into consideration the guide lines in the following sections.

## From Glue42 Enterprise

Migrating from **Glue42 Enterprise** to **io.Connect Desktop** requires very little development effort. The migration process in each case may differ depending on which io.Connect libraries and features you are using. Overall, this may include:

- updating the names of the imported io.Connect libraries in your apps;
- renaming some of the types if using TypeScript;
- changing some of the paths in your configuration files;
- setting up permissions for the new **io.Connect Desktop** executable and updating custom shortcuts to it;
- moving manually local Layouts, app definitions or saved preferences;

## Installer

If you are downloading the **io.Connect Desktop** installer from AWS, the new domain is `https://install.interop.io/`. You may need to set up permissions for the `https://interop.io/` domain if your organization requires it.

The new **io.Connect Desktop** executable file is called `io-connect-desktop.exe`. You may need to set up permissions for it if your organization requires it.

If you are using custom shortcuts for running **io.Connect Desktop** in different [environments and regions](https://docs.interop.io/desktop/getting-started/how-to/rebrand-io-connect/functionality/index.md#environments__regions) or for fetching [remote configurations](https://docs.interop.io/desktop/getting-started/how-to/rebrand-io-connect/functionality/index.md#remote_configurations), you must update them with the name of the new executable file:

```cmd
io-connect-desktop.exe -- config=config/system.json configOverrides config0=config/system-PROD-EMEA.json
```

The new default installation location is `<installation_location>/interop.io/io.Connect Desktop` (for all renamed directories, see the [Directory Names](#from_glue42_enterprise-directory_names) section).

## Desktop Client

The new io.Connect [global protocol handler](https://docs.interop.io/desktop/capabilities/more/features/index.md#global_protocol_handler) is `ioconnect://`. The previous `glue42://` protocol handler is also registered, so it will still work if you are using it.

Locally saved [Layouts](https://docs.interop.io/desktop/capabilities/windows/layouts/overview/index.md), [app definitions](https://docs.interop.io/desktop/developers/configuration/application/index.md) and [app preferences](https://docs.interop.io/desktop/capabilities/app-preferences/overview/index.md) won't be automatically moved to the new location once **io.Connect Desktop** is installed. The same is valid for all locally saved data in the `UserData` folder.

The [User Agent](https://docs.interop.io/desktop/developers/configuration/system/index.md) in web requests may be different, as by default it uses the name of the executable file.

The default environment and region for **io.Connect Desktop** are now `DEMO-INTEROP.IO`.

## Directory Names

The new default installation location for **io.Connect Desktop** is `<installation_location>/interop.io/io.Connect Desktop`.

The following directories within the installation location have been renamed:

| Previous Name | New Name |
|---------------|----------|
| `GlueBloombergBridge` | `BloombergBridge` |
| `GlueDesktop` | `Desktop` |
| `GlueInstaller` | `Installer` |
| `GlueOutlook` | `Outlook` |
| `GlueSDK` | `SDK` |
| `GlueWord` | `Word` |
| `GlueXL` | `ioXL` |

The following directories within the `SDK` folder have been renamed:

| Previous Name | New Name |
|---------------|----------|
| `Glue4OfficeJS` | `ioOfficeJS` |
| `Glue42Java` | `Java` |
| `Glue42NET` | `.NET` |
| `GlueCOM` | `COM` |
| `GlueCOMv2` | `COMv2` |
| `GlueJS` | `ioDesktopJS` |

The default path to the `UserData` folder where all logs, preferences, Layouts and user app definitions are stored locally, is now `<installation_location>/interop.io/io.Connect Desktop/UserData`.

The `GlueConnectors` directory within the `UserData` folder has been renamed to `ApplicationAdapters`.

The default environment and region directory within the `UserData` folder has been renamed to `DEMO-INTEROP.IO`.

## Libraries

### Web

All web libraries are now published in the [`@interopio`](https://www.npmjs.com/search?q=interopio) scope in NPM.

The following table lists the renamed JavaScript, React and Angular libraries in the new scope:

| Previous Name | New Name | Description |
|---------------|----------|-------------|
| `@glue42/core` | [`@interopio/core`](https://www.npmjs.com/package/@interopio/core) | JavaScript library for **io.Connect Desktop** client apps. Subset of the [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) library which offers basic functionalities for sharing data between apps. |
| `@glue42/desktop` | [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) | JavaScript library for **io.Connect Desktop** client apps. |
| `@glue42/fdc3` | [`@interopio/fdc3`](https://www.npmjs.com/package/@interopio/fdc3) | JavaScript library providing an io.Connect implementation of the FDC3 standards. |
| `@glue42/feedback-ui-react` | [`@interopio/components-react`](https://www.npmjs.com/package/@interopio/components-react) | React library containing components for building and customizing the default apps of **io.Connect Desktop** (Notification apps, Feedback app, dialogs and more). |
| `@glue42/groups-ui-react` | [`@interopio/groups-ui-react`](https://www.npmjs.com/package/@interopio/groups-ui-react) | React library for building a [custom Web Group App](https://docs.interop.io/desktop/capabilities/windows/window-management/overview/index.md#extending_web_groups) in **io.Connect Desktop**.<br> ⚠️ *Note that you should upgrade to the latest version of the [`@interopio/groups-ui-react`](https://www.npmjs.com/package/@interopio/groups-ui-react) library to avoid a loader text misalignment issue for web groups that was accidentally introduced when rebranding the library.* |
| `@glue42/intents-resolver-api` | [`@interopio/intents-resolver-api`](https://www.npmjs.com/package/@interopio/intents-resolver-api) | JavaScript library for implementing the functionality of a [custom Intent Resolver App](https://docs.interop.io/desktop/capabilities/data-sharing/intents/overview/index.md#extending_the_intent_resolver). |
| `@glue42/ng` | [`@interopio/ng`](https://www.npmjs.com/package/@interopio/ng) | Angular library for  **io.Connect Desktop** client apps. |
| `@glue42/notifications-ui-react` | [`@interopio/components-react`](https://www.npmjs.com/package/@interopio/components-react) | React library containing components for building and customizing the default apps of **io.Connect Desktop** (Notification apps, Feedback app, dialogs and more). |
| `@glue42/react-hooks` | [`@interopio/react-hooks`](https://www.npmjs.com/package/@interopio/react-hooks) | React library for  **io.Connect Desktop** client apps. |
| `@glue42/workspaces-api` | [`@interopio/workspaces-api`](https://www.npmjs.com/package/@interopio/workspaces-api) | JavaScript library for manipulating [Workspaces](https://docs.interop.io/desktop/capabilities/windows/workspaces/overview/index.md) in **io.Connect Desktop**. |
| `@glue42/workspaces-ui-react` | [`@interopio/workspaces-ui-react`](https://www.npmjs.com/package/@interopio/workspaces-ui-react) | React library for building a [custom Workspaces App](https://docs.interop.io/desktop/capabilities/windows/workspaces/overview/index.md#extending_workspaces). |

For new apps or apps in development, it's strongly recommended to start using the new packages.

The old libraries in the `@glue42` scope are still available and compatible with **io.Connect Desktop**, so it isn't necessary to upgrade your older apps. If you want to migrate your older apps to the new libraries, you only need to update the imports with the new library names, and optionally update the names of the factory functions (if you are using TypeScript, see the [TypeScript](#from_glue42_enterprise-breaking_changes-typescript) section for further details on what else you must update). The new libraries support the old factory functions, so it isn't mandatory to update them.

You may also need to update the `.npmrc` file because of the new `@interopio` scope.

### Native

For your .NET interop-enabled apps, you must switch from the deprecated [Glue42](https://www.nuget.org/packages/Glue42) .NET library to the new [io.Connect.NET](https://www.nuget.org/packages/io.Connect.NET/) one.

> ℹ️ *For details on the available io.Connect .NET libraries, see the [How to... > Interop-Enable Your Apps > .NET](https://docs.interop.io/desktop/getting-started/how-to/interop-enable-your-apps/net/index.md) section.*

### Breaking Changes

The following sections describe the major changes introduced by the new io.Connect libraries. Some of the changes won't break your existing implementations, as they are backwards compatible - e.g., in the JavaScript libraries, both the old and new factory functions are supported. Also supported are the old `glue42gd` object (now named `iodesktop`) and the `gluePromise` (now named `ioPromise`) both injected in the global `window` object.

#### JavaScript

The `glue42gd` object injected in the global `window` object and used for accessing io.Connect functionalities ([OS Info](https://docs.interop.io/desktop/capabilities/more/apis/index.md#os_info), [request headers](https://docs.interop.io/desktop/capabilities/more/apis/index.md#request_headers), [proxy settings](https://docs.interop.io/desktop/capabilities/more/apis/index.md#proxy_settings) and more) before the io.Connect library initialization has completed, is now named `iodesktop`. The previous name is still supported.

The `gluePromise` used for awaiting the io.Connect API to initialize when using [auto injection](https://docs.interop.io/desktop/getting-started/how-to/interop-enable-your-apps/javascript/index.md#auto_injection) and auto initialization is now named `ioPromise`. The previous name is still supported.

The following factory functions have been renamed:

| Previous Name | New Name | Library |
|---------------|----------|---------|
| `Glue()` | `IODesktop()` | [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) |
| `GlueCore()` | `IOConnectCore()` | [`@interopio/core`](https://www.npmjs.com/package/@interopio/core) |
| `GlueIntentsResolver()` | `IOConnectIntentsResolver()` | [`@interopio/intents-resolver-api`](https://www.npmjs.com/package/@interopio/intents-resolver-api) |
| `GlueWorkspaces()` | `IOWorkspaces()` | [`@interopio/workspaces-api`](https://www.npmjs.com/package/@interopio/workspaces-api) |

The previous factory function names are still supported.

#### TypeScript

If you are using TypeScript, take into consideration that some type names are different in the new libraries.

The following types have been renamed in the [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) library:

| Previous Name | New Name |
|---------------|----------|
| `GDWindow` | `IOConnectWindow` |
| `Glue` | `API` |
| `Glue42` | `IOConnectDesktop` |
| `Glue42Notification` | `Notification` |
| `Glue42NotificationAction` | `NotificationAction` |
| `Glue42NotificationOptions` | `IOConnectNotificationOptions` |

The following types have been renamed in the [`@interopio/core`](https://www.npmjs.com/package/@interopio/core) library:

| Previous Name | New Name |
|---------------|----------|
| `Glue42Core` | `IOConnectCore` |
| `GlueCore` | `API` |
| `GlueCoreFactoryFunction` | `IOConnectCoreFactoryFunction` |

The following types have been renamed in the [`@interopio/workspaces-api`](https://www.npmjs.com/package/@interopio/workspaces-api) library:

| Previous Name | New Name |
|---------------|----------|
| `Glue42Workspaces` | `IOConnectWorkspaces` |

The following types have been renamed in the [`@interopio/intents-resolver-api`](https://www.npmjs.com/package/@interopio/intents-resolver-api) library:

| Previous Name | New Name |
|---------------|----------|
| `GlueIntentsResolverFactoryFunction` | `IOConnectIntentsResolverFactoryFunction` |

#### React

The following contexts, components and hooks have been renamed in the [`@interopio/react-hooks`](https://www.npmjs.com/package/@interopio/react-hooks) library:

| Previous Name | New Name |
|---------------|----------|
| `GlueContext` | `IOConnectContext` |
| `<GlueProvider />` | `<IOConnectProvider />` |
| `useGlue()` | `useIOConnect()` |
| `useGlueInit()` | `useIOConnectInit()` |

If you are using TypeScript with React, consider that the following types have been renamed in the [`@interopio/react-hooks`](https://www.npmjs.com/package/@interopio/react-hooks) library:

| Previous Name | New Name |
|---------------|----------|
| `Glue42DesktopFactory` | `IOConnectDesktopFactory` |
| `Glue42ReactConfig` | `IOConnectReactConfig` |
| `Glue42ReactFactory` | `IOConnectReactFactory` |
| `GlueInitSettings` | `IOConnectInitSettings` |
| `GlueProviderProps` | `IOConnectProviderProps` |
| `UseGlueInitFunc` | `UseIOInitFunc` |

The following properties of the `IOConnectInitSettings` object have been renamed:

| Previous Name | New Name |
|---------------|----------|
| `web` | `browser` |
| `webPlatform` | `browserPlatform` |

The `useGDWindow()` hook in the [`@interopio/groups-ui-react`](https://www.npmjs.com/package/@interopio/groups-ui-react) library has been renamed to `useIOConnectWindow()`.

The `glue` property of the `<Workspaces />`, `<AddApplicationPopup />`, `<AddWorkspacePopup />` and `<SaveWorkspacePopup />` components in the  [`@interopio/workspaces-ui-react`](https://www.npmjs.com/package/@interopio/workspaces-ui-react) library has been renamed to `io`. A new `<Logo />` component is available to be used instead of the `<GlueLogo />` component. The `<GlueLogo />` component is still supported.

#### Angular

The following modules and services have been renamed in the [`@interopio/ng`](https://www.npmjs.com/package/@interopio/ng) library:

| Previous Name | New Name |
|---------------|----------|
| `Glue42Ng` | `IOConnectNg` |
| `Glue42Store` | `IOConnectStore` |

The `getGlue()` method of the `IOConnectStore` service has been renamed to `getIOConnect()`.

The following types have been renamed in the [`@interopio/ng`](https://www.npmjs.com/package/@interopio/ng) library:

| Previous Name | New Name |
|---------------|----------|
| `Glue42DesktopFactoryFunction` | `IODesktopFactoryFunction` |
| `Glue42NgFactory` | `IOConnectNgFactory` |
| `Glue42NgFactoryConfig` | `IOConnectNgFactoryConfig` |
| `Glue42NgSettings` | `IOConnectNgSettings` |

The following properties of the `IOConnectNgSettings` object have been renamed:

| Previous Name | New Name |
|---------------|----------|
| `web` | `browser` |
| `webPlatform` | `browserPlatform` |

## Configurations

If you have a custom `system.json` file and are using [auto injection](https://docs.interop.io/desktop/getting-started/how-to/interop-enable-your-apps/javascript/index.md#auto_injection) for the [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) or the [`@interopio/fdc3`](https://www.npmjs.com/package/@interopio/fdc3) library, set the value for the `"version"` properties to `"*"` in order to get the latest versions:

```json
{
    "autoInjectAPI": {
        "enabled": true,
        "version": "*"
    },
    "autoInjectFdc3": {
        "enabled": true,
        "version": "*"
    }
}
```

If you are using the io.Connect [classic groups](https://docs.interop.io/desktop/capabilities/windows/window-management/overview/index.md#window_groups-classic_groups) and have a custom `themes.json` file for configuring the io.Connect themes, change the value of all instances of the `"iconSize"` property to `16`:

```json
// Change the value of `"iconSize"` to 16 for all defined themes.
[
    {
        "name": "dark",
        "displayName": "Night",
        "properties": {
            "buttons": {
                "iconSize": 16
            },
            "group": {
                "buttons": {
                    "iconSize": 16
                }
            },
            "tabs": {
                "headerButtons": {
                    "iconSize": 16
                }
            }
        }
    }
]
```
