> ## Documentation Index
> Fetch the complete documentation index at: https://aspect.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Selective delivery on Aspect Cloud

> aspect delivery keeps its state in Aspect Cloud, so a release job on any CI pushes only the targets whose output digests changed.

[← Shipped](https://aspect.build/shipped)

# Selective delivery on Aspect Cloud

***

![Selective delivery pushes only the targets whose outputs changed](https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/illustrations/aspect-delivery.svg?fit=max\&auto=format\&n=x1L7Iep716jCyJVo\&q=85\&s=cf41f5d900ae4230bf53b295c1693765)

A README edit gets a new commit SHA and leaves every binary byte for byte the same. A deploy keyed on the SHA pushes all of them anyway. [Selective delivery](https://aspect.build/platform/selective-delivery) keys on the content digest of each target's outputs, so that commit pushes nothing.

It now runs on Aspect Cloud. [`aspect delivery`](https://aspect.build/docs/cli/tasks/delivery) keeps its delivery state in Aspect's delivery API, authenticated with the same `ASPECT_API_TOKEN` as your cache, so it works from any CI with nothing extra to run.

```yaml .github/workflows/delivery.yaml theme={null}
on:
  push:
    branches: [main]

jobs:
  delivery:
    runs-on: ubuntu-latest
    concurrency:
      group: delivery
      cancel-in-progress: false
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v6
      - uses: aspect-build/setup-aspect@ebca96eb49ef58c00d4226de8bd3a0813507dd87 # v2026.38.3
        with:
          aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }}
      - run: >
          aspect delivery
          --task:name delivery
          --query='kind(container_push, //services/...)'
```

## What a run does

* **Compares digests** with each target's last delivery. With Build without the Bytes it reads hashes from the cache and downloads no artifacts.
* **Stamps only the push.** Change detection runs unstamped, then the changed targets rebuild with `--stamp`, so embedding the commit SHA doesn't make every target look new.
* **Pushes in parallel** to wherever your push targets go: a container registry, a bucket, anything a Bazel target can run.
* **Writes a delivery manifest** of each target's outcome as a CI artifact, which you can [extend with AXL hooks](https://aspect.build/docs/cli/guides/delivery-manifest.md).

Run it with `--dry-run` first to see which targets would deliver. It needs Aspect CLI v2026.45.15 or later.

The [selective delivery docs](https://aspect.build/docs/aspect-workflows/platform/features/selective-delivery.md) cover configuration. New to Aspect Cloud? [Get started for free](https://signup.aspect.build/).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.