# Configuration

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

## Overview

A seed project has separate settings for the product, the CLI, and packaging:

| File | Description |
|------|-------------|
| `package.json` | Product name, version, description, dependencies, and NPM scripts. |
| `config/iocd.cli.config.json` | Components, app processing, license handling, and code signing. |
| `config/forge.config.js` | Electron Forge makers, publishers, and packaging hooks. |
| `config/iocd.license.key` | License key for **io.Connect Desktop**. |

Platform settings belong in the [modifications](https://docs.interop.io/desktop/developers/seed-project/modifications/index.md#system_configuration) applied to the downloaded components. The CLI configuration controls how the project is prepared and built.

## Basic Settings

The `create` command populates the product metadata in `package.json`. To change it, edit the corresponding fields:

```json
{
    "name": "my-product-slug",
    "version": "1.0.0",
    "description": "My product description.",
    "productName": "My Product Name",
    "author": "My Company"
}
```

| Property | Type | Description |
|----------|------|-------------|
| `"author"` | `string` | Company name, also used to generate copyright information. |
| `"description"` | `string` | Product description in installers and metadata. |
| `"name"` | `string` | Product slug used for the executable and package names. |
| `"productName"` | `string` | Product name displayed to users. |
| `"version"` | `string` | Version of your platform distribution. |

## CLI Configuration

The `iocd.cli.config.json` file is located in the `/config` folder. The following example demonstrates how to select a component store and request the latest `iocd` component:

```json
{
    "$schema": "../node_modules/@interopio/iocd-cli/dist/schemas/iocd.cli.config.schema.json",
    "components": {
        "store": {
            "github": {
                "repo": "interopio/iocd-components/releases"
            }
        },
        "list": {
            "iocd": "latest"
        }
    }
}
```

The `"$schema"` property enables completion and validation in editors that support JSON schemas. The schema is distributed in the `/node_modules/@interopio/iocd-cli/dist/schemas` folder.

> ℹ️ *For details on stores, versions, and component commands, see the [Components](https://docs.interop.io/desktop/developers/seed-project/components/index.md) section.*

## License Key

**io.Connect Desktop** requires a valid license key. The CLI prompts for the key during project creation and saves it to `config/iocd.license.key`. Replace the contents of this file when renewing or changing the license.

> ℹ️ *For details on obtaining a license key, [contact us](https://interop.io/contact/).*

> ⚠️ *Note that you must never commit `iocd.license.key` to your repository. Generated projects exclude this file via `.gitignore`.*

For automation, supply the key via the `IOCD_LICENSE_KEY` environment variable. Store the value in the secret storage of your CI provider and make it available to the setup, test, and build steps that require it.

By default, the CLI writes the key to a `license.key` file in the resources folder of the `iocd` component when preparing the platform for development, testing, or a build, so the built packages include the license. To exclude the license from the packages, set the `"copyLicenseToOutput"` property of the `"license"` object in `config/iocd.cli.config.json` to `false`, then provide the license to users in [another supported way](https://docs.interop.io/desktop/getting-started/what-is-io-connect-desktop/requirements/index.md#licensing). This setting also stops the copy in development mode:

```json
{
    "license": {
        "copyLicenseToOutput": false
    }
}
```

> ℹ️ *For details on the generated workflow, see the [Building for Production > CI/CD Automation](https://docs.interop.io/desktop/developers/seed-project/building-for-production/index.md#cicd_automation) section.*
