---
title: Submit a Build to a Store
description: Submit a native build to TestFlight, Google Play, Huawei AppGallery, or Firebase App Distribution with Capawesome Cloud, from the CLI or the Console.
---

# Submit a Build

Submitting a build sends a finished [native build](../native-builds/index.md) straight to App Store Connect (TestFlight and the App Store), Google Play, Huawei AppGallery, or Firebase App Distribution — no manual uploads through Xcode or a web console. Under the hood, each submission creates a **deployment** to a [destination](destinations/index.md), so you can submit any build with a single command or click.

## Prerequisites

Before you can submit, you need:

- A successful [native build](../native-builds/builds.md) for the platform you're submitting (a signed build matching the store's requirements).
- A configured [destination](destinations/index.md) — the store credentials and settings the build is submitted to. See [Getting Started](setup.md) to set one up.

## Submit

=== "CLI"

    Use the [`apps:deployments:create`](../cli/commands.md#appsdeploymentscreate) command, identifying the build by its number (or ID) and the destination to submit to:

    ```bash
    npx @capawesome/cli apps:deployments:create --build-number 42 --destination my-destination
    ```

    The CLI prompts for the build and destination if you don't pass them. Add `--detached` to return immediately instead of waiting for the submission to finish — useful in scripts and CI.

=== "Console"

    Open the [Deployments](https://console.cloud.capawesome.io/apps/_/deployments){:target="_blank"} page, click **Create deployment**, select the build to submit and the destination, then confirm.

To tell your testers and users what changed, add [release notes](release-notes.md) to the submission.

## After submitting

What happens next depends on the store:

- **App Store Connect** — the build is uploaded to TestFlight. Once App Store Connect finishes processing it (typically 10 to 30 minutes), it becomes available to internal TestFlight groups with automatic distribution enabled and is ready to promote to an App Store release; other internal groups need it assigned manually in App Store Connect. External testers only receive the build through the destination's [beta groups](submit-for-app-review.md#distribute-to-beta-groups), and the destination can also [submit it for App Review](submit-for-app-review.md).
- **Google Play** — the build is published to the destination's configured track: **Internal**, **Alpha**, **Beta**, or **Production**.
- **Huawei AppGallery** — the build is uploaded to AppGallery Connect. With the release status **Completed**, the version is also submitted for review.
- **Firebase App Distribution** — the build is uploaded to Firebase and distributed to the destination's tester groups, if any.

An Android build can contain more than one artifact, for example a phone app and a Wear OS app. Google Play receives all of them, mobile first, each to the track of its form factor (`wear:<track>`, `tv:<track>`, `automotive:<track>`). Capawesome Cloud validates every artifact against Google Play before it publishes the first one, so a missing track fails the submission before the phone app is released. Huawei AppGallery and Firebase App Distribution receive only the phone app. See [Build for Wear OS, Android TV and Automotive](../native-builds/form-factors.md).

Keep in mind that the stores run their own processing and review after Capawesome Cloud hands off the build, so a successful deployment means the build was *submitted* — not yet that it's live.

## Track the submission

=== "CLI"

    Follow a deployment's status or stream its logs:

    ```bash
    npx @capawesome/cli apps:deployments:list
    npx @capawesome/cli apps:deployments:logs
    ```

    Add `--json` to `apps:deployments:get` or `apps:deployments:list` for machine-readable output, including timing and the related job — handy for debugging a failed submission in CI.

=== "Console"

    Watch the deployment's status update live on the [Deployments](https://console.cloud.capawesome.io/apps/_/deployments){:target="_blank"} page, and open it to read the logs.

If a submission is still running and you need to stop it, cancel it with `apps:deployments:cancel` or from its detail page in the Console.

## Next steps

- [Add release notes](release-notes.md) — tell testers and users what changed.
- [Submit for App Review](submit-for-app-review.md) — distribute iOS builds to beta groups and submit them to the App Store.
- [Submit automatically after a build](submit-automatically.md) — skip this step on every release.
- [Destinations](destinations/index.md) — configure the credentials and settings for each store.
- [Troubleshooting](troubleshooting.md) — fix a failed submission.
