After you set up your [app configuration](/docs/apps/build/cli-for-apps/app-configuration) or create one or more [app extensions](/docs/apps/build/app-extensions), you can deploy these components together and release a new app version to users. An app version is a snapshot of your app configuration and all extensions. ## Deployment workflow Your app configuration and all extensions, including extensions created in the Partner Dashboard, are versioned together as a single [app version](/docs/apps/launch/deployment/app-versions). When you run the [`deploy` command](/docs/api/shopify-cli/app/app-deploy) using [Shopify CLI](/docs/api/shopify-cli), an app version is created and released. You can revert to a previous app version at any time. You can also create an app version from the Partner Dashboard. Releasing an app version replaces the current active version that's served to stores that have your app installed. It might take several minutes for app users to be upgraded to the new version. ![A diagram of the simplified deployment model. When the deploy command is run, an app version containing app configuration, CLI-managed extensions, and dashboard-managed extensions is created and released.](/assets/apps/deployment/simplified-deployment-model-with-config.png) > Tip: > If you want to deploy app configuration and extensions to Shopify regularly, then you can [integrate Shopify CLI into your CI/CD pipeline](/docs/apps/launch/deployment/deploy-in-ci-cd-pipeline) to programmatically deploy your app components using the [`deploy` command](/docs/api/shopify-cli/app/app-deploy). ## How app versions are created The contents of your app version are different depending where you create it. For details about creating and managing app versions, refer to [Deploy and release app versions](/docs/apps/launch/deployment/deploy-app-versions). | Tool | App version contents | | --- | --- | | Shopify CLI | An app version created using Shopify CLI contains the following:
Before versioned app configuration | After versioned app configuration |
---|---|
Changes to app configuration go live immediately. | All changes to app configuration are versioned and go live when the store is upgraded to the new app version. |
When you run the Shopify CLI config push command, your local app configuration is pushed to your app, independently from app extensions. |
The config push command is not supported. Instead, the deploy command includes your local app configuration and all extensions in the new app version. Learn how to Migrate from config push. |
Before simplified deployment | After simplified deployment | Recommendation |
---|---|---|
Dashboard-managed extensions are released independently, and aren't impacted by other extension releases. | When anyone creates and releases a new app version from the CLI or Partner Dashboard, the saved states of dashboard-managed extensions are released. | Make sure that your extensions in the Partner Dashboard are in a releasable state. For extra control, we've added a --no-release flag on the deploy command. You can use this command to check your dashboard-managed extensions before releasing the app version through the Partner Dashboard. |
When you run the Shopify CLI deploy command, all local copies of CLI-managed extensions are added as drafts in the Partner Dashboard. You can then release them individually from the Partner Dashboard. |
When you run the Shopify CLI deploy command, all local copies of CLI-managed extensions are deployed and released. |
Use source control to ensure that the extensions in your local project are up to date and ready to be released. |
All extensions are released individually from the Partner Dashboard. | When you create and release an app version in the Partner Dashboard, only changes to dashboard-managed extensions are released. CLI-managed extensions remain unchanged from the active app version. | If you need to release changes to both dashboard-managed extensions and CLI-managed extensions at the same time, then save the changes to dashboard-managed extensions, and then run the deploy command using Shopify CLI. |
Extensions are deployed independently, so they don't all need to be present in your environment at deployment time. | Extensions that aren't present in the environment where you're deploying from aren't included in your app version. | If you manage app extensions using multiple repositories, then consider one of the following options:
|
Before simplified deployment | After simplified deployment | Recommendation |
---|---|---|
You need to run the |
The dev command builds these extensions and pushes drafts to Shopify. |
Run the dev command to test your extension in a development store. The dev command enables development store preview while dev mode is running. |
Before simplified deployment | After simplified deployment | Recommendation |
---|---|---|
Functions are deleted through the Partner Dashboard. | Functions that aren't present in the environment where you're deploying are removed in your next app version on deploy. Associated function owners are deleted when the version is activated in installed stores. | Use one of the previously described options for managing app extensions from your app source. |