File: deploy-to-production.md | Updated: 11/15/2025
Hide navigation
Search
Ctrl K
Home Guides EAS Reference Learn
Archive Expo Snack Discord and Forums Newsletter
Copy page
Learn how to deploy to production with EAS Workflows.
Copy page
When you're ready to deliver changes to your users, you can build and submit to the app stores or you can send an over-the-air update. The following workflow detects if you need new builds, and if so, it sends them to the app stores. If new builds are not required, it will send an over-the-air update.


Expo Golden Workflow: Deploy your app to production with an automated workflow
Prerequisites
3 requirements
Set up EAS Build
To set up EAS Build, follow this guide:
EAS Build prerequisites
Get your project ready for EAS Build.
Set up EAS Submit
To set up EAS Submit, follow the Google Play Store and Apple App Store submissions guides:
Google Play Store CI/CD submission guide
Get your project ready for Google Play Store submissions.
Apple App Store CI/CD submission guide
Get your project ready for Apple App Store submissions.
Set up EAS Update
And finally, you'll need to set up EAS Update, which you can do with:
Terminal
Copy
- eas update:configure
The following workflow runs on each push to the main branch and performs the following:
.eas/workflows/deploy-to-production.yml
Copy
name: Deploy to production on: push: branches: ['main'] jobs: fingerprint: name: Fingerprint type: fingerprint environment: production get_android_build: name: Check for existing android build needs: [fingerprint] type: get-build params: fingerprint_hash: ${{ needs.fingerprint.outputs.android_fingerprint_hash }} profile: production get_ios_build: name: Check for existing ios build needs: [fingerprint] type: get-build params: fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }} profile: production build_android: name: Build Android needs: [get_android_build] if: ${{ !needs.get_android_build.outputs.build_id }} type: build params: platform: android profile: production build_ios: name: Build iOS needs: [get_ios_build] if: ${{ !needs.get_ios_build.outputs.build_id }} type: build params: platform: ios profile: production submit_android_build: name: Submit Android Build needs: [build_android] type: submit params: build_id: ${{ needs.build_android.outputs.build_id }} submit_ios_build: name: Submit iOS Build needs: [build_ios] type: submit params: build_id: ${{ needs.build_ios.outputs.build_id }} publish_android_update: name: Publish Android update needs: [get_android_build] if: ${{ needs.get_android_build.outputs.build_id }} type: update params: branch: production platform: android publish_ios_update: name: Publish iOS update needs: [get_ios_build] if: ${{ needs.get_ios_build.outputs.build_id }} type: update params: branch: production platform: ios
Show More