- Overview
- Get started
- Concepts
- Using UiPath CLI
- How-to guides
- CI/CD recipes
- Command reference
- Overview
- Exit codes
- Global options
- uip codedagent
- uip coder
- uip context-grounding
- uip docsai
- uip function
- uip guardrails
- uip llm-configuration
- uip llm-gateway
- uip maestro authoring
- uip maestro registry
- uip model-hub
- activities find
- activities get-default-xaml
- analyze
- analyzer-rules list
- build
- cleanup
- data-fabric-entities install
- data-fabric-entities list
- files diff
- get-library-object-repository
- get-object-repository
- init
- instances list
- pack
- packages inspect
- packages install
- packages versions
- publish
- remote
- restore
- run, debug & execution
- settings
- studio start
- templates search
- test-data add-entity
- test-data add-queue
- test-data add-variation
- tm
- uia
- validate
- workflow-examples get
- workflow-examples list
- uip tasks
- uip traces
- uip traces feedback
- Migration
- Reference & support
uip solution pack
Syntax and options for `uip solution pack`, which produces a deployable `.zip` from a solution directory or `.uis` bundle file.
uip solution pack produces a deployable .zip package from a solution directory (containing a .uipx manifest) or from a .uis bundle file. The resulting archive is what uip solution publish uploads to the tenant feed, which uip solution deploy run can then deploy.
Pack is an offline operation — it does not contact Orchestrator except to resolve NuGet dependencies from tenant feeds (or an Orchestrator folder's library feed via --feed-folder), and does not contact AutomationOps except when a governance flag or --ignored-rules is passed while you are signed in — so it is safe to run inside build steps that do not yet have full credentials, as long as dependency resolution is covered.
Synopsis
uip solution pack <solutionPath> [outputPath] \
[--name <name>] [--version <version>] \
[--dry-run] \
[--skip-analyze] [--ignored-rules <rules>] [--governance-file-path <path>] [--governance-product <product>] \
[--nuget-sources-config-path <path>] [--exclude-configured-sources] [--feed-folder <name>] \
[--signing-certificate-path <path>] [--signing-certificate-password <password>] [--signing-timestamp-server <url>] \
[--author <text>] [--description <text>] [--release-notes <text>] [--project-url <url>] \
[--repository-url <url>] [--repository-commit <sha>] [--repository-branch <branch>] [--repository-type <type>] \
[--login-validity <minutes>]
uip solution pack <solutionPath> [outputPath] \
[--name <name>] [--version <version>] \
[--dry-run] \
[--skip-analyze] [--ignored-rules <rules>] [--governance-file-path <path>] [--governance-product <product>] \
[--nuget-sources-config-path <path>] [--exclude-configured-sources] [--feed-folder <name>] \
[--signing-certificate-path <path>] [--signing-certificate-password <password>] [--signing-timestamp-server <url>] \
[--author <text>] [--description <text>] [--release-notes <text>] [--project-url <url>] \
[--repository-url <url>] [--repository-commit <sha>] [--repository-branch <branch>] [--repository-type <type>] \
[--login-validity <minutes>]
The command honours the global options and returns the standard exit codes.
Arguments
<solutionPath>(required) — Path to a solution directory (containing a.uipxmanifest) or a.uisfile.[outputPath](optional) — Output directory where the.zippackage will be written. Required unless--dry-runis set — omitting it without--dry-runfails with a pointer to add one or the other.
Options
Core
| Long | Value | Default | Description |
|---|---|---|---|
-n, --name <name> | text | solution folder name (or .uis file's base name) | Package name. The packaged .zip is named <name>_<version>.zip. |
-v, --version <version> | text | 1.0.0 | Package version. Appears in the output filename and is the value passed to --package-version on deploy run. |
--dry-run | flag | off | Run the full pack pipeline (resource sync, runtime-dependency emission, packager option validation) against a disposable temporary copy and discard the output. Catches pack-time failures — a missing dependency, a broken resource binding, an unpackable project type — without producing a .zip or writing anything back into the solution. It does not inspect the produced package's contents, so it cannot guarantee the solution feed will accept the result. Makes [outputPath] optional. |
--login-validity <minutes> | minutes | 10 | Minimum minutes before token expiration to trigger a refresh. Only relevant when dependency resolution needs a tenant feed, or when the tenant's governance policy is checked. |
Dependency resolution
| Long | Value | Default | Description |
|---|---|---|---|
--nuget-sources-config-path <path> | path | — | Path to a NuGet sources configuration file for resolving project dependencies. |
--exclude-configured-sources | flag | off | Resolve dependencies only from tenant feeds and --nuget-sources-config-path. Drops the built-in UiPath and nuget.org feeds — a dependency not on those feeds fails to restore. |
--feed-folder <name> | name or path | — | Resolve dependencies from this Orchestrator folder's library feed instead of every tenant feed. Accepts a folder name or fully qualified path. |
Governance analysis
--skip-analyze, --ignored-rules, --governance-file-path, and --governance-product control the workflow analyzer that runs against every RPA project in the solution. The flags can be combined.
| Long | Value | Default | Description |
|---|---|---|---|
--skip-analyze | flag | off | Skip the workflow analyzer for every RPA project. Compilation and validation still run — only the analyzer rules are skipped. |
--ignored-rules <rules> | comma-separated rule IDs | — | Analyzer rule IDs whose findings are ignored for every RPA project, for example ST-USG-034,ST-MRD-002. Repeat the flag to add more. The rules still run, but their findings are not reported and do not fail the pack. Applies on top of --governance-file-path or the shipped rules. When the signed-in tenant publishes an AutomationOps policy, the list is not applied and a warning says so. |
--governance-file-path <path> | path | — | Analyze every RPA project against this local governance policy file instead of the analyzer rules shipped with the WorkflowCompiler. Accepts a policy exported from AutomationOps or a Studio rules-configuration file. When you are signed in, the tenant is asked first (about StudioWeb, unless --governance-product names another product). When the tenant publishes a policy of its own, that policy is used, this file is ignored with a warning, and the pack continues. When the tenant publishes no policy, when it cannot be asked, or when its policy service does not answer, this file is used. The file is read before the tenant is asked, so an unreadable or non-JSON file fails the pack in every case. |
--governance-product <product> | text | — | Analyze every RPA project against the governance policy published in AutomationOps for the signed-in tenant. The value is the product whose policy is downloaded — for example StudioWeb, Development, Business. |
An empty value for either governance flag (--governance-file-path "") is rejected as a mistake, not silently treated as "no flag."
Package signing
Signing an already-packed project's .nupkg requires the dotnet CLI on PATH.
| Long | Value | Default | Description |
|---|---|---|---|
--signing-certificate-path <path> | path | — | Path to a .pfx code-signing certificate. When set, every packed project .nupkg in the solution is signed before being bundled into the solution .zip. |
--signing-certificate-password <password> | text or env.VAR | — | Certificate password. Pass env.ENV_NAME to read from an environment variable instead of the shell history. |
--signing-timestamp-server <url> | URL | — | Timestamp server URL for the signature. |
Package metadata (source traceability)
These flags stamp traceability metadata into a package.metadata.json file at the archive root and into each project's .nuspec. None are required. When --author or --description is omitted, each member project keeps the value its own project file declares, and falls back to UiPath / Created by UiPath when it declares none.
| Long | Value | Default | Description |
|---|---|---|---|
--author <text> | text | each project's own author, else UiPath | Package author. When set, applies to every member project. |
--description <text> | text | each project's own description, else Created by UiPath | Package description. When set, applies to every member project. |
--release-notes <text> | text | — | Release notes for the package. |
--project-url <url> | URL | — | Automation Hub idea URL. |
--repository-url <url> | URL | — | Source repository URL. |
--repository-commit <sha> | text | — | Source repository commit hash. |
--repository-branch <branch> | text | — | Source repository branch. |
--repository-type <type> | text | git (when --repository-url is set) | Source repository type. Only recorded when --repository-url is also set. |
Examples
Minimal
uip solution pack ./my-solution ./dist
uip solution pack ./my-solution ./dist
Packs the solution at ./my-solution into ./dist/my-solution_1.0.0.zip (default version).
Common — pin name and version for a CI build
uip solution pack ./my-solution ./dist --name invoices --version 1.2.0
uip solution pack ./my-solution ./dist --name invoices --version 1.2.0
Writes ./dist/invoices_1.2.0.zip.
Validate without packing
uip solution pack ./my-solution --dry-run
uip solution pack ./my-solution --dry-run
Runs the full pack pipeline against a temporary directory and discards the output — useful as a pre-deploy gate in CI, since it catches resource-binding, variable-reference, and runtime-dependency errors without needing an outputPath.
Stamp source-traceability metadata
uip solution pack ./my-solution ./dist --version 1.2.0 \
--repository-url https://github.com/acme/repo \
--repository-commit abc123 \
--repository-branch main \
--release-notes "v1.2.0"
uip solution pack ./my-solution ./dist --version 1.2.0 \
--repository-url https://github.com/acme/repo \
--repository-commit abc123 \
--repository-branch main \
--release-notes "v1.2.0"
Sign packed projects
uip solution pack ./my-solution ./dist --version 1.2.0 \
--signing-certificate-path ./cert.pfx \
--signing-certificate-password env.UIPATH_SIGNING_CERTIFICATE_PASSWORD \
--signing-timestamp-server http://timestamp.digicert.com
uip solution pack ./my-solution ./dist --version 1.2.0 \
--signing-certificate-path ./cert.pfx \
--signing-certificate-password env.UIPATH_SIGNING_CERTIFICATE_PASSWORD \
--signing-timestamp-server http://timestamp.digicert.com
Skip the workflow analyzer
uip solution pack ./my-solution ./dist --version 1.2.0 --skip-analyze
uip solution pack ./my-solution ./dist --version 1.2.0 --skip-analyze
Compilation and validation still run — only the analyzer rules are skipped.
Analyze against a tenant governance policy
uip solution pack ./my-solution ./dist --version 1.2.0 --governance-product Development
uip solution pack ./my-solution ./dist --version 1.2.0 --governance-product Development
Ignore specific analyzer rules
uip solution pack ./my-solution ./dist --version 1.2.0 --ignored-rules ST-USG-034,ST-MRD-002
uip solution pack ./my-solution ./dist --version 1.2.0 --ignored-rules ST-USG-034,ST-MRD-002
The rules still run, but their findings do not fail the pack. The list is not applied when the tenant publishes an AutomationOps policy.
Scripting — capture the output path for the publish step
PKG=$(uip solution pack ./my-solution ./dist --version 1.2.0 --output-filter "Packages" --output plain)
uip solution publish "$PKG"
PKG=$(uip solution pack ./my-solution ./dist --version 1.2.0 --output-filter "Packages" --output plain)
uip solution publish "$PKG"
Data shape (--output json)
Real pack:
{
"Code": "SolutionPack",
"Data": {
"Package": "[email protected]",
"Packages": "./dist/my-solution_1.2.0.zip"
}
}
{
"Code": "SolutionPack",
"Data": {
"Package": "[email protected]",
"Packages": "./dist/my-solution_1.2.0.zip"
}
}
Package—<name>@<version>identifier for the packed solution.Packages— comma-separated list of.zippath(s) written to<outputPath>. Typically a single path.
Dry run (--dry-run):
{
"Code": "SolutionPack",
"Data": {
"Package": "[email protected]",
"DryRun": true,
"Status": "Valid"
}
}
{
"Code": "SolutionPack",
"Data": {
"Package": "[email protected]",
"DryRun": true,
"Status": "Valid"
}
}
When the pack fails and the packager reports per-project results, the failure envelope carries Data.Projects, one entry per member project:
| Field | Description |
|---|---|
Path | The project directory, relative to the solution directory, with forward slashes. |
Type | The project type. |
Result | Success or Failure. |
Message | The project's result message, when it has one. |
Findings | The project's findings. Each finding can carry Level, Source (Other, Analyzer, Validator, or Compiler), ErrorCode, RuleName, Description, FilePath, ActivityIdRef, and DocumentationLink. |
Data.Projects is omitted when the failure belongs to no project.
Project types
Pack hands each member project to the packager tool for its project type. Some project types have their own pack behavior:
| Project type | Pack behavior |
|---|---|
| Flow | The .flow file is checked against the Maestro designer's validation rules. A flow with errors fails the pack. Every issue, warnings included, is reported as a finding, with ActivityIdRef naming the node. |
| Business Rules | Packed as a .uirule archive named <rule-name>-<version>.uirule, holding the rule's .dmn files and an entry-points.json derived from them. |
| Data Fabric entities | Validated only: pack checks that every entity definition is intact and its schema is valid. The entity definition resources are the deployable payload, so no separate package is produced for the project. |
Failure modes
- Missing
outputPathwithout--dry-run. Fails with a pointer to provide an output directory or pass--dry-run. - Empty governance flag value. An empty value for
--governance-file-pathor--governance-productis rejected. - Unusable governance policy file. A
--governance-file-pathfile that cannot be read or is not JSON fails the pack. So does a file that holds only the inner policy of an AutomationOps export; pass the exported file as-is. - Member package ID collision. A member's package ID is composed as
<solution>.<project-type>.<member-folder>, capped at 100 characters, and must be unique across the solution. Spaces and dots collapse to a single dot, and IDs are compared case-insensitively. When two members compose the same ID, the pack fails withErrorCode: invalid_argument, naming the ID and the folders that produced it. The<solution>part is the.uipxfile's own name;--namerenames the archive only and does not change member IDs. Rename the member folder or the.uipx, then pack again. - Project failure. A project that fails compilation, validation, or analysis fails the pack.
Data.Projectsnames the project and its findings. - Output path inside a member project directory. Refused — anything written there would get packed into that project's own package on the next pack. Choose an output path outside the solution's project directories (for example
./outat the solution root, or a directory outside the solution entirely). - Unpackable project type. Names the project type and points at
uip tools search/uip tools install <tool>to add the packager tool that handles it (oruip updatefirst, if it's a newly added type).
Related commands
uip solution publish— uploads the packed.zipto the tenant solution feed.uip solution upload— alternative path that uploads the solution to Studio Web for interactive editing instead of packaging it for deployment.uip solution deploy run— deploys a published package to Orchestrator.
See also
- Your first pipeline — pack → publish → deploy run walkthrough.
uip solutionoverview.
- Synopsis
- Arguments
- Options
- Core
- Dependency resolution
- Governance analysis
- Package signing
- Package metadata (source traceability)
- Examples
- Minimal
- Common — pin name and version for a CI build
- Validate without packing
- Stamp source-traceability metadata
- Sign packed projects
- Skip the workflow analyzer
- Analyze against a tenant governance policy
- Ignore specific analyzer rules
- Scripting — capture the output path for the publish step
- Data shape (--output json)
- Project types
- Failure modes
- Related commands
- See also