New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

@uipath/solution-tool

Package Overview
Dependencies
Maintainers
26
Versions
199
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
This package has malicious versions linked to the ongoing "Mini Shai-Hulud" supply chain attack.

Affected versions:

1.0.1
View campaign page

@uipath/solution-tool

Create, pack, publish, and deploy UiPath Automation Solutions.

latest
Source
npmnpm
Version
1.204.0
Version published
Weekly downloads
4.3K
-69.27%
Maintainers
26
Weekly downloads
 
Created
Source

Solution Tool

uip tool for managing UiPath Automation Solutions.

Commands

CommandDescription
packPack a UiPath solution
publishPublish solution package
newCreate a new solution
uploadUpload a solution package
deploy runDeploy solution to environment
deploy statusCheck a deployment by name, deployment key, or pipeline deployment ID
deploy activateActivate deployed solution
deploy uninstallRemove solution
deploy listList deployments
deploy config get/set/link/unlinkManage deployment configuration
project add/import/removeManage projects within a solution
packages list/deleteManage 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>   # or a deployment key / pipeline deployment ID
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.

Keywords

cli-tool

FAQs

Package last updated on 19 Oct 2026

Related posts