Generated banner for Expo Deployment
Generated logo for Expo Deployment

Expo Deployment

OpenAIOfficialCreated by Expo TeamDistributed by OpenAI

  • Skill
  • Tool integration
  • Cloud and DevOps
  • MIT
  • Low risk

From the author

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes
— the description by Expo Team

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a comprehensive guide for using Expo Application Services (EAS) to build, manage, and deploy Expo applications. It covers the configuration of build profiles, automated submission to the Apple App Store and Google Play Store, and web hosting deployment. The skill also includes instructions for managing app metadata, handling credentials, and integrating CI/CD workflows for automated release pipelines.

What it does

  • Configures build profiles for iOS, Android, and web platforms
  • Automates the submission of application binaries to app stores
  • Manages App Store metadata and store configuration
  • Provides commands for TestFlight beta distribution
  • Enables web hosting deployment and PR preview generation
  • Supports CI/CD integration for automated build and release workflows

When to use it

  • When preparing an Expo application for release to mobile app stores
  • When setting up automated deployment pipelines for mobile or web
  • When managing App Store metadata and store presence
  • When distributing beta builds to testers via TestFlight
  • When deploying web versions of an Expo project

Advantages

  • Centralizes build and submission processes
  • Reduces manual effort for store metadata management
  • Supports automated versioning and build tracking
  • Facilitates consistent deployment workflows across platforms

Usage examples

“How do I build and submit my iOS app to the App Store?”
The agent provides the command 'npx eas-cli build -p ios --profile production --submit' and explains the necessary credential configuration.
“How can I automate my release process?”
The agent provides a sample YAML workflow configuration for CI/CD to automate building and submitting apps upon pushing to the main branch.
“How do I update my App Store metadata?”
The agent explains how to use 'eas metadata:pull' to generate a config file and 'eas metadata:push' to update store information.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/openai/expo-deployment/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip expo-deployment.zip -d .agents/skills

Documentation by Expo Team

Deployment

This skill covers deploying Expo applications across all platforms using EAS (Expo Application Services).

References

Consult these resources as needed:

  • ./references/workflows.md -- CI/CD workflows for automated deployments and PR previews

  • ./references/testflight.md -- Submitting iOS builds to TestFlight for beta testing

  • ./references/app-store-metadata.md -- Managing App Store metadata and ASO optimization

  • ./references/play-store.md -- Submitting Android builds to Google Play Store

  • ./references/ios-app-store.md -- iOS App Store submission and review process

Quick Start

Install EAS CLI
npm install -g eas-cli
eas login
Initialize EAS
npx eas-cli@latest init

This creates eas.json with build profiles.

Build Commands

Production Builds
# iOS App Store build
npx eas-cli@latest build -p ios --profile production

# Android Play Store build
npx eas-cli@latest build -p android --profile production

# Both platforms
npx eas-cli@latest build --profile production
Submit to Stores
# iOS: Build and submit to App Store Connect
npx eas-cli@latest build -p ios --profile production --submit

# Android: Build and submit to Play Store
npx eas-cli@latest build -p android --profile production --submit

# Shortcut for iOS TestFlight
npx testflight

Web Deployment

Deploy web apps using EAS Hosting:

# Deploy to production
npx expo export -p web
npx eas-cli@latest deploy --prod

# Deploy PR preview
npx eas-cli@latest deploy

EAS Configuration

Standard eas.json for production deployments:

{
  "cli": {
    "version": ">= 16.0.1",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true,
      "ios": {
        "resourceClass": "m-medium"
      }
    },
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "[email protected]",
        "ascAppId": "1234567890"
      },
      "android": {
        "serviceAccountKeyPath": "./google-service-account.json",
        "track": "internal"
      }
    }
  }
}

Platform-Specific Guides

iOS
  • Use npx testflight for quick TestFlight submissions

  • Configure Apple credentials via eas credentials

  • See ./reference/testflight.md for credential setup

  • See ./reference/ios-app-store.md for App Store submission

Android
  • Set up Google Play Console service account

  • Configure tracks: internal → closed → open → production

  • See ./reference/play-store.md for detailed setup

Web
  • EAS Hosting provides preview URLs for PRs

  • Production deploys to your custom domain

  • See ./reference/workflows.md for CI/CD automation

Automated Deployments

Use EAS Workflows for CI/CD:

# .eas/workflows/release.yml
name: Release

on:
  push:
    branches: [main]

jobs:
  build-ios:
    type: build
    params:
      platform: ios
      profile: production

  submit-ios:
    type: submit
    needs: [build-ios]
    params:
      platform: ios
      profile: production

See ./reference/workflows.md for more workflow examples.

Version Management

EAS manages version numbers automatically with appVersionSource: "remote":

# Check current versions
eas build:version:get

# Manually set version
eas build:version:set -p ios --build-number 42

Monitoring

# List recent builds
eas build:list

# Check build status
eas build:view

# View submission status
eas submit:list

Files

references/play-store.md

Submitting to Google Play Store

Prerequisites

  1. Google Play Console Account - Register at play.google.com/console

  2. App Created in Console - Create your app listing before first submission

  3. Service Account - For automated submissions via EAS

Service Account Setup

1. Create Service Account
  1. Go to Google Cloud Console → IAM & Admin → Service Accounts

  2. Create a new service account

  3. Grant the "Service Account User" role

  4. Create and download a JSON key

  1. Go to Play Console → Setup → API access

  2. Click "Link" next to your Google Cloud project

  3. Under "Service accounts", click "Manage Play Console permissions"

  4. Grant "Release to production" permission (or appropriate track permissions)

3. Configure EAS

Add the service account key path to eas.json:

{
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "./google-service-account.json",
        "track": "internal"
      }
    }
  }
}

Store the key file securely and add it to .gitignore.

Environment Variables

For CI/CD, use environment variables instead of file paths:

# Base64-encoded service account JSON
EXPO_ANDROID_SERVICE_ACCOUNT_KEY_BASE64=...

Or use EAS Secrets:

eas secret:create --name GOOGLE_SERVICE_ACCOUNT --value "$(cat google-service-account.json)" --type file

Then reference in eas.json:

{
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "@secret:GOOGLE_SERVICE_ACCOUNT"
      }
    }
  }
}

Release Tracks

Google Play uses tracks for staged rollouts:

TrackPurpose
internalInternal testing (up to 100 testers)
alphaClosed testing
betaOpen testing
productionPublic release
Track Configuration
{
  "submit": {
    "production": {
      "android": {
        "track": "production",
        "releaseStatus": "completed"
      }
    },
    "internal": {
      "android": {
        "track": "internal",
        "releaseStatus": "completed"
      }
    }
  }
}
Release Status Options
  • completed - Immediately available on the track

  • draft - Upload only, release manually in Console

  • halted - Pause an in-progress rollout

  • inProgress - Staged rollout (requires rollout percentage)

Staged Rollout

{
  "submit": {
    "production": {
      "android": {
        "track": "production",
        "releaseStatus": "inProgress",
        "rollout": 0.1
      }
    }
  }
}

This releases to 10% of users. Increase via Play Console or subsequent submissions.

Submission Commands

# Build and submit to internal track
eas build -p android --profile production --submit

# Submit existing build to Play Store
eas submit -p android --latest

# Submit specific build
eas submit -p android --id BUILD_ID

App Signing

EAS uses Google Play App Signing by default:

  1. First upload: EAS creates upload key, Play Store manages signing key

  2. Play Store re-signs your app with the signing key

  3. Upload key can be reset if compromised

Checking Signing Status
eas credentials -p android

Version Codes

Android requires incrementing versionCode for each upload:

{
  "build": {
    "production": {
      "autoIncrement": true
    }
  }
}

With appVersionSource: "remote", EAS tracks version codes automatically.

First Submission Checklist

Before your first Play Store submission:

  • [ ] Create app in Google Play Console

  • [ ] Complete app content declaration (privacy policy, ads, etc.)

  • [ ] Set up store listing (title, description, screenshots)

  • [ ] Complete content rating questionnaire

  • [ ] Set up pricing and distribution

  • [ ] Create service account with proper permissions

  • [ ] Configure eas.json with service account path

Common Issues

"App not found"

The app must exist in Play Console before EAS can submit. Create it manually first.

"Version code already used"

Increment versionCode in app.json or use autoIncrement: true in eas.json.

"Service account lacks permission"

Ensure the service account has "Release to production" permission in Play Console → API access.

"APK not acceptable"

Play Store requires AAB (Android App Bundle) for new apps:

{
  "build": {
    "production": {
      "android": {
        "buildType": "app-bundle"
      }
    }
  }
}

Internal Testing Distribution

For quick internal distribution without Play Store:

# Build with internal distribution
eas build -p android --profile development

# Share the APK link with testers

Or use EAS Update for OTA updates to existing installs.

Monitoring Submissions

# Check submission status
eas submit:list -p android

# View specific submission
eas submit:view SUBMISSION_ID

Tips

  • Start with internal track for testing before production

  • Use staged rollouts for production releases

  • Keep service account key secure - never commit to git

  • Set up Play Console notifications for review status

  • Pre-launch reports in Play Console catch issues before review

Requirements and compatibility

Written for: OpenAI Codex

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Node.js

Security

What our scanner noticed· Low risk

  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Expo Team
Publisher
OpenAI (Official)
Distributed by
OpenAI
Source
openai/plugins · plugins/expo/skills/expo-deployment · commit d420d13
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from plugins/expo/LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Expo Team or OpenAI.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download expo-deployment.zip