Expo Go contains a fixed collection of native capabilities. When an application requires another native library or custom native configuration, it needs its own development build. Expo-dev-client helps prepare that runtime while preserving fast iteration for subsequent JavaScript changes.
Connect Expo knowledge to your agent
For Codex, run the official Expo plugin command below in a terminal or find Expo through /plugins. For Claude Code, use claude plugin install expo@claude-plugins-official instead. Both plugin installs include Expo Skills and MCP configuration. Other Agent Skills clients can run npx skills@latest add expo/skills --skill '*', choose their client, and refresh the session. Installing the plugin does not itself build or publish an app.
codex plugin add expo@openai-curated
Open the existing Expo project and explicitly request expo-dev-client, including the SDK version, target platforms, and relevant files.
Choose the build environment
Adapt this first request to your project:
Use expo-dev-client to prepare a local Android development build for this Expo app. Check native dependencies, the Android toolchain, and existing native directories; explain why Expo Go is insufficient. Use the current package manager and provide build steps. Preserve manual native changes; do not publish or submit a cloud build.
Local Android builds require the Android toolchain; local iOS compilation requires macOS and Xcode. EAS can compile remotely but needs an account, configuration, and available service capacity. Installing this skill does not itself select or submit a cloud build. Name the target device and build location first.
Follow the local development path
The official local flow starts with npx expo install expo-dev-client, followed by npx expo run:android or npx expo run:ios. For a physical device, complete the platform setup and use --device where appropriate. The run command compiles, installs, and starts the development server. Inspect existing native directories before proceeding: generated projects and manually maintained native code need different handling.
Once the development build is installed, ordinary JavaScript or TypeScript changes generally need only npx expo start. Use npx expo start --dev-client when explicitly selecting the development-build target. Installing agent instructions, adding an application dependency, and compiling a native binary are separate steps.
Rebuild when the native runtime changes
Adding or upgrading native libraries, changing relevant app configuration, or upgrading the SDK can require a new native build. Reloading JavaScript cannot add a native API to an older installed binary. In a generated-native workflow, regeneration may precede rebuilding. The prebuild --clean operation recreates native directories and must not be applied blindly to manually maintained native changes.
If EAS is chosen, verify the development profile, platform, and simulator-versus-device target before submitting a job. Development builds are not store release artifacts. Distribution and signing should follow the intended device rather than making TestFlight a default step for local debugging.
Finish with a usable connection
Expected deliverables include project-appropriate configuration, explained commands, and a way to connect the installed app to its development server. Check that the device has the new binary, connects to the correct server, and contains the required native capability. Starting a JavaScript server alone does not prove that native compilation and installation succeeded; keep those remaining steps visible when they have not run.
Follow the build onto the device
For a local build, record the target platform, command, artifact path, and device used for installation. For an EAS build, keep the development profile, build link, and device type, and confirm the result is a development client rather than a store build. Seeing a Metro QR code does not prove the phone has the new native module.
Troubleshoot along the chain: inspect Xcode or Gradle logs if compilation fails; if an app installs but lacks the API, check whether an older client is still being opened; if it launches but cannot connect, check device-to-computer networking and the start mode. Rebuild after changing native dependencies, then smoke-test that capability. For JavaScript-only edits, try a refresh before paying the cost of another native build.
Know when not to regenerate native projects
If ios or android directories exist, inspect manual changes to permissions, extensions, signing, and third-party native code. A generated project and a manually maintained project need different upgrade paths; a clean prebuild can erase essential configuration in the latter. Request a change inventory and recovery plan before rewriting those directories. After a successful build, test the native capability that required the development client, not only the home screen.
When the QR code opens production instead
With production and development variants installed together, one user on an older Expo SDK saw an Android development QR open the production app, while iOS worked. Compare the two schemes, package IDs, and dev-launcher configuration, then confirm the device has the current development build. To keep debugging, enter the Metro URL manually in the development launcher. This is version- and platform-sensitive; restarting Metro alone does not diagnose it.