# uip rpa publish

> Syntax and options for `uip rpa publish`, which uploads a packed .nupkg to an Orchestrator feed.

`uip rpa publish` uploads a packed `.nupkg` to Orchestrator. It takes a **package, not a project folder** — packing is the separate [`uip rpa pack`](./uip-rpa-pack.md) step, and a `.nupkg` is self-describing (its output type is read from the package itself), so this command has no pack-time options, only destination flags.

## Synopsis

```text
uip rpa publish <package> [--personal-workspace | --shared-libraries | --feed-id <id> | --folder-key <key> | --folder-path <path>] [--allow-any-feed]
```

## Arguments

| Name | Required | Purpose |
|---|---|---|
| `<package>` | yes | Path to the `.nupkg` to publish. |

## Options

| Long | Value | Description |
|---|---|---|
| `--personal-workspace` | flag | Publish to your Orchestrator personal workspace feed. |
| `--shared-libraries` | flag | Publish to the tenant's shared (host) libraries feed. This destination needs a folder context — name one with `--folder-key`/`--folder-path`, or let any accessible folder be used. |
| `--feed-id <id>` | string | Publish to the feed with this id. |
| `--folder-key <key>` | string | Publish to the feed of the folder with this key. With `--shared-libraries`, names that feed's context folder instead of a destination. |
| `--folder-path <path>` | string | Publish to the feed of the folder at this fully-qualified path (e.g. `Shared/QA/Regression`). Same dual meaning with `--shared-libraries` as `--folder-key`. |
| `--allow-any-feed` | flag | Let Orchestrator decide whether the resolved feed accepts this package, skipping the client-side output-type check (e.g. a test package normally can't go to a personal workspace or a non-test-enabled folder). Does not change which feed is resolved. |

`--personal-workspace`, `--shared-libraries`, `--feed-id`, and (outside of `--shared-libraries`) `--folder-key`/`--folder-path` are mutually exclusive — passing more than one fails client-side before any network call. Passing both `--folder-key` and `--folder-path` together with `--shared-libraries` also fails, since they'd name the same context folder two different ways. Omitting every destination flag targets the tenant feed.

## Examples

```bash
# Publish to the matching tenant feed (default)
uip rpa publish ./out/MyProject.1.0.0.nupkg
```

```bash
# Publish a test package to a specific folder's feed
uip rpa publish ./out/MyTests.1.0.0.nupkg --folder-path "Shared/QA/Regression"
```

## Data shape (--output json)

```json
{
  "Code": "Publish",
  "Data": {
    "Success": true,
    "Package": "MyProject.1.0.0.nupkg",
    "Destination": "TenantFeed"
  }
}
```

`Destination` is the resolved feed *kind* (`TenantFeed`/`PersonalWorkspace`/`SharedLibraries`/`FolderFeed`) — not necessarily the same as the flag family you passed, since e.g. `--feed-id` still resolves to `FolderFeed`. `Feed`/`FeedId` are added when the resolved feed has a name/id to report. `Warnings` is added only when the publish succeeded with caveats.

On failure, `Result` is one of `Failure`/`AuthenticationError`/`ValidationError`/`ConfigError` depending on the cause (not logged in, permission denied, invalid destination flags, ambiguous destination, or a broken feed configuration on the Orchestrator side) — `Instructions` names the specific fix.

## Related

- [`uip rpa pack`](./uip-rpa-pack.md) — produces the `.nupkg` this command uploads.

## See also

- [RPA tool overview](./uip-rpa.md)
- [Global options](./global-options.md)
- [Exit codes](./exit-codes.md)
