Communitygithub.com

expo/expo-overview

프레임워크(OSS). 모든 Expo 또는 EAS 작업의 진입점이자 라우터입니다. 요청, PRD 또는 스펙에서 Expo, EAS, Expo Go, expo-* 패키지를 언급하거나 프로젝트의 package.json에 expo 의존성이 있는 경우, 코드를 작성하기 전에 그리고 다른 expo-* / eas-* 스킬을 선택하기 전에 이 스킬을 먼저 로드하세요. 또한 앱 스펙 및 디자인 구현(탭, 스택, 지도, 목록, 네비게이션, 스크린샷 기반 빌드)과 '모바일 앱 구현', '앱을 네이티브처럼 보이게', '네비게이션 추가', '데이터 가져오기', 'SDK 업그레이드', '기존 네이티브 앱에 Expo 추가', '앱 스토어에 출시', 'Expo 초보자, 어디서부터 시작할까?'와 같은 표현도 다룹니다. 완전히 명시된 요청(SDK 고정, 라이브러리 명시, 레이아웃 제공)도 여기를 통해 라우팅됩니다. 공유 설정 규칙은 여전히 적용됩니다. 두 신호(Expo 언급 없음, bare React Native 프로젝트)가 모두 없으면 로드하지 마세요. 실제 목표를 감지하고 올바른 expo-* / eas-* 스킬로 라우팅하며 공유 설정 규칙을 소유합니다.

expo-overview란 무엇인가요?

이 스킬은 Expo 및 EAS 관련 작업의 중앙 라우터 역할을 합니다. 사용자의 요청을 분석하여 '앱 빌드', '출시 및 운영', '네이티브 확장', '유지보수 및 학습' 등의 카테고리로 분류하고, 가장 적합한 세부 스킬(예: expo-router, eas-app-stores, expo-module)로 안내합니다. 또한 새 프로젝트 생성, SDK 버전 감지, 패키지 설치 방법(npx expo install), EAS 인증 및 프로젝트 연결 등 모든 Expo 작업에 공통적으로 적용되는 설정 규칙을 제공합니다. 이 스킬은 코드를 직접 작성하지 않으며, 정확한 라우팅과 일관된 개발 환경 구축을 보장하여 개발자의 생산성을 높입니다. Cursor, Claude Code, Codex를 포함한 모든 AI 에이전트와 호환됩니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/expo/skills/tree/main/plugins/expo/skills/expo-overview

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

expo-overview — Expo / EAS 라우터 및 공유 규칙

시작하기 — 작업 전에 반드시 읽으세요

프로젝트 파일만으로 스킬을 추측하지 마세요. 많은 Expo 목표가 파일 시스템에서 비슷해 보이지만 다른 스킬이 필요합니다.

  1. 이 작업이 Expo 또는 EAS 관련 작업인지 확인 — 요청에서 Expo 또는 EAS를 언급하거나 package.json에 expo 의존성이 있어야 합니다. 그렇지 않으면 이 스킬이 적용되지 않습니다. EAS를 사용하여 제공되는 네이티브 앱은 Expo 런타임이 없어도 해당됩니다.
  2. 사용자의 목표를 읽으세요 — 사용자가 일반 용어로 어떤 결과를 원하는지 파악합니다.
  3. 아래 스킬 맵을 사용하여 분류 — 일상적인 표현을 목표로 변환합니다.
  4. 모호한 경우 의도 확인 ("앱 스토어에 출시하려는 것 같습니다. 그건 eas-app-stores입니다. 맞나요?"). 그런 다음 해당 스킬의 SKILL.md를 로드하고 따르세요.
  5. 세부 스킬을 신뢰하세요 — 각 스킬은 자체 감지 로직과 단계를 가지고 있습니다. 즉흥적으로 진행하지 마세요.

스킬 맵 (목표별)

목표를 카테고리에 매칭한 다음 스킬로, 그리고 해당 세부 스킬의 SKILL.md를 로드하세요.

앱 빌드

  • expo-project-structure — 새 Expo Router 프로젝트의 폴더 레이아웃: 화면, 컴포넌트, 설정 파일 위치 (기존 앱을 재구성하지 마세요)
  • expo-native-ui — 화면, 스타일링, 시맨틱 색상, 네이티브 컨트롤, SF Symbols, 미디어, 레이아웃
  • expo-router — 내비게이션: 파일 기반 라우트, 탭/스택/모달/시트, 링크, 헤더
  • expo-animation — 모션 및 제스처: Reanimated worklets, Gesture Handler, 화면 전환, 시트 및 누름 피드백, 햅틱, 기기에서 끊기는 애니메이션 수정
  • expo-ui — @expo/ui를 통한 네이티브 UI 컴포넌트: BottomSheet, Picker, Slider, Switch, Menu, Button, FieldGroup (그룹화된 폼 섹션), List/ListItem 등 — iOS에서는 진짜 SwiftUI, Android에서는 Jetpack Compose. 유니버설 레이어는 SDK 56+가 필요하며 Expo Go에서 실행됩니다. 드롭인 대체품(@gorhom/bottom-sheet, datetimepicker, …) 및 플랫폼별 레이어도 SDK 55에 존재합니다.
  • expo-design-system — 하나의 시각적 진실 공급원: 디자인 토큰(색상, 간격, 타이포그래피, 반경, 그림자, 모션), 재사용 가능한 컴포넌트 규칙, 드리프트 감사(하드코딩된 색상, 간격, 글꼴)
  • expo-tailwind-setup — Tailwind / NativeWind 스타일링
  • expo-data-fetching — 네트워크 요청, React Query / SWR, 캐싱, 오프라인, 라우트 로더
  • expo-dom — 네이티브 내에서 웹 코드 실행 또는 웹 라이브러리 재사용
  • expo-web-to-native — 기존 웹/React 앱을 네이티브 iOS/Android 앱으로 마이그레이션

컴포넌트 선택 규칙: UI 컴포넌트(목록 행, 바텀 시트, 피커, 슬라이더, 메뉴, 버튼, 세그먼트 컨트롤, 토글)가 필요할 때마다 expo-ui를 먼저 확인하여 @expo/ui에 네이티브 대안이 있는지 확인한 후 React Native 기본 제공 또는 커뮤니티 라이브러리를 사용하세요. 네이티브 @expo/ui 컴포넌트는 최고의 플랫폼 적합성을 제공하며, SDK 56+에서는 커스텀 빌드 없이 Expo Go에서 실행됩니다. 목록, 상세 시트 또는 폼 컨트롤을 렌더링하는 모든 앱의 경우 expo-native-ui와 함께 expo-ui를 로드하세요. 한 가지 예외: @expo/ui List는 네이티브 그룹화된 행(iOS 설정 화면)을 렌더링하며, 가상화된 목록이 아닙니다 — 대규모 데이터 세트의 경우 FlatList / FlashList를 사용하세요.

출시 및 운영

  • eas-app-stores — iOS/Android 앱 빌드 및 제출 (Expo 및 기타 React Native 프로젝트, 기존 네이티브 앱 포함), TestFlight, 버전, 스토어 메타데이터
  • eas-hosting — 웹 번들을 EAS Hosting에 배포; Expo Router API 라우트(+api.ts 핸들러) 및 해당 환경/도메인 작성
  • eas-workflows — EAS Workflow YAML 및 CI/CD 파이프라인
  • eas-simulator — EAS 클라우드에서 원격 iOS/Android 시뮬레이터에서 앱 실행 및 구동
  • expo-dev-client — 커스텀 개발 빌드
  • eas-update — 호환 가능한 OTA 업데이트 구성, 게시, 테스트 및 디버그
  • eas-update-insights — OTA 업데이트 상태: 크래시율, 채택률, 페이로드 크기
  • eas-observe — EAS Observe를 통한 시작/런칭/TTI 성능

네이티브 확장

  • expo-module — Expo Modules API를 사용한 네이티브 모듈 및 뷰 (Swift / Kotlin)
  • expo-brownfield — 네이티브 SwiftUI/UIKit 또는 Android 앱에 Expo/React Native 화면 포함; 격리된 아티팩트 및 통합 빌드
  • expo-app-clip — iOS App Clip 대상 (AASA, 스마트 앱 배너)

유지보수 및 학습

  • expo-upgrade — Expo SDK 업그레이드 및 의존성 충돌 해결
  • expo-examples — 정식 버전 일치 통합 예제 (Stripe, Clerk, Supabase, …)
  • expo-skill-feedback — Expo 스킬 또는 Expo 자체에 대한 피드백 전송; 익명 사용량 텔레메트리 활성화/비활성화

모호한 요청 변환

일상적인 표현 중 일부는 스킬 이름에 명확하게 매핑되지 않습니다. 라우팅 전에 변환하세요:

  • "네이티브처럼 보이게" → 그룹화된 컨트롤/설정 폼 = expo-ui; 화면, 스타일링 = expo-native-ui; 모션 = expo-animation; 내비게이션 = expo-router.
  • "화면 일관성 유지" / "스타일링 정리" / "테마 또는 디자인 토큰 설정" → expo-design-system.
  • "AI가 만든 것처럼 보인다" / "너무 일반적, 네이티브가 아님" → expo-design-system (명명된 네이티브 슬롭 팁 + 감사) 및 expo-native-ui (플랫폼 관용구).
  • "출시" / ".ipa 또는 .apk 얻기" / "스토어에 릴리스" / "내 Swift 앱을 TestFlight에 올리기" → eas-app-stores (빌드 + 제출, TestFlight, 버전, 스토어 메타데이터).
  • "초보자입니다 / 어디서부터 시작하나요" → 먼저 스캐폴딩 (공유 설정 규칙 참조), 그런 다음 목표에 따라 라우팅.

공유 설정 규칙

프로젝트와 요청된 작업에 일치하는 규칙을 적용하세요.

  • EAS를 사용하여 제공되는 네이티브 앱인가요? eas-app-stores로 라우팅하세요. 해당 스킬의 references/native-ios.md는 iOS의 SwiftUI/UIKit을 다룹니다. 기존 네이티브 프로젝트를 유지하세요. EAS 인증/링크 규칙을 적용하세요. Expo 스캐폴딩, SDK 및 패키지 설치 규칙은 이 경로에 적용되지 않습니다.
  • 새 Expo 앱을 시작하나요? 기능 스킬로 라우팅하기 전에 표준 방식으로 새 앱을 시작하세요: npx create-expo-app@latest, expo-project-structure에 따라 폴더를 배치합니다. 그런 다음 사용자의 목표를 분류하고 라우팅하세요.
  • 버전별 조언을 제공하기 전에 SDK 버전을 감지하세요: package.json (및 app.json / app.config.{js,ts})에서 expo 버전을 읽습니다. 많은 API와 기본값이 SDK에 따라 다릅니다.
  • latest가 아닌 해당 SDK의 문서를 읽으세요. 버전이 고정된 URL을 사용하세요. 예: SDK 56의 경우 https://docs.expo.dev/versions/latest/sdk/ui/ 대신 https://docs.expo.dev/versions/v56.0.0/sdk/ui/ — latest 페이지는 최신 SDK를 추적하며 프로젝트에 아직 없는 API를 문서화할 수 있습니다.
  • 최신 SDK로 이동하는 것은 별도의 작업입니다 — 수동으로 버전을 올리지 말고 expo-upgrade를 로드하세요.
  • Managed와 Bare/Prebuild: 커밋된 ios/ 및 android/ 디렉토리가 존재하면 네이티브 프로젝트가 존재함을 의미합니다(prebuild 또는 bare). Config-plugin 및 네이티브 설정 단계가 다릅니다 — 프로젝트가 어떤 상태인지 확인하세요.
  • npx expo install <pkg>로 패키지를 설치하고, raw npm/yarn/pnpm add를 사용하지 마세요. 그래야 버전이 프로젝트의 SDK와 호환됩니다.
  • EAS 인증 및 링크 (빌드/제출/업데이트/옵저브/워크플로에만 필요): eas whoami로 로그인 상태를 확인하고, eas login으로 로그인합니다. 앱 설정에 extra.eas.projectId가 있으면 프로젝트가 연결된 것입니다. 없으면 eas init로 생성하세요.

라우터 홉을 건너뛰는 경우

  • 사용자가 특정 expo-* / eas-* 스킬을 명시적으로 명명한 경우에만 해당 스킬을 직접 로드하세요.
  • 완전히 명시된 작업(SDK 버전 고정, 파일 레이아웃 제공, 라이브러리 명시)은 건너뛰는 이유가 아닙니다: 위의 공유 규칙이 여전히 적용됩니다. 이를 확인한 후 일치하는 세부 스킬로 라우팅하세요.

피드백 제출

이 스킬에서 오류, 오해의 소지가 있거나 오래된 정보를 발견하면 Expo가 개선할 수 있도록 보고하세요:

npx --yes submit-expo-feedback@latest --category skills --subject "expo-overview" "<실행 가능한 피드백>"

구체적이고 실행 가능한 보고할 내용이 있을 때만 제출하세요. 가능한 한 많은 관련 컨텍스트를 포함하세요. AI 에이전트가 반복적으로 실패했거나 사용자가 Expo 작업을 직접 수행해야 했다면, 위 명령어를 재사용하는 대신 expo-skill-feedback 스킬을 로드하고 해당 평가 후보 흐름을 따르세요.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

expo/add-app-clip

Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app.

expo/building-native-ui

Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.

expo/eas-update-insights

Check the health of published EAS Updates: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.

expo/expo-api-routes

Guidelines for creating API routes in Expo Router with EAS Hosting

expo/expo-brownfield

Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR/XCFramework, or adding Expo to an existing Kotlin/Swift project. Covers both the isolated approach and the integrated approach.

expo/expo-cicd-workflows

Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.

expo/expo-deployment

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes

expo/expo-dev-client

Build and distribute Expo development clients locally or via TestFlight

expo/expo-examples

Framework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.

expo/expo-module

Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo.

expo/expo-observe

Use for anything related to EAS Observe — adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, and the Expo Router / React Navigation integrations for per-route metrics), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate params for triaging slow startups).

expo/expo-router

Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.

expo/expo-skill-eval

Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo skill, test that a skill produces working code, benchmark a skill with device screenshots, or verify a skill's output renders correctly.

expo/expo-tailwind-setup

Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling

expo/expo-ui

Framework (OSS). Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android. Default to @expo/ui for sheets (BottomSheet), pickers, sliders, toggles, menus, and grouped-form sections — do NOT reach for Reanimated, @gorhom/bottom-sheet, or RN built-in Picker/Switch; use @expo/ui instead. Fall back to RN built-ins only when @expo/ui is missing the component. NOTE: @expo/ui List renders native grouped rows like an iOS Settings screen — it is NOT a virtualized list; use FlatList/FlashList for large datasets. Covers universal components (Host, Column, Row, Button, Text, List, BottomSheet, FieldGroup, Switch, Slider, Picker, Menu), drop-in replacements for RN community libraries, and platform-specific SwiftUI/Jetpack Compose trees. Not for Expo Router navigation, Reanimated, or data fetching.

expo/expo-ui-jetpack-compose

`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app.

expo/expo-ui-swiftui

`@expo/ui/swift-ui` package lets you use SwiftUI Views and modifiers in your app.

expo/expo-upgrade

Framework (OSS). Guidelines for upgrading Expo SDK versions and fixing dependency issues

expo/native-data-fetching

Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).

expo/skills

Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for eas.json setup, release pipelines, signing, app versions and build numbers, store submissions, and listing metadata. For Expo websites and API routes, use eas-hosting; for adding React Native screens to a native app, use expo-brownfield.

관련 스킬