EAS service (paid). Deploy Expo websites and Expo Router API routes to EAS Hosting - export the web bundle, run eas deploy for production and PR preview URLs, manage environment secrets and custom domains, and work within the Cloudflare Workers runtime. Also covers authoring API routes (+api.ts handlers, HTTP methods, request handling, CORS). Use when deploying an Expo web app or API routes, setting up EAS Hosting, or configuring hosting environments and domains. Not for native builds or store releases - use the eas-app-stores skill for those.
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
EAS service (paid). Deploy Expo websites and Expo Router API routes to EAS Hosting - export the web bundle, run eas deploy for production and PR preview URLs, manage environment secrets and custom domains, and work within the Cloudflare Workers runtime. Also covers authoring API routes (+api.ts handlers, HTTP methods, request handling, CORS). Use when deploying an Expo web app or API routes, setting up EAS Hosting, or configuring hosting environments and domains. Not for native builds or store releases - use the eas-app-stores skill for those.
EAS service - costs apply. EAS Hosting is a paid Expo Application Services product with free-tier limits; production deploys use your plan's request and bandwidth allowance. See https://expo.dev/pricing. Authoring API routes and exporting the web bundle are free and open source, and you can self-host the exported server output instead of EAS Hosting.
EAS Hosting deploys your Expo web app and API routes to Expo's managed edge (Cloudflare Workers). Export the web bundle with npx expo export -p web and ship it with eas deploy - the same command deploys any Expo Router API routes bundled alongside it. This skill covers deploying a website, authoring API routes, and the hosting runtime; see the Deployment section below for the deploy workflow.
When to use API routes
Use API routes when you need:
Server-side secrets, API keys, database credentials, or tokens that must never reach the client
Database operations, Direct database queries that shouldn't be exposed
Third-party API proxies, Hide API keys when calling external services (OpenAI, Stripe, etc.)
Server-side validation, Validate data before database writes
Webhook endpoints, Receive callbacks from services like Stripe or GitHub
Rate limiting, Control access at the server level
Heavy computation, Offload processing that would be slow on mobile
When NOT to use API routes
Avoid API routes when:
Data is already public, Use direct fetch to public APIs instead
No secrets required, Static data or client-safe operations
Real-time updates needed, Use WebSockets or services like Supabase Realtime
Simple CRUD, Consider Firebase, Supabase, or Convex for managed backends
File uploads, Use direct-to-storage uploads (S3 presigned URLs, Cloudflare R2)
Authentication only, Use Clerk, Auth0, or Firebase Auth instead
File structure
API routes live in the app directory with +api.ts suffix:
Deploying ships your web bundle and any Expo Router API routes together - eas deploy handles both. The export runs whether you have a full website, an API-routes-only backend, or both.
# Export the web bundle (includes any API routes)
npx expo export -p web
# Deploy a preview (PR-style URL)
npx eas-cli@latest deploy
# Deploy to production
npx eas-cli@latest deploy --prod
Everything lands on EAS Hosting (Cloudflare Workers).
Environment variables for production
# Create a secret
eas env:create --name OPENAI_API_KEY --value sk-xxx --environment production
# Or use the Expo dashboard
Custom domain
Configure in eas.json or Expo dashboard.
Automate with EAS workflows
Deploy the website (and API routes) on every push to main with a type: deploy workflow:
Use proper HTTP status codes (200, 201, 400, 401, 404, 500)
Handle errors gracefully with try/catch
Keep API routes focused, one responsibility per endpoint
Use TypeScript for type safety
Log errors server-side for debugging
Submitting feedback
Only run this external write after explicit user authorization.
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.