# Components

Source: https://docs.interop.io/desktop/developers/seed-project/components/index.html

## Overview

The `iocd` component provides the required platform runtime. Add other components according to the features and adapters covered by your license. The CLI installs components in the `/components` folder.

The following table lists the available components:

| Component | Description | Platforms |
|-----------|-------------|-----------|
| `"iocd"` | **Required.** The main **io.Connect Desktop** app runtime. | Windows, macOS |
| `"devTools"` | [Developer tools](https://docs.interop.io/desktop/developers/dev-tools/index.md) for **io.Connect Desktop**. | Windows, macOS |
| `"demos"` | A set of web-based demo apps showcasing various features of **io.Connect Desktop**. | Windows, macOS |
| `"java-demos"` | A set of Java demo apps showcasing **io.Connect Desktop** integration. | Windows, macOS |
| `"bbg"` | [TAPI Bridge](https://docs.interop.io/adapters/bloomberg/tapi-bridge/configuration/index.md) version of the Bloomberg Adapter for integrating with the Bloomberg Terminal. | Windows, macOS |
| `"bbg-mdf"` | [MDF Bridge](https://docs.interop.io/adapters/bloomberg/mdf-bridge/overview/index.md) version of the Bloomberg Adapter for accessing the Bloomberg Market Data Feed (B-PIPE). | Windows |
| `"excel"` | [Microsoft Excel](https://docs.interop.io/adapters/ms-office/excel/overview/index.md) integration adapter for **io.Connect Desktop**. | Windows |
| `"fidessa"` | [Fidessa](https://docs.interop.io/adapters/fidessa/overview/index.md) integration adapter for **io.Connect Desktop**. | Windows |
| `"citrix"` | [Citrix](https://docs.interop.io/desktop/capabilities/more/features/index.md#citrix_apps) integration adapter for **io.Connect Desktop**. | Windows |
| `"ibchat"` | [Instant Bloomberg](https://docs.interop.io/adapters/instant-bloomberg/overview/index.md) (IB Chat) integration adapter for **io.Connect Desktop**. | Windows |
| `"outlook"` | [Microsoft Outlook](https://docs.interop.io/adapters/ms-office/outlook/overview/index.md) integration adapter for **io.Connect Desktop**. | Windows |
| `"word"` | [Microsoft Word](https://docs.interop.io/adapters/ms-office/word/overview/index.md) integration adapter for **io.Connect Desktop**. | Windows |
| `"ppt"` | Microsoft PowerPoint integration adapter for **io.Connect Desktop**. | Windows |

## Installing & Updating Components

To install a component or update an existing component from the project root, execute:

```cmd
npx @interopio/iocd-cli@latest components install <component-name>
```

This command will download and install the latest version of the specified component, and save the installed version in `"components.list"` in `config/iocd.cli.config.json`. This replaces a `"latest"` entry with the specific version. To keep resolving the latest version, set the entry back to `"latest"`.

To install all configured components with the versions listed in the configuration, omit the component name.

To install a specific version, include it after the component name:

```cmd
npx @interopio/iocd-cli@latest components install <component-name>@<version>
```

## Pinning Versions

Use exact versions in `"components.list"` when a build must use a known set of components. To resolve entries set to `"latest"` and save specific versions to the configuration, execute:

```cmd
npx @interopio/iocd-cli@latest components pin
```

Review the resulting `config/iocd.cli.config.json` before building. Components that already have specific versions retain those versions.

## Component Stores

Configure one store in the `"components.store"` object of `config/iocd.cli.config.json`:

| Property | Description |
|----------|-------------|
| `"github"` | GitHub release store, configured with `"repo"` (e.g., `"interopio/iocd-components/releases"`). |
| `"local"` | Local component store, configured with `"path"`. |
| `"s3"` | S3 component store, configured with `"bucketName"` and `"region"`, and optionally `"prefix"` and credentials. |

Use the `components browse` command to inspect the selected store and `components list` to list the components and versions configured in `"components.list"`. The list command doesn't check which components are installed in `/components`. Use `components uninstall <name>` to remove a component from the project.

## Using Pre-Releases

You can also use pre-release versions of the platform components via the io.Connect CLI. Published releases are listed on the [component releases page](https://releases.interop.io/components.html).

To enable using a pre-release version, set the `"usePrereleases"` property to `true` in the `"components.store.github"` object in the `config/iocd.cli.config.json` file:

```json
{
    "components": {
        "store": {
            "github": {
                "repo": "interopio/iocd-components/releases",
                "usePrereleases": true
            }
        }
    }
}
```

After enabling the flag, install the desired pre-release version by specifying the exact version:

```cmd
npx @interopio/iocd-cli@latest components install iocd@10.1.0-dev.260314T1935
```

> ⚠️ *Note that pre-release versions are intended for testing and evaluation purposes. They may contain experimental features or changes that aren't yet fully stable. It's recommended to use stable releases for production environments.*

### Pre-Release Channels

Available since @interopio/iocd-cli 0.0.80

Pre-release versions use the following channel tags:

- The `build` tag identifies build pre-releases (e.g., `v10.0.0-build.20250927121929`). These are automated build artifacts.
- The `dev` tag identifies development pre-releases (e.g., `v10.0.0-dev.260314T1935`). These are development snapshots.
- The `nightly` tag identifies nightly pre-releases (e.g., `v10.0.0-nightly.260319T0800`). These are nightly build snapshots.

When `"usePrereleases"` is `true` and you use `"latest"` as the version, the CLI will consider all pre-release channels by default. You can restrict which channels are allowed for `"latest"` resolution using the `"prereleaseChannels"` property:

```json
{
    "components": {
        "store": {
            "github": {
                "repo": "interopio/iocd-components/releases",
                "usePrereleases": true,
                "prereleaseChannels": ["build"]
            }
        },
        "list": {
            "iocd": "latest"
        }
    }
}
```

In this example, resolving `"latest"` will only consider stable releases and `-build` pre-releases. The `-dev` and `-nightly` channels will be excluded.

You can still install a specific pre-release version from any channel, regardless of the `"prereleaseChannels"` setting:

```cmd
npx @interopio/iocd-cli@latest components install iocd@10.1.0-nightly.260319T0800
```

> ⚠️ *Note that `"prereleaseChannels"` filters only `"latest"` resolution. Setting `"usePrereleases"` to `false` excludes all pre-releases, including explicit version requests.*

## Downloading Components to a Local Store

Available since @interopio/iocd-cli 0.0.24

You can download components from a remote store (GitHub or S3) to a local directory using the `download` command. By default, the command downloads the latest version of each component:

```cmd
npx @interopio/iocd-cli@latest components download ./my-local-store
```

To overwrite existing files without prompting, use the `--force` flag:

```cmd
npx @interopio/iocd-cli@latest components download --force ./my-local-store
```

The downloaded components are saved in the local store format and can be used as a local component store by configuring the `"components.store.local"` property in `config/iocd.cli.config.json`. The following example demonstrates how to select the downloaded store:

```json
{
    "components": {
        "store": {
            "local": {
                "path": "./my-local-store"
            }
        },
        "list": {
            "iocd": "10.0.3"
        }
    }
}
```

Available since @interopio/iocd-cli 0.0.84

To download only specific components, use the `--components` option with a semicolon-separated list. You can specify exact versions with `@<version>` or use `latest`:

```cmd
npx @interopio/iocd-cli@latest components download ./my-local-store --components "iocd@10.0.3;devTools@latest"
```
