UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

uip function

Syntax and options for `uip function`, which builds, serves, runs, and publishes UiPath JS/TS and Python Functions.

uip function builds, serves, and publishes UiPath Functions — small JS/TS or Python handlers packaged and run on the UiPath platform. uip function is the canonical group name; uip functions (plural) is accepted as an alias.

Concepts​

  • This is a language dispatcher, not a native tool. Every verb except setup is a thin forwarder: the CLI detects your project's language (from uipath.json, package.json, or pyproject.toml in the current directory, or --language/-l on new) and routes the raw arguments to either an in-process JS/TS CLI (@uipath/coded-functions-js-cli) or a spawned Python CLI. Flags the wrapper does not declare are forwarded unchanged to the underlying CLI.
  • Language resolution matters for init and new. init is Python-only — for JS/TS, scaffold instead with new --empty. new auto-detects; when detection is inconclusive, it defaults to TypeScript with a logged warning, unless you pass --language js|ts|py/python.
  • setup verifies the toolchains. It checks Node.js ≥20 for JS/TS projects, and Python with the uipath package for Python projects. The Node.js check also runs automatically before new forwards to the JS/TS CLI. Python Functions commands fail with a ConfigError that points to uip function setup until Python is configured.
  • publish vs. push target different destinations: publish uploads the packed .nupkg to an Orchestrator feed; push syncs the project directly into a Studio Web project. Both accept --url/--org/--token (or the matching UIPATH_URL/UIPATH_ORGANIZATION_NAME/UIPATH_ACCESS_TOKEN env vars).
  • Solution auto-registration. A successful Python init auto-registers the project into a parent .uipx solution when one exists (same pattern as agent/case/flow init) — pass --skip-solution-registration to opt out. This reports via a separate FunctionsInitSolutionRegistration success envelope after the underlying Python CLI's own init output.

Synopsis​

uip function setup [--force]
uip function new [name] [--name <name>] [-l, --language ts|js|py] [--empty]
uip function init [--language py] [--skip-solution-registration]
uip function serve [--port <port>] [--runtime node|deno]
uip function run [name] [--input <json>] [--input-file <path>]
uip function pack
uip function push [--url <url>] [--project-id <id>] [--org <org>] [--token <token>]
uip function publish [--url <url>] [--org <org>] [--token <token>] [--feed-id <id>]
uip function runtime-install [--path <folder>]
uip function setup [--force]
uip function new [name] [--name <name>] [-l, --language ts|js|py] [--empty]
uip function init [--language py] [--skip-solution-registration]
uip function serve [--port <port>] [--runtime node|deno]
uip function run [name] [--input <json>] [--input-file <path>]
uip function pack
uip function push [--url <url>] [--project-id <id>] [--org <org>] [--token <token>]
uip function publish [--url <url>] [--org <org>] [--token <token>] [--feed-id <id>]
uip function runtime-install [--path <folder>]

uip function setup​

Verify the toolchains a Functions project needs: Node.js v20 or later for JS/TS, and Python with the uipath package for Python. A missing or outdated Node.js fails the command with a ConfigError. A missing Python configuration is reported but does not fail the command, so JS/TS-only machines are not blocked. The result is cached and shared with uip codedagent setup, so running either command configures Python for both.

Options​

LongValueDescription
--forceflagRe-run the verification even when a cached result exists. Default: false.

Example​

uip function setup --force
uip function setup --force

uip function new​

Scaffold a new Functions project, including a hello-world function by default.

Arguments​

NameRequiredPurpose
[name]noProject name / directory. Default my-functions. May also be passed as --name.

Options​

LongValueDescription
--name <name>stringAlternative to the positional argument.
-l, --language <lang>ts (default) | js | py/pythonProject language.
--emptyflagSkip the hello-world function — empty project. JS/TS only.

Examples​

uip function new my-fn --language ts
uip function new my-fn --language py
uip function new my-fn --language ts
uip function new my-fn --language py

Data shape (--output json)​

{ "Code": "NewComplete", "Data": { "Message": "Project created at ./my-fn" } }
{ "Code": "NewComplete", "Data": { "Message": "Project created at ./my-fn" } }

uip function init​

Python-only: discover entrypoints and (re)generate entry-points.json/bindings.json/project.uiproj. Must run before pack/push for a Python project. For JS/TS, use new --empty instead — init fails with an explicit "Python-only" error against a JS/TS project or an undetected language.

Options​

LongValueDescription
--language pyflag/valueForce Python language resolution when detection would otherwise be ambiguous.
--skip-solution-registrationflagDo not auto-register the project in a parent .uipx solution.

Example​

uip function init
uip function init

Data shape (--output json)​

{ "Code": "InitComplete", "Data": { "Message": "Project initialized." } }
{ "Code": "InitComplete", "Data": { "Message": "Project initialized." } }

Followed by a second success envelope reporting solution registration:

{
  "Code": "FunctionsInitSolutionRegistration",
  "Data": { "SolutionRegistration": { "Status": "Registered", "...": "..." } }
}
{
  "Code": "FunctionsInitSolutionRegistration",
  "Data": { "SolutionRegistration": { "Status": "Registered", "...": "..." } }
}

SolutionRegistration.Status is "NotInSolution" when no parent solution exists, or "OptedOut" when --skip-solution-registration was passed — always present, never omitted.

uip function serve​

Start the local function server with hot reload. JS/TS only.

Options​

LongValueDescription
--port <port>integerPort to listen on. Default 7070.
--runtime <runtime>node (default) | denoRuntime to serve under.

Example​

uip function serve
uip function serve

Data shape (--output json)​

{ "Code": "ServeStarted", "Data": { "Message": "Listening on http://localhost:7070" } }
{ "Code": "ServeStarted", "Data": { "Message": "Listening on http://localhost:7070" } }

uip function run​

Run one function once and print its result. The function name comes from your project's function list.

Arguments​

NameRequiredPurpose
[name]noName of the function to run.

Options​

LongValueDescription
--input <json>JSONInput payload. Default {}.
--input-file <path>pathPath to a JSON input file. On JS/TS projects, takes precedence over --input.

Examples​

# Python project: run the 'hello' function once with a JSON payload and read the result as JSON
uip function run hello --input '{"name":"Ada"}' --output json

# Python project: run a function with a payload kept in a file
uip function run hello --input-file ./payload.json --output json
# Python project: run the 'hello' function once with a JSON payload and read the result as JSON
uip function run hello --input '{"name":"Ada"}' --output json

# Python project: run a function with a payload kept in a file
uip function run hello --input-file ./payload.json --output json

Data shape (--output json)​

{ "Code": "RunComplete", "Data": { "message": "Hello, Ada!" } }
{ "Code": "RunComplete", "Data": { "message": "Hello, Ada!" } }

The structured result applies to Python projects when you pass --output json or --output yaml explicitly:

  • Data is the function's own output, with its field names kept exactly as the function declares them.
  • When the function returns a scalar, an array, or nothing, the value is placed under a single Output key.
  • Progress and the run's own logs go to stderr, so stdout carries only the envelope.
  • A failed run returns Result: "Failure" with ErrorCode: "unknown_error" and the run's exit code in Message; the run's own error is on stderr.

Without an explicit --output json/yaml, or with table or plain, run prints the underlying CLI's own output. On JS/TS projects, --output is not supported by run: the CLI prints a notice and the function's own output follows unchanged.

uip function pack​

Pack the project into a .nupkg for deployment. The project's lock file is always included in the package.

Example​

uip function pack
uip function pack

Data shape (--output json)​

{ "Code": "PackComplete", "Data": { "Message": "Package created: my-fn.0.0.1.nupkg" } }
{ "Code": "PackComplete", "Data": { "Message": "Package created: my-fn.0.0.1.nupkg" } }

uip function push​

Sync the project to Studio Web — generates entry points and uploads changed files.

Options​

LongValueRequiredDescription
--url <url>urlnoUiPath platform URL. Falls back to UIPATH_URL.
--project-id <id>GUIDconditionallyStudio Web project ID. Mandatory, but may come from UIPATH_PROJECT_ID instead of the flag.
--org <org>stringnoOrganization name. Falls back to UIPATH_ORGANIZATION_NAME.
--token <token>stringnoAccess token. Falls back to UIPATH_ACCESS_TOKEN.

Example​

uip function push --project-id 1f2a3b4c-0000-0000-0000-000000000001
uip function push --project-id 1f2a3b4c-0000-0000-0000-000000000001

Data shape (--output json)​

{ "Code": "PushComplete", "Data": { "Message": "Push complete." } }
{ "Code": "PushComplete", "Data": { "Message": "Push complete." } }

uip function publish​

Upload the latest .nupkg to an Orchestrator folder. Without --feed-id, prompts interactively for a feed (ESC to cancel) — pass --feed-id for CI use to skip the picker.

Options​

LongValueDescription
--url <url>urlUiPath platform URL. Falls back to UIPATH_URL.
--org <org>stringOrganization name. Falls back to UIPATH_ORGANIZATION_NAME.
--token <token>stringAccess token. Falls back to UIPATH_ACCESS_TOKEN.
--feed-id <id>GUIDFeed to publish to — skips the interactive picker.

Examples​

# Interactive feed picker
uip function publish

# CI use — skip the picker
uip function publish --feed-id 9b2c1d4e-0000-0000-0000-000000000001
# Interactive feed picker
uip function publish

# CI use — skip the picker
uip function publish --feed-id 9b2c1d4e-0000-0000-0000-000000000001

Data shape (--output json)​

{ "Code": "PublishComplete", "Data": { "Message": "Package published." } }
{ "Code": "PublishComplete", "Data": { "Message": "Package published." } }

uip function runtime-install​

Create a runner folder with its own package.json and install runtime dependencies into it. JS/TS only.

Options​

LongValueDescription
--path <folder>pathTarget folder to create and install runtime dependencies into.

Example​

uip function runtime-install --path .uipath/runner
uip function runtime-install --path .uipath/runner

Data shape (--output json)​

{ "Code": "RuntimeInstallComplete", "Data": { "Message": "Runtime installed at .uipath/runner" } }
{ "Code": "RuntimeInstallComplete", "Data": { "Message": "Runtime installed at .uipath/runner" } }

Error behavior​

  • init against a JS/TS project or an undetected language: Failure, Message: "'init' is not applicable to JS/TS projects." (or "'init' is Python-only."), with Instructions naming new --empty/--language.
  • new with no detectable language and no --language: defaults to TypeScript with a logged warning rather than failing.
  • No Functions project detected for any other verb: Failure, Message: "No Functions project detected in this directory.", with Instructions to run from a directory containing uipath.json/package.json/pyproject.toml, or pass --language explicitly.
  • Node.js missing or below v20 (JS/TS path): ConfigError naming the required version and a link to install it. This check runs in setup and automatically before new forwards to the JS/TS CLI.
  • Python or the uipath package not configured (Python path): ConfigError with Instructions to run uip function setup.

See also​

Was this page helpful?

Connect

Need help? Support(opens in new window)

Want to learn? UiPath Academy(opens in new window)

Have questions? UiPath Forum(opens in new window)

Stay updated