Solution Tool
uip tool for managing UiPath Automation Solutions.
Commands
pack | Pack a UiPath solution |
publish | Publish solution package |
new | Create a new solution |
upload | Upload a solution package |
deploy run | Deploy solution to environment |
deploy status | Check a deployment by name, deployment key, or pipeline deployment ID |
deploy activate | Activate deployed solution |
deploy uninstall | Remove solution |
deploy list | List deployments |
deploy config get/set/link/unlink | Manage deployment configuration |
project add/import/remove | Manage projects within a solution |
packages list/delete | Manage solution packages |
Examples
uip solution pack <solutionPath>
uip solution publish <packagePath>
uip solution init --name MySolution
uip solution upload <packagePath>
uip solution deploy run --solution-name MySolution
uip solution deploy status <deployment-name>
uip solution projects add ./my-solution/my-project ./my-solution/my-solution.uipx
Deploying to Personal Workspace
uip solution deploy run accepts --personal-workspace as an alternative to
--parent-folder-path / --parent-folder-key. When set, the CLI calls
Orchestrator's GetPersonalWorkspace endpoint once to look up the current
user's workspace name, then uses that as the deploy target — matching
StudioWeb's "Publish to Personal Workspace" UX.
uip solution deploy run \
--name my-deployment \
--package-name my-package \
--package-version 1.0.0 \
--folder-name MySolution \
--personal-workspace
The three target flags (--parent-folder-path, --parent-folder-key,
--personal-workspace) are mutually exclusive. The lookup uses whichever
auth context is active — uip login, UIPATH_CLI_ENABLE_ENV_AUTH, or
UIPATH_CLI_ENFORCE_ROBOT_AUTH — so the same command works in standalone
terminals, CI pipelines, and Studio Desktop-spawned invocations. Service
principals or robot accounts without a Personal Workspace produce a clear
"not configured" error.
Excluding directories from the bundle
uip solution pack and uip solution upload skip developer-local
directories and credential files that don't belong in a published
solution. The defaults are always applied.
Directories (matched by exact name at any depth):
.venv — Python virtualenvs (per-agent under <solution>/<agent>/.venv).
node_modules — Node dependency caches.
__pycache__ — Python bytecode caches.
.git — VCS metadata.
.local — Studio's per-project NuGet restore cache; Studio Web restores
its own packages on import.
.flow-sdk — the Maestro builder SDK's authoring work directory; Studio
Web gets the compiled .flow beside it.
Files (matched by name pattern at any depth):
.env, .env.local, .env.production, etc. (any file whose name is
.env or starts with .env.) — dotenv credential files. They commonly
hold API keys, database passwords, and OAuth client secrets, so they
are never shipped in the bundle. Lookalikes such as .envrc,
.environment, and myenv.txt are kept.
To leave more out of the .uis bundle that uip solution upload sends to
Studio Web, add a .uipignore file at the solution root (next to the
.uipx file). It uses .gitignore syntax: a bare name (dist) matches a
file or directory of that name at any depth, a trailing / matches
directories only, a leading / or a / in the middle anchors the pattern
to the folder holding the .uipignore, * / ** are globs, and !
re-includes something an earlier pattern excluded. A line starting with #
is a comment; a # anywhere else is part of the pattern, so keep comments
on their own line. Matching ignores case, so Dist also excludes dist/.
The built-in defaults above always apply and cannot be re-included. A
pattern that would drop a project the .uipx lists — its folder name, or
*.uiproj — is refused with an error, since the archive would still
reference the project; take the project out with uip solution projects remove instead. uip solution pack does not read this file.
Earlier CLI versions accepted only bare directory names in .uipignore and
allowed a trailing # comment after a name. Bare names keep working; a
trailing comment is now part of the pattern, so move it to its own line.
Example .uipignore:
# project-specific build artifacts
dist
coverage/
# logs anywhere, except one we want to keep
*.log
!important.log
# a folder inside one project, relative to the solution root
MyAgent/generated/
A .uipignore may also be placed at a project root (next to that
project's project.uiproj). Its patterns are matched relative to that
project's root, apply to that project only, and are added on top of the
solution-root .uipignore and the built-in defaults. Use this when an
exclude should apply to one project but not its siblings (a solution-root
entry, by contrast, applies to every project unless it names a path). A
project file can add excludes but cannot re-include (!) something the
solution-root file already excluded.
uip codedapp push reads the same .uipignore file (plus the app's
.gitignore), so one file controls both commands. Its older
.uipathignore is still read but deprecated — rename it to .uipignore.
The bundler logs which additional excludes are being applied at upload
time so the effective set is visible in CI logs.