# uip solution deploy

> `uip solution deploy` takes a **published solution package** (see [`uip solution publish`](./uip-solution-publish.md)) and installs it into Orchestrator: creates a folder, provisions resources (queues, assets, processes, buckets, connections), and activates the deployment.

`uip solution deploy` takes a **published solution package** (see [`uip solution publish`](./uip-solution-publish.md)) and installs it into Orchestrator: creates a folder, provisions resources (queues, assets, processes, buckets, connections), and activates the deployment.

This page covers every subcommand under `deploy`, plus the top-level [`uip solution delete`](#uip-solution-delete) which manages Studio Web solutions (not deployments).

| Subcommand | Purpose |
|---|---|
| [`run`](#uip-solution-deploy-run) | Deploy a published package to Orchestrator. |
| [`status`](#uip-solution-deploy-status) | Check the status of a pipeline deployment. |
| [`list`](#uip-solution-deploy-list) | List existing deployments. |
| [`activate`](#uip-solution-deploy-activate) | Activate a deployment that was installed without auto-activation. |
| [`uninstall`](#uip-solution-deploy-uninstall) | Remove a deployment and its provisioned resources. |
| [`config get`](#uip-solution-deploy-config-get) | Fetch the default deployment configuration for a package. |
| [`config set`](#uip-solution-deploy-config-set) | Set a resource property in a deploy config file. |
| [`config link`](#uip-solution-deploy-config-link) | Link a solution resource to an existing Orchestrator resource. |
| [`config unlink`](#uip-solution-deploy-config-unlink) | Remove a resource link from a deploy config file. |

Also documented on this page:

- [`uip solution delete`](#uip-solution-delete) — a top-level verb that deletes a solution from Studio Web by ID. It is *not* a deploy subcommand; it is documented alongside these commands for grouping reasons.

Every subcommand is authenticated. Run [`uip login`](./authentication.md) first, or pass `--tenant` to target a specific tenant.

## Typical workflow

```
deploy config get  →  deploy config set / link  →  deploy run  →  deploy status
                                                       │
                                                       ├─→ deploy activate   (if not auto-activated)
                                                       └─→ deploy uninstall  (tear down)
```

---

## uip solution deploy run

Deploy a published solution package to Orchestrator. Creates a new folder (under `--folder-path` or `--folder-key`), provisions every resource described in the package (or in `--config-file`), and polls until the deployment reaches a terminal state.

### Synopsis

```
uip solution deploy run \
  --name <deployment-name> \
  --package-name <name> \
  --package-version <version> \
  --folder-name <name> \
  [--folder-path <path> | --folder-key <guid>] \
  [--config-file <path>] \
  [--tenant <tenant-name>] \
  [--timeout <seconds>] \
  [--poll-interval <ms>] \
  [--login-validity <minutes>]
```

### Options

- `-n, --name <deployment-name>` *(required)* — Name for the deployment. Used by `deploy status`, `activate`, and `uninstall` to identify this install.
- `--package-name <name>` *(required)* — Solution package name. Use [`packages list`](./uip-solution-packages.md#uip-solution-packages-list) to find available names.
- `--package-version <version>` *(required)* — Solution package version. Use [`packages list`](./uip-solution-packages.md#uip-solution-packages-list) to find available versions.
- `--folder-name <name>` *(required)* — Name of the new Orchestrator folder created for this deployment (under `--folder-path`).
- `--folder-path <path>` — Parent folder path (for example `Shared`). The deployment folder is created beneath it.
- `--folder-key <key>` — Parent folder key (GUID). Alternative to `--folder-path`.
- `--config-file <path>` — JSON configuration file. Generate it with [`deploy config get`](#uip-solution-deploy-config-get), edit with [`config set`](#uip-solution-deploy-config-set) / [`config link`](#uip-solution-deploy-config-link), then pass it here.
- `-t, --tenant <tenant-name>` — Tenant to deploy into.
- `--timeout <seconds>` — Deployment polling timeout. Defaults to `360`.
- `--poll-interval <ms>` — Milliseconds between status polls. Defaults to `5000`.
- `--login-validity <minutes>` — Minimum minutes before token expiration to trigger a refresh. Defaults to `10`.

### Examples

#### Common

```bash
uip solution deploy run \
  --name my-deployment \
  --package-name my-package \
  --package-version 1.0.0 \
  --folder-name MySolution \
  --folder-path "Shared"
```

#### With a customized configuration

```bash
uip solution deploy config get my-package -d ./deploy-config.json
uip solution deploy config set ./deploy-config.json MyQueue maxNumberOfRetries 5

uip solution deploy run \
  --name my-deployment \
  --package-name my-package \
  --package-version 1.0.0 \
  --folder-name MySolution \
  --folder-path "Shared" \
  --config-file ./deploy-config.json
```

#### Scripting — capture the deployment ID for follow-up calls

```bash
PIPELINE_ID=$(uip solution deploy run \
  --name my-deployment \
  --package-name my-package --package-version 1.0.0 \
  --folder-name MySolution --folder-path "Shared" \
  --output-filter "Data.PipelineDeploymentId" --output plain)

uip solution deploy status "$PIPELINE_ID"
```

### Data shape (--output json)

```json
{
  "Code": "SolutionDeployRun",
  "Data": {
    "Status": "DeploymentSucceeded",
    "DeploymentKey": "a1b2c3d4-0000-0000-0000-000000000001",
    "PipelineDeploymentId": "b2c3d4e5-0000-0000-0000-000000000001",
    "InstanceId": "c3d4e5f6-0000-0000-0000-000000000001",
    "FolderName": "MySolution",
    "FolderPath": "Shared/MySolution"
  }
}
```

Terminal deployment statuses: `DeploymentSucceeded`, `DeploymentFailed`, `ValidationFailed`, `ConflictFixingError`, `DeploymentScheduleError`. Non-success terminal states exit with `1` and aggregate the validation / conflict / schedule / workflow errors into the `Instructions` field.

### Timeout behaviour

If the deployment does not reach a terminal state before `--timeout` elapses, the command exits non-zero with a pointer to `deploy status <pipeline-deployment-id>` so you can continue monitoring.

---

## uip solution deploy status

Check the current status of a pipeline deployment. Returns the deployment state and, if available, the name/package/version of the deployment and a concatenated error summary.

### Arguments

- `<pipeline-deployment-id>` *(required)* — The `PipelineDeploymentId` returned by [`deploy run`](#uip-solution-deploy-run).

### Options

- `-t, --tenant <tenant-name>` — Tenant to query.
- `--login-validity <minutes>` — Defaults to `10`.

### Example

```bash
uip solution deploy status b2c3d4e5-0000-0000-0000-000000000001
```

### Data shape (--output json)

```json
{
  "Code": "SolutionDeployStatus",
  "Data": {
    "PipelineDeploymentId": "b2c3d4e5-0000-0000-0000-000000000001",
    "Status": "DeploymentSucceeded",
    "DeploymentKey": "a1b2c3d4-0000-0000-0000-000000000001",
    "ConfigurationKey": "...",
    "InstanceId": "c3d4e5f6-0000-0000-0000-000000000001",
    "DeploymentResult": {
      "Name": "my-deployment",
      "PackageName": "my-package",
      "PackageVersion": "1.0.0",
      "Status": "Successful",
      "StartDate": "2026-04-15T10:30:00Z",
      "EndDate": "2026-04-15T10:31:12Z",
      "Errors": null
    }
  }
}
```

---

## uip solution deploy list

List solution deployments. Shows deployment name, status, package version, and folder path.

### Options

- `-t, --tenant <tenant-name>` — Tenant to query.
- `--folder-path <path>` — Filter by parent folder path. Filtering is applied **after** fetching; increase `--take` if results look incomplete when using this filter.
- `--folder-key <key>` — Filter by parent folder key (GUID). Alternative to `--folder-path`.
- `--take <number>` — Max deployments to fetch. Defaults to `10`.
- `--order-by <column>` — Column to order by. Defaults to `startTime`.
- `--order-direction <direction>` — `Ascending` or `Descending`. Defaults to `Descending`.
- `--login-validity <minutes>` — Defaults to `10`.

### Example

```bash
uip solution deploy list --take 20 --folder-path "Shared/Production"
```

### Data shape (--output json)

```json
{
  "Code": "SolutionDeployList",
  "Data": [
    {
      "Key": "a1b2c3d4-0000-0000-0000-000000000001",
      "InstallDeploymentKey": "…",
      "Name": "my-deployment",
      "PackageName": "my-package",
      "PackageVersion": "1.0.0",
      "OperationStatus": "Successful",
      "ActivationStatus": "Activated",
      "FolderPath": "Shared/Production",
      "FolderKey": "…",
      "CreatedAt": "2026-04-15T10:30:00Z"
    }
  ]
}
```

---

## uip solution deploy activate

Activate a deployment that was installed without auto-activation. Activation provisions all solution components. `activate` first prints the pre-activate steps reported by Orchestrator (to stderr, via `--log-level info`), then calls activate and polls until a terminal state (`SuccessfulActivate` or `FailedActivate`).

### Arguments

- `<deployment-name>` *(required)* — Name of the deployment to activate. Use [`deploy list`](#uip-solution-deploy-list) to find deployment names.

### Options

- `-t, --tenant <tenant-name>` — Tenant to target.
- `--timeout <seconds>` — Activation polling timeout. Defaults to `360`.
- `--poll-interval <ms>` — Milliseconds between status polls. Defaults to `5000`.
- `--login-validity <minutes>` — Defaults to `10`.

### Example

```bash
uip solution deploy activate my-deployment
```

### Data shape (--output json)

```json
{
  "Code": "SolutionDeployActivate",
  "Data": {
    "Status": "SuccessfulActivate",
    "DeploymentName": "my-deployment",
    "InstanceId": "b2c3d4e5-0000-0000-0000-000000000001"
  }
}
```

If Orchestrator reports no `instanceId` (nothing to poll), `Status` is `Activation completed (no instance to poll)` and the command returns successfully.

---

## uip solution deploy uninstall

Uninstall a deployed solution. Removes all provisioned resources and the solution folder.

### Arguments

- `<deployment-name>` *(required)* — Name of the deployment to uninstall.

### Options

- `-t, --tenant <tenant-name>` — Tenant to target.
- `--timeout <seconds>` — Uninstall polling timeout. Defaults to `360`.
- `--poll-interval <ms>` — Milliseconds between status polls. Defaults to `5000`.
- `--login-validity <minutes>` — Defaults to `10`.

### Example

```bash
uip solution deploy uninstall my-deployment
```

### Data shape (--output json)

```json
{
  "Code": "SolutionDeployUninstall",
  "Data": {
    "Status": "SuccessfulUninstall",
    "DeploymentName": "my-deployment",
    "InstanceId": "b2c3d4e5-0000-0000-0000-000000000001"
  }
}
```

Two short-circuit responses are possible:

- **`Uninstall completed immediately`** — when Orchestrator reports `complete: true` on the first call; no polling happens.
- **`Uninstall scheduled`** — when Orchestrator schedules the work without returning an instance ID; the data includes the `Scheduled` field from the API.

---

## uip solution deploy config get

Fetch the default deployment configuration for a published solution package. The config lists every resource the solution will create (queues, assets, processes, buckets, connections, ...) with their default settings. Save it to a file (`-d`), customize with [`config set`](#uip-solution-deploy-config-set) / [`config link`](#uip-solution-deploy-config-link), then pass it to [`deploy run --config-file`](#uip-solution-deploy-run).

### Arguments

- `<package-name>` *(required)* — Solution package name. Use [`packages list`](./uip-solution-packages.md#uip-solution-packages-list).

### Options

- `--package-version <version>` — Package version. Latest is used if omitted.
- `-d, --destination <path>` — Write the configuration to this file instead of stdout.
- `-t, --tenant <tenant-name>` — Tenant to query.
- `--login-validity <minutes>` — Defaults to `10`.

### Example

```bash
uip solution deploy config get my-package --package-version 1.0.0 -d ./deploy-config.json
```

### Data shape (--output json)

When `-d` is provided:

```json
{
  "Code": "SolutionDeployConfig",
  "Data": {
    "Status": "Configuration written",
    "OutputPath": "/workspace/deploy-config.json",
    "PackageName": "my-package"
  }
}
```

When `-d` is omitted, the configuration is embedded in the response:

```json
{
  "Code": "SolutionDeployConfig",
  "Data": {
    "PackageName": "my-package",
    "Configuration": { "resources": [ ... ] }
  }
}
```

---

## uip solution deploy config set

Edit a resource property in a deploy config file. The file stays local until you pass it to [`deploy run --config-file`](#uip-solution-deploy-run).

### Arguments

- `<file>` *(required)* — Path to the deploy config JSON file (produced by [`config get`](#uip-solution-deploy-config-get)).
- `<args...>` *(required)* — Depends on `--all`:
  - **Without `--all`**: `<resource> <property> <value>` — e.g. `MyQueue maxNumberOfRetries 5`.
  - **With `--all`**: `<property> <value>` — applies to every resource in the file. Only valid for the top-level `conflictFixingAction` property.

### Options

- `--all` — Apply the property to all resources in the file. Only permitted with `conflictFixingAction` (e.g. `UseExisting`).

### Examples

#### Change retries on a single queue

```bash
uip solution deploy config set ./deploy-config.json MyQueue maxNumberOfRetries 5
```

#### Set a conflict-fixing policy on every resource

```bash
uip solution deploy config set ./deploy-config.json --all conflictFixingAction UseExisting
```

### Data shape (--output json)

Single-resource update:

```json
{
  "Code": "DeployConfigSet",
  "Data": {
    "Resource": "MyQueue",
    "Property": "maxNumberOfRetries",
    "OldValue": 1,
    "NewValue": 5
  }
}
```

Bulk update (`--all`):

```json
{
  "Code": "DeployConfigSet",
  "Data": {
    "Resource": "all",
    "Property": "conflictFixingAction",
    "NewValue": "UseExisting",
    "ResourceCount": 12
  }
}
```

---

## uip solution deploy config link

Link a solution resource to an **existing** Orchestrator resource, so the deployment reuses it instead of creating a new one. Changes are local — apply them by passing the file to [`deploy run --config-file`](#uip-solution-deploy-run).

### Arguments

- `<file>` *(required)* — Path to the deploy config JSON file.
- `<resource>` *(required)* — Resource name or `resourceKey` from the config file.

### Options

- `-n, --name <name>` *(required)* — Name of the existing Orchestrator resource to link to.
- `--folder-path <path>` — Orchestrator folder path where the existing resource lives.

### Example

```bash
uip solution deploy config link ./deploy-config.json MyQueue \
  --name ProductionQueue \
  --folder-path "Shared/Production"
```

### Data shape (--output json)

```json
{
  "Code": "DeployConfigLink",
  "Data": {
    "Resource": "MyQueue",
    "LinkedTo": {
      "name": "ProductionQueue",
      "folderPath": "Shared/Production"
    }
  }
}
```

---

## uip solution deploy config unlink

Remove a link previously set with [`config link`](#uip-solution-deploy-config-link). On the next `deploy run --config-file`, the resource will be created fresh instead of reused.

### Arguments

- `<file>` *(required)* — Path to the deploy config JSON file.
- `<resource>` *(required)* — Resource name or `resourceKey` to unlink.

### Example

```bash
uip solution deploy config unlink ./deploy-config.json MyQueue
```

### Data shape (--output json)

```json
{
  "Code": "DeployConfigUnlink",
  "Data": {
    "Resource": "MyQueue",
    "UnlinkedFrom": "ProductionQueue"
  }
}
```

### Failure modes

- **Resource not currently linked.** The command refuses the unlink and points to [`config link`](#uip-solution-deploy-config-link).

---

## uip solution delete

`uip solution delete` is a top-level verb (not a `deploy` subcommand) that deletes a solution from **Studio Web** by its solution ID. The ID is emitted by [`uip solution upload`](./uip-solution-upload.md) and by `flow debug` in their output.

This does **not** uninstall a deployed solution from Orchestrator — use [`deploy uninstall`](#uip-solution-deploy-uninstall) for that.

### Synopsis

```
uip solution delete <solution-id>
```

### Arguments

- `<solution-id>` *(required)* — The Studio Web solution ID (UUID).

### Example

```bash
uip solution delete a1b2c3d4-0000-0000-0000-000000000001
```

### Data shape (--output json)

```json
{
  "Code": "SolutionDelete",
  "Data": {
    "SolutionId": "a1b2c3d4-0000-0000-0000-000000000001"
  }
}
```

---

## Related commands

- [`uip solution publish`](./uip-solution-publish.md) — required step before `deploy run`.
- [`uip solution packages list`](./uip-solution-packages.md#uip-solution-packages-list) — discover package names and versions.
- [`uip resource`](./uip-resource.md) — inspect or create the Orchestrator resources that `deploy config link` references.

## See also

- [Your first pipeline](./first-pipeline.md) — pack → publish → deploy run walkthrough.
- [Authentication](./authentication.md) and [Configuration](./configuration.md) — session setup and per-tenant defaults.
- [`uip solution` overview](./uip-solution.md).
