# Architecture

Source: https://docs.interop.io/desktop/getting-started/what-is-io-connect-desktop/architecture/index.html

## Architectural Diagram

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

## How It All Works

The main components of **io.Connect Desktop** are the Desktop Client and the io.Connect Gateway. These two components can be packed together or deployed independently.

### Desktop Client

The Desktop Client is an Electron based app which offers APIs for:

[App Management](https://docs.interop.io/desktop/capabilities/app-management/overview/index.md)

- Loading the list of app definitions for the current user;
- Managing the apps life-cycle (starting/stopping apps);

[Window Management](https://docs.interop.io/desktop/capabilities/windows/window-management/overview/index.md)

- Hosting web apps in desktop windows;
- Sticking windows together;
- Advanced window management - [Workspaces UI](https://docs.interop.io/desktop/capabilities/windows/workspaces/overview/index.md)
- Saving and restoring layouts - [Layouts](https://docs.interop.io/desktop/capabilities/windows/layouts/overview/index.md)

[Data Sharing Between Apps](https://docs.interop.io/desktop/capabilities/data-sharing/overview/index.md)

- Synchronizing cross-app data by publishing and subscribing for updates of data objects - [Shared Contexts](https://docs.interop.io/desktop/capabilities/data-sharing/shared-contexts/overview/index.md)
- UI based on Shared Contexts - [Channels](https://docs.interop.io/desktop/capabilities/data-sharing/channels/overview/index.md)
- Registering and invoking methods - [Interop](https://docs.interop.io/desktop/capabilities/data-sharing/interop/overview/index.md)

The io.Connect APIs are available in JavaScript/TypeScript (as well as through lightweight io.Connect React and Angular wrappers) for web apps and in .NET, Java, and COM/VBA for desktop apps.

The Desktop Client is highly customizable and many of its features can be enabled, disabled or [re-configured](https://docs.interop.io/desktop/developers/configuration/overview/index.md).

### io.Connect Gateway

The io.Connect Gateway is a transport with domain specific protocols. It enables the communication between apps running in **io.Connect Desktop**.
By default, it uses WebSockets for delivering messages to apps. Other options are also available upon request. The io.Connect Gateway is written in Clojure and can be transpiled to Java and JavaScript.

### App Stores

**io.Connect Desktop** loads the list of apps available to the user from a pre-configured set of [app stores](https://docs.interop.io/desktop/capabilities/app-management/overview/index.md#app_stores). They can be of different type:

- Local stores - definitions are read from folders on the machine that is running **io.Connect Desktop**;
- Remote stores - definitions are fetched from a REST service;
- **io.Manager** stores - definitions are retrieved from [**io.Manager**](https://docs.interop.io/manager/overview/index.md);

To add an app to **io.Connect Desktop**, you need to add it to an app store.

### Application Adapters

**io.Connect Desktop** comes with a set of [Application Adapters](https://docs.interop.io/adapters/general-overview/index.md) for integrating third-party apps (MS Office, Bloomberg, Salesforce, etc.) with interop-enabled apps. The Application Adapters expose functionalities provided by a specific third-party app, so that they can be re-used in interop-enabled apps.The io.Connect [Excel Adapter](https://docs.interop.io/adapters/ms-office/excel/overview/index.md), for instance, allows apps to open an Excel sheet, populate it with data from the app and receive updates when the data in Excel is changed.

## Additional Services

### Notifications

The io.Connect [Notifications](https://docs.interop.io/desktop/capabilities/notifications/overview/index.md) allows for handling notifications and delivering them to the end user via a notifications UI.

### Global Search

The [Global Search](https://docs.interop.io/desktop/capabilities/search/overview/index.md) performs global searches on all defined search providers and returns consolidated results to the user.

### io.Insights

[**io.Insights**](https://docs.interop.io/insights/general-overview/index.md) is a configurable built-in feature of **io.Connect Desktop** that enables publishing extensive data in the form of metrics, traces and logs based on the [OpenTelemetry](https://opentelemetry.io/docs/what-is-opentelemetry/) standard.

### io.Manager

[**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 helps managing the data stored in **io.Manager** easier.
