npx skills add ...
npx skills add expo/skills --skill expo-overview
Framework (OSS). 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.
npx skills add expo/skills --skill expo-overview
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, …)expo-skill-feedback — send feedback on an Expo skill or on Expo itself; enable / disable the anonymous usage telemetrySome 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.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:
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.