expo-dev
Expo Development
Master skill for building, styling, deploying, and upgrading Expo / React Native applications with EAS (Expo Application Services).
When to Use This Skill vs. Alternatives
- Expo (this skill) -- Default choice for mobile apps. Use when: targeting iOS + Android (+ web), want managed native builds, prefer file-based routing, need OTA updates.
- React Native CLI -- Only when: brownfield integration into existing native app, need full Xcode/Gradle control, corporate policy forbids third-party build services.
- Flutter / other -- Out of scope. If user asks, note Expo covers the React Native ecosystem.
Decision Tree -- Pick the Right Reference
Read the user's task, then follow this tree:
-
Styling with Tailwind / NativeWind / CSS? -->
./references/tailwind-setup.md(Tailwind v4 + NativeWind v5 + react-native-css wrappers) -
Creating server endpoints or backend logic? -->
./references/api-routes.md(+api.ts files, EAS Hosting on Cloudflare Workers) -
CI/CD, build automation, workflow YAML? -->
./references/cicd.md(EAS Workflows syntax, pre-packaged jobs, validation scripts) -
Custom dev client / native module testing? -->
./references/dev-client.md(when Expo Go is insufficient -- native modules, widgets, extensions) -
Deploying or publishing to stores / web? -->
./references/deployment.md(orchestrates the sub-references below)- TestFlight beta testing -->
./references/testflight.md - iOS App Store submission -->
./references/ios-app-store.md - Google Play Store -->
./references/play-store.md - App Store metadata & ASO -->
./references/app-store-metadata.md - Workflow-based deploys -->
./references/workflows.md
- TestFlight beta testing -->
-
Upgrading Expo SDK or fixing breaking changes? -->
./references/upgrading.md(orchestrates the sub-references below)- New Architecture migration -->
./references/new-architecture.md - React 19 changes -->
./references/react-19.md - React Compiler setup -->
./references/react-compiler.md - Native Tabs (SDK 55) -->
./references/native-tabs.md - expo-av to expo-audio -->
./references/expo-av-to-audio.md - expo-av to expo-video -->
./references/expo-av-to-video.md
- New Architecture migration -->
-
Performance, profiling, Hermes, New Architecture perf, 60 FPS, Reanimated? -->
./references/performance-profiling.md(JSI, TurboModules, Fabric, React Compiler, FlatList, memory) -
App version management, buildNumber, versionCode, autoIncrement, appVersionSource? -->
./references/eas-version-management.md(remote vs local source, CI/CD versioning, semantic versioning) -
OTA updates, EAS Update, update channels, rollback, staged rollout, canary? -->
./references/eas-update-strategy.md(channels, branches, monitoring, critical updates, workflows) -
Streaming responses, expo/fetch, SSE, AI chat streaming, WinterCG? -->
./references/expo-fetch-streaming.md(ReadableStream, Claude/OpenAI streaming, SSE parsing, abort) -
Multiple domains? Load all relevant references. They are designed to be composed.
CI/CD Scripts
The CI/CD skill includes helper scripts for fetching EAS workflow schemas and validating workflow YAML files:
# Fetch EAS workflow reference docs (caches with ETags)
node {baseDir}/scripts/fetch.js <url>
# Validate workflow YAML against schema
[ -d "{baseDir}/scripts/node_modules" ] || npm install --prefix {baseDir}/scripts
node {baseDir}/scripts/validate.js <workflow.yml>
Key URLs for CI/CD reference:
- Schema: https://api.expo.dev/v2/workflows/schema
- Syntax docs: https://raw.githubusercontent.com/expo/expo/refs/heads/main/docs/pages/eas/workflows/syntax.mdx
- Pre-packaged jobs: https://raw.githubusercontent.com/expo/expo/refs/heads/main/docs/pages/eas/workflows/pre-packaged-jobs.mdx
Quick Commands
# Start development
npx expo start # Expo Go
npx expo start --dev-client # Custom dev client
# Build
npx eas-cli@latest build -p ios --profile production
npx eas-cli@latest build -p android --profile production
# OTA Update
npx eas-cli@latest update --channel production --message "Fix"
# Version management
npx eas-cli@latest build:version:get
npx eas-cli@latest build:version:set --platform ios
# Deploy
npx testflight # Quick TestFlight submission
npx eas-cli@latest deploy --prod # Web / API route deployment
# Upgrade SDK
npx expo install expo@latest && npx expo install --fix
npx expo-doctor # Diagnostics
# API routes
npx expo serve # Local server with API routes
eas deploy # Deploy to EAS Hosting
Rules
- ALWAYS use
npx eas-cli@latest(not bareeas) to avoid stale CLI versions. - ALWAYS run
npx expo-doctorafter SDK upgrades or dependency changes. - Prefer Expo Go for development. Only build dev clients when native modules require it.
- Use
appVersionSource: "remote"in eas.json so EAS manages version numbers. - For Tailwind in React Native, wrap components with
useCssElement-- direct className on RN primitives does not work. - When unsure about an Expo API, use Context7 (
resolve-library-id->query-docs) rather than guessing. - Use
expo/fetch(not global fetch) for any streaming response or AI API integration in React Native. - OTA updates only work for JS/asset changes -- any native code change requires a new store build.
Cross-References
- UI components for Expo: See
building-native-uiskill for native UI patterns - DOM components in Expo: See
use-domskill for web-view based components in React Native - Tailwind styling details: See
./references/tailwind-setup.mdfor CSS wrappers and platform colors