> For the complete documentation index, see [llms.txt](https://docs.unitlab.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.unitlab.ai/api-sdk-cli/clis/cli-releases.md).

# CLI: releases

Create, inspect, list, and download versioned release outputs.

Create an annotation release, wait for preparation, then download labels and source files separately. The commands below use Unitlab CLI 3.1.3 and [configured credentials](https://docs.unitlab.ai/api-sdk-cli/get-started/authentication-and-configuration).

![Project release configuration dialog](https://292810646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGjVLUz4wthGkGlRKM6rM%2Fuploads%2FHLzEBrP9ddsrTUbQ4ovz%2Frelease-create-modal.png?alt=media\&token=70baced4-91a7-4c40-bf7b-417177d75b90)

*The CLI uses the same project, data-type, format and split choices as the release dialog.*

## Export a verified image project

{% stepper %}
{% step %}

### Prepare the project

Confirm that all eligible images in your delivery project passed the required reviews. Replace `PROJECT_ID` with its UUID. The CLI example exports the project's image data; it does not select a Batch Queue or add an approved-only filter.
{% endstep %}

{% step %}

### Create the release and wait

```bash
unitlab release create PROJECT_ID \
  --format COCO \
  --data-type image \
  --splits train=80,validation=20 \
  --wait --json
```

Save the returned release `id` and `version`. `--wait` waits for preparation; without it, CLI 3.1.3 returns the pending release by default. Replace `RELEASE_ID` in later commands with that returned ID.
{% endstep %}

{% step %}

### Inspect or resume the same release

```bash
unitlab release detail RELEASE_ID --json
unitlab release wait RELEASE_ID --json
```

Use `wait` after an interrupted wait or a create without `--wait`. Inspect a failure before trying another create. The `ready` state means export preparation finished, not that every label passed review.
{% endstep %}

{% step %}

### Download annotations and source media

```bash
unitlab release download RELEASE_ID \
  --download-type annotation --dest ./exports/annotations

unitlab release download RELEASE_ID \
  --download-type files --dest ./exports/source-files
```

Each download command prints its local result path. With no `--split-type`, the annotation command requests all populated splits. To download one populated split instead:

```bash
unitlab release download RELEASE_ID \
  --download-type annotation --split-type train --dest ./exports/train
```

{% endstep %}

{% step %}

### Validate the delivery

Inspect the artifact, reconcile represented item IDs and counts, and check sample labels and split membership. Source images are separate from the annotation export; a COCO or YOLO export alone is not a prepared source-image directory. Keep the release ID and version with the downloaded output.
{% endstep %}
{% endstepper %}

To browse releases later:

```bash
unitlab release list --json
```

## Reviewed-only delivery

The CLI has no approved-only filter. A Release can include eligible labels that have not passed review. Confirm that every item in the delivery Project passed the required Review stage and keep it unchanged while the snapshot is prepared.

The CLI `release create` command does not expose Batch Queue selection. Use the [Python SDK](/api-sdk-cli/sdks/create-and-download-releases.md) or [HTTP API](/api-sdk-cli/apis/releases-api.md) for `upload_sessions` scope. That scope still needs independent review checks.

## S3 delivery

`--dest` is a local directory, not an S3 URI. Cloud-backed projects can store generated exports in a saved source cloud connection, but the CLI does not let you choose a target bucket or object key. For a different bucket, download locally and transfer the file using your AWS tools. See [Cloud storage](/api-sdk-cli/sdks/cloud-storage.md).

Confirm the created release’s version, item count, data type, and formats before passing its path to training or evaluation. Do not assume download completion validates downstream schema compatibility.

## Interrupted or failed exports

Keep the returned release ID after a timeout and inspect it with `release detail` or `release wait`. A timeout does not cancel the server job. If preparation failed, inspect the error and correct its cause before creating a replacement. A second create can conflict with an export still being prepared.

***

> **Related Unitlab capability guides:** [multimodal data curation](https://unitlab.ai/en/data-curation)
