Back to Expo

Introduction to EAS Workflows

docs/pages/eas/workflows/introduction.mdx

latest9.3 KB
Original Source

import { Dataflow03Icon } from '@expo/styleguide-icons/outline/Dataflow03Icon';

import { BoxLink } from '/ui/components/BoxLink'; import { Collapsible } from '/ui/components/Collapsible'; import { YesIcon, NoIcon } from '/ui/components/DocIcons'; import { DownloadSlide } from '/ui/components/DownloadSlide'; import { FAQ } from '/ui/components/FAQ'; import { Terminal } from '/ui/components/Snippet'; import { VideoBoxLink } from '~/ui/components/VideoBoxLink';

EAS Workflows is a CI/CD service from EAS (Expo Application Services) that lets teams automate repeated tasks such as building Android and iOS binaries, publishing over-the-air updates, submitting to app stores, running E2E tests with Maestro, and deploying web apps to EAS Hosting.

EAS Workflows run in managed cloud environments with pre-packaged job types designed specifically for mobile app development. When your EAS project is linked to GitHub, teams can trigger workflows from GitHub events (push, pull request, labels) or schedules (cron), or run them manually via the EAS CLI.

<VideoBoxLink videoId="OJ2u9tQCpr4" title="Watch: Get Started with EAS Workflows" description="Learn how to automate some of the most common processes that every app development team must tackle: creating development builds, publishing preview updates, and deploying to production." />

Quick start

info The eas commands below require EAS CLI. See How to install EAS CLI for more information.

Workflows are defined as YAML files in the .eas/workflows/ directory at the root of your project. Each file specifies a name, optional triggers (on), and one or more jobs that run in the cloud. You can run a workflow with EAS CLI with the following command:

<Terminal cmd={['$ eas workflow:run .eas/workflows/your-workflow.yml']} />

Key features

  • Pre-packaged for React Native/Expo: Comes with ready-to-use job types (build, submit, update, maestro, deploy, and more) that abstract away implementation complexity
  • No infrastructure to manage: Runs on EAS with macOS and Linux workers, so you don't need to maintain CI servers or configure Android Studio/Xcode
  • Unified artifact management: All build artifacts, updates, and logs appear on EAS dashboard
  • GitHub integration: Trigger workflows automatically on push, pull request, or label events with branch and path filtering
  • Faster iteration: Combine Fingerprint, Get Build, and Update jobs to avoid redundant native builds and publish OTA (over-the-air) updates when possible
  • E2E testing built-in: Run Maestro tests on Android emulators and iOS simulators directly in workflows
  • Slack notifications: Send notifications to Slack channels when workflows run successfully or fail
  • Repack: Reuse an existing build's metadata and JavaScript bundle to create a compatible build faster

Workflow trigger types

Push workflows

Run when commits are pushed to matching branches or tags. Supports branch, tag, and path filtering with glob patterns.

Pull request workflows

Run when pull requests are opened, updated, or labeled. Useful for preview builds and automated testing before merge.

Scheduled workflows

Run on a cron schedule (for example, nightly builds or weekly regression tests). Scheduled workflows run on the default branch only.

Manual workflows

Run on-demand using eas workflow:run command. Supports parameterized inputs for flexible execution.

When to use EAS Workflows

ScenarioRecommendation
Automate Android and iOS builds for your Expo and React Native apps<YesIcon />
Submit builds to App Store and Google Play automatically<YesIcon />
Publish over-the-air updates on every commit or merge<YesIcon />
Run E2E tests with Maestro as part of CI<YesIcon />
Trigger builds and updates from GitHub push or pull request events<YesIcon />
Deploy web apps to EAS Hosting<YesIcon />
Use fingerprint-based logic to skip redundant native builds<YesIcon />
CI/CD without managing your own infrastructure or macOS machines<YesIcon />
Highly customized pipelines with non-EAS services (such as Docker, custom runners)<NoIcon />
Matrix builds with multiple configuration variations in parallel<NoIcon />
CI/CD for non-React Native projects<NoIcon />

Frequently asked questions (FAQ)

<FAQ> <Collapsible summary="How do workflows compare to other CI services?" open>

EAS Workflows are designed to help you and your team release your app. It comes preconfigured with pre-packaged job types that can build, submit, update, run Maestro tests, and more. All job types run on EAS, so you'll only have to manage one set of YAML files, and all the artifacts from your job runs will appear on expo.dev.

Other CI services, like CircleCI and GitHub Actions, are more generalized and have the ability to do more than workflows. However, those services also require you to understand more about the implementation of each job. While that is necessary in some cases, workflows help you get common tasks done quickly by pre-packaging the most essential types of jobs for app developers. In addition, workflows are designed to provide you with the fastest possible cloud machine for the task at hand, and we're constantly updating those for you.

EAS Workflows are great for operations related to your Expo apps, while other CI/CD services will provide a better experience for other types of workflows.

</Collapsible> <Collapsible summary="Can I trigger a workflow without GitHub?">

Yes. Any workflow can be run manually using eas workflow:run regardless of the on trigger configuration. You can also use scheduled triggers with cron syntax.

</Collapsible> <Collapsible summary="What cloud machines do workflows run on?">

Workflows run on EAS's managed infrastructure:

  • Linux workers: linux-medium (4 vCPU, 16 GB RAM) or linux-large (8 vCPU, 32 GB RAM)
  • Linux with nested virtualization for Android emulators: linux-medium-nested-virtualization or linux-large-nested-virtualization
  • macOS workers for iOS builds and simulators: macos-medium (5 cores, 20 GB RAM) or macos-large (10 cores, 40 GB RAM)
</Collapsible> <Collapsible summary="Can workflows run jobs in parallel?">

Yes. Jobs without dependencies run in parallel by default.

Use needs to specify that a job should wait for another job to succeed, or after to wait for a job to complete regardless of success or failure.

</Collapsible> <Collapsible summary="Can I use environment variables in workflows?">

Yes. Workflows support EAS environment variables and inline env values. Environment variables can be referenced using ${{ env.VARIABLE_NAME }} syntax.

</Collapsible> <Collapsible summary="What are the current limitations?">

No shared workflow configurations (each workflow must be defined independently), and no matrix builds (cannot run multiple variations with different configurations in parallel). See Limitations for more details and updates.

</Collapsible> <Collapsible summary="Can I run custom scripts in a workflow?">

Yes. Custom jobs with steps let you run shell commands, use built-in functions like eas/checkout and eas/install_node_modules, and set outputs for downstream jobs.

</Collapsible> <Collapsible summary="Does EAS Workflows work with existing React Native projects?">

Yes. EAS Workflows works with both CNG (Continuous Native Generation) and existing React Native projects, as long as the project is configured for EAS Build.

</Collapsible> <Collapsible summary="Considering EAS Workflows? Share the following slide in your next team meeting"> Share the following slide in your next team meeting to discuss what EAS Workflows are and how they can help your team:

<DownloadSlide title="EAS Workflows CI/CD sync slide" description="Learn the benefits of using EAS Workflows to automate your CI/CD processes." imageUrl="/static/images/eas-workflows/eas-worfklows-slide.png" /> </Collapsible>

</FAQ>

Get started

<BoxLink title="Create your first workflow" description="Learn how to create and run your first workflow." href="/eas/workflows/get-started" Icon={Dataflow03Icon} />

<BoxLink title="Pre-packaged jobs" description="Use ready-to-use jobs to build, submit, update, test, and deploy your app." href="/eas/workflows/pre-packaged-jobs" Icon={Dataflow03Icon} />

<BoxLink title="Workflow syntax reference" description="Learn about the YAML syntax for defining workflows." href="/eas/workflows/syntax" Icon={Dataflow03Icon} />

<BoxLink title="Example workflows" description="See common workflows for development builds, preview updates, and production deployments." href="/eas/workflows/examples/introduction" Icon={Dataflow03Icon} />