# Packaging and publishing

> Functions are packaged as standard UiPath `.nupkg` packages and published to an Orchestrator feed. From there, a package is deployed as a process in an Orchestrator folder before it can be invoked.

Functions are packaged as standard UiPath `.nupkg` packages and published to an Orchestrator feed. From there, a package is deployed as a process in an Orchestrator folder before it can be invoked.

## Package

```bash
uipath pack
```

This produces a versioned `.nupkg` (for example, `my-function.1.0.0.nupkg`). Bump the version in `pyproject.toml` before packing a new release.

## Publish

```bash
uipath publish
```

You are prompted to select a package feed (for example, the Orchestrator Tenant Processes Feed). Publishing uploads the `.nupkg` to that feed — at this point it is a package on the feed, not yet a runnable process.

## Deploy

Before a function can be invoked, the published package must be deployed as a process in an Orchestrator folder — either manually in Orchestrator or through solution deployment. Once the process exists, the function becomes available to:

- A [Maestro Service Task](invoking-functions.md)
- The Orchestrator API
- Job triggers (scheduled, event-based)

## Versioning

- The package version comes from `pyproject.toml`.
- Publishing a new version adds it to the feed; update the process or Maestro Service Task binding to pick it up.
- The `.nupkg` is the same package format used by RPA — the same feed, upload, and version-management mechanics apply.

## Next steps

- [Invoke functions](invoking-functions.md) — wire the published function into a process.
