Expo
Skill 19 of 25
Entry point and router for every Expo or EAS task.
5 minutes · 1,085 words · 7 sections
Install
npx skills add expo/skills --skill expo-overviewnpx skills add expo/skills/plugin marketplace add expo/skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
expo-overview — router & shared rules for Expo / EASDo not guess the skill from project files alone. Many Expo goals look similar from the filesystem but need different skills.
package.json has an expo dependency. Otherwise this skill does not apply.
A native app using EAS for delivery qualifies without an Expo runtime.eas-app-stores. Right?”), then load that skill’s SKILL.md and follow it.Match the goal to a category, then the skill, then load that leaf’s SKILL.md.
Build the app
expo-project-structure — folder layout for a new Expo Router project: where screens, components, and config live (never restructure an existing app to match)expo-native-ui — screens, styling, semantic colors, native controls, SF Symbols, media, layoutexpo-router — navigation: file-based routes, tabs / stacks / modals / sheets, links, headersexpo-animation — motion and gestures: Reanimated worklets, Gesture Handler, screen transitions, sheet and press feedback, haptics, and fixing animation that stutters on deviceexpo-ui — native UI components via @expo/ui: BottomSheet, Picker, Slider, Switch, Menu, Button, FieldGroup (grouped form sections), List / ListItem, and more — real SwiftUI on iOS, Jetpack Compose on Android. The universal layer needs SDK 56+ and runs in Expo Go; the drop-in replacements (@gorhom/bottom-sheet, datetimepicker, …) and platform-specific layers also exist on SDK 55.expo-design-system — one visual source of truth: design tokens (color, spacing, typography, radius, shadow, motion), reusable component conventions, and audits for drift (hardcoded colors, spacing, fonts)expo-tailwind-setup — Tailwind / NativeWind stylingexpo-data-fetching — network requests, React Query / SWR, caching, offline, route loadersexpo-dom — run web code or reuse a web library inside nativeexpo-web-to-native — migrate an existing web / React app to a native iOS / Android appComponent selection rule: whenever you need a UI component (list rows, bottom sheets, pickers, sliders, menus, buttons, segmented controls, toggles), consult
expo-uifirst to check whether@expo/uihas a native equivalent before reaching for a React Native built-in or a community library. Native@expo/uicomponents give the best platform fit, and on SDK 56+ the universal ones run in Expo Go with no custom build. Loadexpo-uialongsideexpo-native-uifor any app that renders lists, detail sheets, or form controls. One exception:@expo/uiListrenders native grouped rows (an iOS Settings screen), not a virtualized list — useFlatList/FlashListfor large datasets.
Ship & operate
eas-app-stores — build and submit iOS/Android apps (Expo and other React Native projects, plus existing native apps), TestFlight, versions, and store metadataeas-hosting — deploy the web bundle to EAS Hosting; also author Expo Router API routes (+api.ts handlers) and their environments / domainseas-workflows — EAS Workflow YAML and CI/CD pipelineseas-simulator — run and drive the app on a remote iOS / Android simulator on EAS cloudexpo-dev-client — custom development buildseas-update — configure, publish, test, and debug compatible over-the-air updateseas-update-insights — OTA update health: crash rate, adoption, payload sizeeas-observe — startup / launch / TTI performance with EAS ObserveExtend natively
expo-module — native modules and views (Swift / Kotlin) with the Expo Modules APIexpo-brownfield — embed Expo / React Native screens in native SwiftUI/UIKit or Android apps; isolated artifacts and integrated buildsexpo-app-clip — iOS App Clip target (AASA, smart app banner)Maintain & learn
expo-upgrade — upgrade the Expo SDK and fix dependency conflictsexpo-examples — canonical, version-matched integration examples (Stripe, Clerk, Supabase, …)Some everyday phrasings don’t obviously map to a skill name — translate before routing:
expo-ui; screens, styling = expo-native-ui; motion = expo-animation; navigation = expo-router.expo-design-system.expo-design-system (named native-slop tells + audit), with expo-native-ui for the platform idioms.eas-app-stores (build + submit, TestFlight, versions, store metadata).Apply the rules that match the project and the requested task.
eas-app-stores; its
references/native-ios.md covers SwiftUI/UIKit on iOS. Keep the existing native
project. Apply EAS auth/linking below; Expo scaffolding, SDK, and package-install
rules do not apply to this path.npx create-expo-app@latest, laying out folders per expo-project-structure. Then
classify the user’s goal and route.expo
version in package.json (and app.json / app.config.{js,ts}). Many APIs and
defaults differ by SDK.latest. Use the version-pinned URL, e.g.
https://docs.expo.dev/versions/v56.0.0/sdk/ui/ on SDK 56 instead of
https://docs.expo.dev/versions/latest/sdk/ui/ — the latest pages track the newest
SDK and can document APIs the project does not have yet.expo-upgrade instead of bumping
versions by hand.ios/ and android/
directories means native projects exist (prebuild or bare). Config-plugin and
native-setup steps differ — note which one the project is in.npx expo install <pkg>, not raw npm/yarn/pnpm add,
so versions stay compatible with the project’s SDK.simctl openurl, adb, a controller), follow
./references/launch-without-dev-menu.md.eas whoami, log in with eas login. A project is linked when
extra.eas.projectId exists in the app config; create it with eas init if missing.expo-* / eas-* skill → load that
skill directly.If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
npx --yes @expo/agent-cli@latest feedback --category skills --subject "expo-overview" "<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.
Entry point and router for every Expo or EAS task. Load this skill first — before writing code and before choosing another expo-* / eas-* skill — when the request, PRD, or spec mentions Expo, EAS, Expo Go, or an expo-* package, or the project has an `expo` dependency in `package.json`. Within that gate it also covers app specs and designs to implement (tabs, stacks, maps, lists, navigation, building from a screenshot), and phrasings like 'implement a mobile app', 'make my app look native', 'add navigation', 'fetch some data', 'upgrade my SDK', 'add Expo to my existing native app', 'ship to the App Store', or 'I'm new to Expo, where do I start'. A fully specified request (SDK pinned, libraries named, layout given) still routes through here — the shared setup rules still apply. Do NOT load it when neither signal is present: a bare React Native project with no `expo` dependency is not Expo work. Detects the real goal, routes to the right expo-* / eas-* skill, and owns the shared setup rules.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
plugins/expo/skills/expo-overview/SKILL.mdmain, last pushed 6 November 2026.SKILL.md, not by matching a directory convention. 3 distinct layouts observed: .claude/skills/*/SKILL.md, plugins/expo-experiments/skills/*/SKILL.md, plugins/expo/skills/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by Expo Team, declaring 2 plugins. It is read for editorial metadata only — never as the skill index, which is always the repository tree./expo/skills.md, and each skill at its own .md URL.2 files · 2 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of skill 19.
Documentation the agent loads on demand, rather than up front.
Everything else published alongside the skill.