- 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 model-hub
- add-test-data-entity
- add-test-data-queue
- add-test-data-variation
- analyze
- build
- create-project
- diff
- find-activities
- get-analyzer-rules
- get-default-activity-xaml
- get-errors
- get-manual-test-cases
- get-manual-test-steps
- get-library-object-repository
- get-object-repository
- get-versions
- get-workflow-example
- indicate-application
- indicate-element
- inspect-package
- install-data-fabric-entities
- install-or-update-packages
- list-data-fabric-entities
- list-instances
- list-workflow-examples
- pack
- publish
- remote
- restore
- run, debug & execution
- run-file
- search-templates
- start-studio
- stop-execution
- tm
- uia
- uip tasks
- uip traces
- uip traces feedback
- Migration
- Reference & support
uip solution upload
Syntax and options for `uip solution upload`, which bundles a local solution and sends it to Studio Web for browser-based editing.
uip solution upload uploads a local solution to UiPath Studio Web for browser-based editing. It bundles the solution into an internal .uis archive, sends it to Studio Web, and (on success) prints a URL you can open directly in the designer.
Unlike uip solution pack + uip solution publish, which produce a deployable .zip for Orchestrator, upload targets the interactive Studio Web authoring surface. Use this when you want to continue editing a solution collaboratively in the browser.
Overwrite or import
Before uploading, the command checks whether Studio Web holds a solution with the SolutionId from the .uipx (or from the .uis archive):
- The solution exists. It is overwritten in place. The replaced contents are first recorded as a restorable version, unless you pass
--no-snapshot.Data.ActionisOverwritten. - The solution does not exist. The upload is imported as a new solution, and the ID that Studio Web assigns is written back into the local
.uipxso the next upload overwrites the same solution.Data.ActionisImported.
--force skips the existence check and overwrites directly. If Studio Web has no solution with that SolutionId, the command fails with not_found and uploads nothing; re-run without --force to import as new.
Synopsis
uip solution upload <solutionPath> [--force] [--no-snapshot] [--login-validity <minutes>]
uip solution upload <solutionPath> [--force] [--no-snapshot] [--login-validity <minutes>]
The command honours the global options and returns the standard exit codes.
Arguments
<solutionPath>(required) — One of:- A solution directory containing a
.uipxmanifest (most common). - A
.uipxfile (the command resolves the directory containing it). - A
.uisfile (a pre-bundled solution archive; uploaded as-is for backward compatibility).
- A solution directory containing a
Options
--force— Skip the existence check and overwrite the Studio Web solution named by the bundledSolutionIddirectly. An upload overwrites an existing cloud solution without it. Fails if that solution does not exist. No effect when noSolutionIdis bundled (a.uisarchive without one): the upload imports as new.--no-snapshot— Do not record a restorable pre-overwrite version of the cloud solution before replacing its contents. Changes made in Studio Web since the last upload are lost; local files are unaffected. No effect when the upload imports a new solution.--login-validity <minutes>— Minimum minutes before token expiration to trigger a refresh. Defaults to10.
Examples
Minimal
uip solution upload ./my-solution
uip solution upload ./my-solution
Upload a specific .uipx
uip solution upload ./workspace/my-solution/my-solution.uipx
uip solution upload ./workspace/my-solution/my-solution.uipx
Overwrite without a restorable snapshot
uip solution upload ./my-solution --no-snapshot
uip solution upload ./my-solution --no-snapshot
Scripting — open the returned designer URL
URL=$(uip solution upload ./my-solution --output-filter "DesignerUrl" --output plain)
open "$URL" # macOS
URL=$(uip solution upload ./my-solution --output-filter "DesignerUrl" --output plain)
open "$URL" # macOS
Data shape (--output json)
Studio Web has no solution with the bundled SolutionId, so it's imported as new and the local .uipx is updated with the assigned id:
{
"Code": "SolutionUpload",
"Data": {
"Status": "Uploaded successfully",
"Action": "Imported",
"SolutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"DesignerUrl": "https://cloud.uipath.com/myorg/mytenant/studio_/designer/p1?solutionId=a1b2c3d4-0000-0000-0000-000000000001",
"LocalSolutionIdUpdated": {
"Path": "/workspace/my-solution/my-solution.uipx",
"From": "00000000-0000-0000-0000-0000000000ff",
"To": "a1b2c3d4-0000-0000-0000-000000000001"
},
"Response": { }
}
}
{
"Code": "SolutionUpload",
"Data": {
"Status": "Uploaded successfully",
"Action": "Imported",
"SolutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"DesignerUrl": "https://cloud.uipath.com/myorg/mytenant/studio_/designer/p1?solutionId=a1b2c3d4-0000-0000-0000-000000000001",
"LocalSolutionIdUpdated": {
"Path": "/workspace/my-solution/my-solution.uipx",
"From": "00000000-0000-0000-0000-0000000000ff",
"To": "a1b2c3d4-0000-0000-0000-000000000001"
},
"Response": { }
}
}
The solution already exists on Studio Web, so it's overwritten in place, with the replaced contents recorded first as a restorable version:
{
"Code": "SolutionUpload",
"Data": {
"Status": "Uploaded successfully",
"Action": "Overwritten",
"SolutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"DesignerUrl": "https://cloud.uipath.com/myorg/mytenant/studio_/designer/p1?solutionId=a1b2c3d4-0000-0000-0000-000000000001",
"SnapshotCreated": true,
"Response": { }
}
}
{
"Code": "SolutionUpload",
"Data": {
"Status": "Uploaded successfully",
"Action": "Overwritten",
"SolutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"DesignerUrl": "https://cloud.uipath.com/myorg/mytenant/studio_/designer/p1?solutionId=a1b2c3d4-0000-0000-0000-000000000001",
"SnapshotCreated": true,
"Response": { }
}
}
Action—"Imported"on a first upload,"Overwritten"when a solution with thatSolutionIdalready existed on Studio Web.SolutionId— the identity Studio Web assigned (on first upload) or matched (on overwrite). Also written back into the local.uipxso the nextuploadupdates the same solution.DesignerUrl— ready-to-open URL for the first project in the solution, pre-scoped to the solution.null/absent when Studio Web does not return a project ID.LocalSolutionIdUpdated— present only when a freshSolutionIdwas written back into the local.uipx(Path,From,To). Absent when overwriting in place, or when the upload source had no prior id to rewrite.SnapshotCreated— present andtrueonly on an overwrite that recorded a restorable pre-overwrite version (that is, without--no-snapshot). Absent on a fresh import and with--no-snapshot.Response— raw Studio Web response payload. Useful for debugging; not part of a stable contract.
Side effects
- Resource preparation. For a solution directory or
.uipxfile,uploadprepares the solution's resources the same way asuip solution pack: it syncs each project'sbindings_v2.jsoninto the solution's resource declarations, asuip solution resources refreshdoes, and writes what each project contributes onto its resources. An error that a project's tool reports fails the upload. A.uisfile is uploaded as-is, without this step. - SolutionId write-back. On an import, the returned solution ID replaces (or populates) the
SolutionIdfield in the local.uipx.
Files left out of the bundle
When bundling a solution directory, upload always leaves out .venv, node_modules, __pycache__, .git, .local, and .flow-sdk folders, and dotenv files (.env, .env.local, .env.production, and similar).
To leave out more files, add a .uipignore file at the solution root, in a project folder, or both. The syntax is gitignore: one pattern per line, # for comments, globs such as *.log, anchored paths such as /dist, a trailing / for directories only, and ! to re-include. Patterns in a project's .uipignore match relative to that project folder and apply only to it. An unreadable .uipignore is skipped with a warning.
A pattern that would leave out the manifest of a project listed in the .uipx (for example *.uiproj, or the project's folder name) is refused: the command fails with invalid_argument and names the project. Remove or narrow the pattern, or remove the project from the solution with uip solution projects remove, then upload again.
Failure modes
- A project uses a
project.jsonmanifest that Studio Web does not accept. Refused withinvalid_argument. Convert the listed project to aproject.uiprojmanifest before uploading.uip solution packanduip solution publishacceptproject.json. - A
.uipignorepattern drops a listed project. Refused withinvalid_argument, as described in Files left out of the bundle. --forcewith aSolutionIdthat Studio Web does not hold. Refused withnot_found; nothing is uploaded.
Related commands
uip solution pack+uip solution publish— deployment pipeline alternative toupload.uip solution delete— remove a Studio Web solution by itsSolutionId.uip solution init— scaffold a solution before uploading.
See also
- Authentication —
uploadrequires an active session. uip solutionoverview.