Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

expo-dev-client — Claude Code skill: build custom Expo clients

Skill for building and distributing custom Expo development clients to physical devices via local builds or TestFlight. Use it when your app includes native code, Apple widgets, or third-party native modules not in Expo Go.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add expo/skills --skill expo-dev-client -a claude-code
Open on GitHub

What expo-dev-client does

expo-dev-client builds a custom Expo client bundled with your native code instead of the standard Expo Go. The skill helps the agent configure a development profile in eas.json, run a local or cloud build via EAS Build, submit to TestFlight, and install the .ipa or .apk on a device.

Local builds are free; cloud builds and TestFlight distribution require a paid Apple Developer account and EAS plan build minutes. The skill covers only the device testing phase — use the separate eas-app-stores skill for production App Store and Google Play releases.

Once installed, the dev client displays a launcher menu to select your development server, scan QR codes to connect to a local Metro bundler, and switch between configurations. Without the skill, you'd manually edit eas.json, run raw EAS CLI commands, and handle certificate signing yourself.

What it helps with

  • build a custom Expo client with native code for device testing
  • submit a development build to TestFlight and install it on iPhone
  • configure the development profile and auto-increment build numbers
  • create a local Android build without using the cloud service

Example prompts for the agent

  • Build an iOS dev client and submit to TestFlight
  • Create a development client locally for Android on my machine
  • How do I install a local iOS build on the simulator

How to install expo-dev-client

1Skills CLI (Vercel)

npx skills add expo/skills --skill expo-dev-client -a claude-code

2Manually: put the files in place

~/.claude/skills/expo-dev-client/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/expo-dev-client/

From the same set7

The whole set →

Similar

compose-multiplatform-patterns affaan-m Patterns for Compose Multiplatform and Jetpack Compose in KMP projects, covering state, navigation, theming, performance, and platform-specific UI. Claude Code CX Codex Cursor +1 4,500installs ios-icon-gen affaan-m Builds complete Xcode .imageset folders with 1x, 2x, and 3x PNG assets directly from SF Symbols or the Iconify API. Claude Code CX Codex Cursor +1 4,400installs apple-appstore-reviewer official github Reviews an iOS project from an Apple App Store reviewer’s perspective and ranks rejection risks. Use it before submitting an app for review. GitHub Copilot 11,295installs upgrade-stripe stripe Guides an agent through Stripe API, webhook, and SDK version upgrades. Use it when moving an integration to a target API version. Claude Code CX Codex Cursor +1 72,800installs mobile-android-design Seth Hobson This skill guides native Android UI work with Material Design 3 and Jetpack Compose. Use it for screens, navigation, adaptive layouts, and accessibility checks. Claude Code CX Codex Cursor 24,847installs design-mobile-apps designed-by-ai Designs mobile screens via the Sleek REST API and translates them into React Native or HTML code. Claude Code CX Codex Cursor +1 1,000,000installs vercel-react-native-skills vercel A rules pack for React Native and Expo work: lists, animations, navigation, native modules. Load it so your agent makes mobile changes the same way every time. Claude Code CX Codex Cursor +1 253,900installs animate-expo emilkowalski Builds React Native and Expo animations using Reanimated and Gesture Handler. Helps keep motion on the UI thread and avoid dropped frames on physical devices. Claude Code CX Codex Cursor +1 135,900installs

Questions about expo-dev-client

How do I install expo-dev-client in Claude Code?

Run npx skills add expo/skills --skill expo-dev-client -a claude-code, then open ~/.claude/skills/expo-dev-client/SKILL.md. For other platforms: npx skills add expo/skills --skill expo-dev-client -a codex (Codex), npx skills add expo/skills --skill expo-dev-client -a cursor (Cursor), gh skill install expo/skills expo-dev-client (GitHub Copilot).

Why use expo-dev-client instead of Expo Go?

Expo Go is a sandbox for learning and quick experiments with its bundled libraries. A development client is required when you add custom native code, Apple widgets, extensions, config plugins, or third-party native modules. For production apps, a development client is the standard approach.

Which platforms does this skill support?

Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, and OpenCode. The skill works with EAS Build for iOS and Android, either locally on your machine or in the cloud with TestFlight submission.

Source text

SKILL.md · MIT
---
name: expo-dev-client
description: Build and distribute Expo development clients locally or via TestFlight for internal testing. For production TestFlight releases and store submission, use the eas-app-stores skill.
version: 1.1.0
license: MIT
---

Use EAS Build to create development clients for testing native code changes on physical devices. Use this for creating custom Expo Go clients for testing branches of your app.

> **Free locally; cloud builds are paid.** `expo-dev-client` itself is open source and building locally is free. Building or distributing via EAS Build/TestFlight uses your EAS plan's build minutes and needs a paid Apple Developer account for device/TestFlight distribution. See https://expo.dev/pricing.

## Important: When Development Clients Are Needed

**Development clients are the recommended setup for any real or production app.** Expo Go is a playground for learning and quick experiments with the native libraries it bundles; most apps outgrow it and move to a development client. See [Expo Go vs. development builds](https://docs.expo.dev/develop/development-builds/introduction/) for the full reasoning.

You need a dev client ONLY when using:

- Local Expo modules (custom native code)
- Apple targets (widgets, app clips, extensions)
- Third-party native modules not in Expo Go
- Config plugins, or testing remote push notifications and App/Universal Links

## EAS Configuration

Ensure `eas.json` has a development profile:

```json
{
  "cli": {
    "version": ">= 16.0.1",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    },
    "development": {
      "autoIncrement": true,
      "developmentClient": true
    }
  },
  "submit": {
    "production": {},
    "development": {}
  }
}
```

Key settings:

- `developmentClient: true` - Bundles expo-dev-client for development builds
- `autoIncrement: true` - Automatically increments build numbers
- `appVersionSource: "remote"` - Uses EAS as the source of truth for version numbers

## Building for TestFlight

Build iOS dev client and submit to TestFlight in one command:

```bash
eas build -p ios --profile development --submit
```

This will:

1. Build the development client in the cloud
2. Automatically submit to App Store Connect
3. Send you an email when the build is ready in TestFlight

After receiving the TestFlight email:

1. Download the build from TestFlight on your device
2. Launch the app to see the expo-dev-client UI
3. Connect to your local Metro bundler or scan a QR code

## Building Locally

Build a development client on your machine:

```bash
# iOS (requires Xcode)
eas build -p ios --profile development --local

# Android
eas build -p android --profile development --local
```

Local builds output:

- iOS: `.ipa` file
- Android: `.apk` or `.aab` file

## Installing Local Builds

Install iOS build on simulator:

```bash
# Find the .app in the .tar.gz output
tar -xzf build-*.tar.gz
xcrun simctl install booted ./path/to/App.app
```

Install iOS build on device (requires signing):

```bash
# Use Xcode Devices window or ideviceinstaller
ideviceinstaller -i build.ipa
```

Install Android build:

```bash
adb install build.apk
```

## Building for Specific Platform

```bash
# iOS only
eas build -p ios --profile development

# Android only
eas build -p android --profile development

# Both platforms
eas build --profile development
```

## Checking Build Status

```bash
# List recent builds
eas build:list

# View build details
eas build:view
```

## Using the Dev Client

Once installed, the dev client provides:

- **Development server connection** - Enter your Metro bundler URL or scan QR
- **Build information** - View native build details
- **Launcher UI** - Switch between development servers

Connect to local development:

```bash
# Start Metro bundler
npx expo start --dev-client

# Scan QR code with dev client or enter URL manually
```

When you launch the dev client yourself to screenshot or drive it, skip the onboarding sheet, the dev menu at launch, and the Tools button. On SDK 58+, Expo CLI does this for launches it starts from a non-interactive shell; for a URL you open yourself, use `<scheme>://?__expo_url=<encoded dev server URL>&__expo_disable_onboarding=1&__expo_disable_fab=1&__expo_disable_auto_launch=1`. On SDK 57 and earlier, launch the iOS app with the `-EXDevMenu*` launch arguments, and on Android open `<scheme>://expo-development-client/?url=<encoded dev server URL>&disableOnboarding=1&disableFab=1&disableAutoLaunch=1`. See `../expo-overview/references/launch-without-dev-menu.md` for the exact commands.

## Troubleshooting

**Build fails with signing errors:**

```bash
eas credentials
```

**Clear build cache:**

```bash
eas build -p ios --profile development --clear-cache
```

**Check EAS CLI version:**

```bash
eas --version
eas update
```

## Submitting Feedback
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
```bash
npx --yes @expo/agent-cli@latest feedback --category skills --subject "expo-dev-client" "<actionable feedback>"
```
Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
If an agent repeatedly fails at an Expo task or the user has to step in, submit a brief report of the task, expected result, and what went wrong using `--category evals` and the relevant Expo package or command as `--subject`.

© expo · MIT · expo/skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor