# uip solution publish

> `uip solution publish` uploads a solution `.zip` — produced by [`uip solution pack`](./uip-solution-pack.md) — to the tenant's **solution feed**. Once a package is published, it is visible to [`uip solution packages list`](./uip-solution-packages.md#uip-solution-packages-list) and can be deployed with [`uip solution deploy run`](./uip-solution-deploy.md#uip-solution-deploy-run).

`uip solution publish` uploads a solution `.zip` — produced by [`uip solution pack`](./uip-solution-pack.md) — to the tenant's **solution feed**. Once a package is published, it is visible to [`uip solution packages list`](./uip-solution-packages.md#uip-solution-packages-list) and can be deployed with [`uip solution deploy run`](./uip-solution-deploy.md#uip-solution-deploy-run).

Publish is an authenticated operation. Run [`uip login`](./authentication.md) first, or pass `--tenant` to target a specific tenant within your authenticated organization.

## Synopsis

```
uip solution publish <packagePath> [--tenant <tenant-name>] [--login-validity <minutes>]
```

The command honours the [global options](./global-options.md) and returns the [standard exit codes](./exit-codes.md).

## Arguments

- `<packagePath>` *(required)* — Path to a `.zip` package produced by [`uip solution pack`](./uip-solution-pack.md). The file must exist and have a `.zip` extension; anything else fails with a `Failure` result.

## Options

- `-t, --tenant <tenant-name>` — Tenant to publish into. Defaults to the tenant selected during authentication.
- `--login-validity <minutes>` — Minimum minutes before token expiration to trigger a refresh. Defaults to `10`.

## Examples

### Minimal

```bash
uip solution publish ./dist/my-solution.1.0.0.zip
```

### Common — target a specific tenant

```bash
uip solution publish ./dist/my-solution.1.0.0.zip --tenant Production
```

### Scripting — chain pack → publish and capture the package version key

```bash
uip solution pack ./my-solution ./dist --version 1.2.0
KEY=$(uip solution publish ./dist/my-solution.1.2.0.zip --output-filter "Data.PackageVersionKey" --output plain)
echo "Published version key: $KEY"
```

## Data shape (--output json)

```json
{
  "Code": "SolutionPublish",
  "Data": {
    "Status": "Published successfully",
    "PackageVersionKey": "a1b2c3d4-0000-0000-0000-000000000001",
    "PackageName": "my-solution",
    "PackageVersion": "1.0.0"
  }
}
```

- `PackageVersionKey` — GUID identifying this specific version of the package in the tenant feed.
- `PackageName` / `PackageVersion` — the values passed to (or defaulted by) `pack`; re-use them on `deploy run --package-name --package-version`.

## Version conflicts

Publishing a package whose `name + version` already exists in the feed fails with a descriptive error. Increment the version in your build — typically via `pack --version …` — before republishing. The error instructions point to this same remediation.

## Related commands

- [`uip solution pack`](./uip-solution-pack.md) — produces the `.zip` to publish.
- [`uip solution packages list`](./uip-solution-packages.md#uip-solution-packages-list) — see published versions.
- [`uip solution packages delete`](./uip-solution-packages.md#uip-solution-packages-delete) — remove a published version.
- [`uip solution deploy run`](./uip-solution-deploy.md#uip-solution-deploy-run) — deploy the published package to Orchestrator.

## See also

- [Your first pipeline](./first-pipeline.md) — pack → publish → deploy run walkthrough.
- [Authentication](./authentication.md) — session management.
- [`uip solution` overview](./uip-solution.md).
