This page walks you through installing the SDK, scaffolding a project, and running your first Python function locally.
Prerequisites
- Python 3.10 or later.
- The
uipathCLI and SDK, installed withpip. - A UiPath account with access to Orchestrator (for publishing and invoking).
Install the SDK
pip install uipath
pip install uipath
Verify the installation:
uipath --version
uipath --version
Scaffold a project
Create a new function project:
uipath new my-function
uipath new my-function
This scaffolds the files you edit:
| File | Purpose |
|---|---|
main.py | Your function logic and the Input/Output models. Starts as a runnable example. |
pyproject.toml | Project metadata and dependencies. |
uipath.json | Declares the callable entry points. The scaffold registers main for you. |
Write your first function
Replace the scaffolded logic in main.py:
from pydantic.dataclasses import dataclass
@dataclass
class Input:
message: str = ""
@dataclass
class Output:
reply: str = ""
def main(input: Input) -> Output:
return Output(reply=f"Hello, {input.message}!")
from pydantic.dataclasses import dataclass
@dataclass
class Input:
message: str = ""
@dataclass
class Output:
reply: str = ""
def main(input: Input) -> Output:
return Output(reply=f"Hello, {input.message}!")
The scaffolded uipath.json already declares this entry point:
{
"functions": {
"main": "main.py:main"
}
}
{
"functions": {
"main": "main.py:main"
}
}
The key (main) is the entry-point name used in CLI commands; the value references the file and function. Update it only if you rename the function or add more entry points.
Generate the project schema
Once your Input and Output are defined, generate the schema and bindings:
uipath init
uipath init
This reads your code and uipath.json and generates:
| File | Purpose |
|---|---|
entry-points.json | Input/output JSON Schema derived from your models, used for variable binding. |
bindings.json | Resource binding manifest, created with an empty structure only when the file does not already exist. |
Re-run uipath init whenever you change your Input or Output models. It regenerates entry-points.json and never modifies bindings.json — resource bindings are maintained by hand. For what they do and how to declare them, see Resource bindings.
Run it locally
uipath run main '{"message": "world"}'
uipath run main '{"message": "world"}'
Local runs resolve platform resources through the entries in bindings.json, so you can test against real Orchestrator assets and buckets before publishing. The same entries are what let each resource be remapped when the package runs in another tenant.
Next steps
- Build Python functions — typed schemas, error handling, and multiple entry points.
- Resource bindings — declare the platform resources your function reaches.
- Package and publish — deploy to Orchestrator.