# io.Connect Desktop JavaScript Library

The [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) library enables web apps to participate in **io.Connect Desktop** and use io.Connect functionalities via a set of APIs.

## Features

The io.Connect Desktop library includes the following APIs:

- App Management API - manage and monitor interop-enabled apps and their instances;
- App Preferences API - store custom user-specific data and retrieve it when necessary;
- Intents API - raise requests for other apps to handle predefined actions (Intents), register apps as Intent handlers, provide users programmatically with options for handling raised Intents via the Intents Resolver UI app;
- Data sharing:
    - Shared Contexts API - create, update and track named data objects shared by all interop-enabled apps;
    - Channels API - globally accessed named shared contexts that allow users to dynamically group apps from an UI, instructing them to work over the same shared data object;
    - Interop API - offer and consume functionality from other interop-enabled apps by registering Interop methods and streams;
    - Pub/Sub API - basic API that allows apps to publish and subscribe for messages on a specific topic;
- Windows:
    - Window Management API - create and manipulate various types of io.Connect windows;
    - Layouts API - save and restore the arrangement of any set of apps running in io.Connect Desktop;
    - Themes API - control the available io.Connect themes programmatically;
- Notifications API - raise notifications, handle notification and action clicks via Interop methods, control the Notification Panel and subscribe for notification events;
- Metrics API - assess the life cycle of a certain process (app performance, business process, employee productivity, and more) by acquiring, recording and monitoring specific data over time;
- Hotkeys API - register key combinations and receive notifications when a key combination is pressed by the user, regardless of whether the app is on focus or not;
- Displays API - capture programmatically screenshots of the available monitors, of windows and window groups;
- Cookies API - enables web apps to manage cookies;

For more information, see the **io.Connect Desktop** [documentation](https://docs.interop.io/desktop/).

## Usage

The [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) library attaches a factory function called `IODesktop()` to the global `window` object. Call the factory function to initialize the library and access the io.Connect functionalities from the returned API object:

```javascript
import IODesktop from "@interopio/desktop";

const io = await IODesktop();
```

Optionally, provide a configuration object for the library initialization. The following example demonstrates enabling the Channels API, which is disabled by default, and additionally initializing the io.Connect Workspaces API:

```javascript
import IODesktop from "@interopio/desktop";
import IOWorkspaces from "@interopio/workspaces-api";

const config = {
    channels: true,
    libraries: [IOWorkspaces]
};

const io = await IODesktop(config);

// Accessing the io.Connect APIs.
const allChannelNames = await io.channels.all();

await io.workspaces.restoreWorkspace("My Workspace");
```