Community코딩 & 개발github.com

expo/expo-examples

Expo의 공식 예제 프로젝트 저장소로, 약 70개의 `with-*` 통합 예제(Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind 등)를 제공합니다. 기존 Expo 앱에 타사 라이브러리나 서비스를 통합하거나, `npx create-expo --example`로 새 프로젝트를 시작할 때 사용합니다.

expo-examples란 무엇인가요?

이 스킬은 Claude Code(또는 유사한 AI 에이전트)가 Expo 생태계에서 타사 라이브러리나 서비스를 통합할 때 Expo의 공식 예제 저장소(`expo/examples`)를 활용하도록 안내합니다. 약 70개의 `with-*` 디렉토리(예: `with-stripe`, `with-clerk`, `with-maps`)로 구성되어 있으며, 각 예제는 하나의 라이브러리에 초점을 맞춘 단일 화면(약 100~200줄)의 '관리형(managed)' 프로젝트입니다. 이 스킬의 핵심은 예제에서 의존성, `app.json` 설정 플러그인, 최소한의 배선 코드를 참고하여 사용자 기존 앱에 **비파괴적으로** 통합 패턴을 적용하는 것입니다. AI 에이전트는 두 가지 모드로 작업할 수 있습니다: 1) **영감/적응 모드** – 사용자의 기존 프로젝트에 영향을 주지 않고 예제 파일을 읽어 패턴을 적용하거나, 2) **스캐폴드 모드** – `npx create-expo --example` 명령어로 완전히 새로운 프로젝트를 시작합니다. 또한 `meta.json` 파일을 통해 이름이 변경되거나 더 이상 사용되지 않는 예제를 확인하고, `catalog.md`로 빠른 분류 탐색을 지원합니다. GitHub API를 활용한 원격 읽기, `degit`을 통한 전체 예제 다운로드, 버전 정렬, 설정 병합 등 구체적인 워크플로우를 제공합니다.

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

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

문서

Expo 예제

expo/examples는 Expo의 공식 약 70개 통합 예제 라이브러리입니다. 각 디렉토리는 with-<라이브러리> 형식(예: with-stripe, with-maps)으로 명명되며, 하나의 라이브러리나 서비스를 중심으로 구축되었습니다. 이들은 완전한 앱이 아닙니다. 관리형(managed) 프로젝트(ios//android/ 디렉토리 없음 — 네이티브 설정은 설정 플러그인을 통해 처리)이며, 일반적으로 단일 화면에 약 100~200줄의 코드로 구성됩니다. 이 예제들을 참고하여 Expo가 현재 SDK에 대해 유지 관리하는 표준 통합 패턴 — 의존성 세트, app.json 설정 플러그인, 최소한의 배선 코드 — 을 찾아 사용자 앱에 적용하세요. 예제에서 완전한 애플리케이션 아키텍처를 그대로 가져오려고 하지 마세요.

통합을 직접 처음부터 구현하기 전에 예제를 먼저 참조하세요. (유형 — 풀스택, 쇼케이스, 스타터 — 은 ./references/catalog.md에 명시되어 있습니다.)

두 가지 모드

  1. 영감/적응 (가장 일반적) — 사용자가 이미 프로젝트를 가지고 있습니다. 일치하는 예제를 찾아 핵심 파일을 읽고, 그 패턴을 사용자의 코드에 적용합니다.
  2. 스캐폴드 — 새로운(그린필드) 프로젝트. 예제에서 직접 새 프로젝트를 시작합니다.

워크플로우

1. 올바른 예제 찾기

사용자의 필요를 예제 이름에 매핑합니다(예: 결제 → with-stripe, 인증 → with-clerk). ./references/catalog.md는 빠른 분류를 위한 카테고리별 스냅샷입니다. 다만 최신 상태와 다를 수 있으므로 실제 목록과 다시 확인하세요:

# 실시간 예제 이름 목록:
gh api repos/expo/examples/contents --jq '.[] | select(.type=="dir" and (.name|startswith(".")|not)) | .name'
# 별칭(이름 변경됨) + 폐기됨(사라짐/이동됨) 예제 — 추천하기 전에 확인:
gh api repos/expo/examples/contents/meta.json --jq '.content' | base64 -d

meta.json은 이름이 변경되었거나 폐기된(더 이상 사용되지 않는) 예제의 신뢰할 수 있는 출처입니다. (폐기된 예제는 저장소 트리에서 제거되었지만 여전히 이 파일에 나열되어 있으며, 각각 message가 있습니다.) 예제가 deprecated 맵에 있다면 추천하지 말고 — message를 따라 최신 경로로 안내하세요. aliases에 있다면 destination을 사용하세요.

2a. 영감 모드 — 사용자 프로젝트를 건드리지 않고 연구하기

일반적인 경우: 사용자에게 이미 앱이 있고 Expo가 특정 기능을 어떻게 구현하는지 보고 싶어합니다. 예제를 참조 자료로 읽고 패턴을 직접 적용하세요. 절대 사용자의 프로젝트 위에 예제를 스캐폴드하지 마세요.

먼저, 한 번의 호출로 전체 예제를 나열하세요. 통합 코드는 종종 중첩되어 있습니다(예: Stripe의 서버 라우트는 app/api/에 위치). 따라서 한 단계만 나열하면 중요한 파일을 놓칠 수 있습니다:

gh api 'repos/expo/examples/git/trees/master?recursive=1' \
  --jq '.tree[].path | select(startswith("with-stripe/"))'

그런 다음 신호가 강한 파일부터 읽으세요: README.md (설정) → package.json (의존성) → app.json (설정 플러그인/권한) → 매니페스트가 알려준 통합 코드 → .env (필요한 비밀 키). 파일별로:

gh api repos/expo/examples/contents/with-stripe/utils/stripe-server.ts --jq '.content' | base64 -d
# gh가 없나요? 원시 URL 사용 (브랜치는 master):
curl -s https://raw.githubusercontent.com/expo/examples/master/with-stripe/utils/stripe-server.ts

파일이 두세 개 이상 필요하신가요? 많은 통합(Stripe 등)은 서버 라우트, 클라이언트 프로바이더, 설정에 걸쳐 있습니다. 파일별 호출을 건너뛰고 전체 예제를 임시/.gitignore 대상 디렉토리(사용자 프로젝트 외부)에 내려받은 후 Grep/Read로 자유롭게 읽고 직접 적용하세요:

npx degit expo/examples/with-stripe /tmp/expo-ref/with-stripe   # git 히스토리 없는 깨끗한 복사본
# degit이 없을 경우 대체 방법 (sparse-checkout, 전체 ~64 MB 클론 방지):
git clone --depth 1 --filter=blob:none --sparse https://github.com/expo/examples.git /tmp/expo-ref/examples \
  && (cd /tmp/expo-ref/examples && git sparse-checkout set with-stripe)

해당 위치에서 Grep/Read로 읽고, 작업이 끝나면 임시 디렉토리를 삭제하세요.

2b. 스캐폴드 모드 — 예제로 새 프로젝트 시작하기

npx create-expo --example with-stripe   # 짧은 형식: npx create-expo -e with-stripe
bun create expo --example with-stripe    # bun 사용 시

3. 사용자 앱에 비파괴적으로 적용하기 (매우 중요)

사용자에게 이미 앱이 있는 경우, 예제가 새로 도입하는 것만 추가하고 기존 설정을 절대 덮어쓰지 마세요.

  • 버전 정렬 — 고정된 버전을 그대로 복사하지 마세요. 예제는 최신 SDK를 기준으로 하므로 package.json의 고정 버전이 예전 프로젝트와 맞지 않습니다. 정확한 버전을 복사하는 대신 npx expo install <패키지>로 누락된 의존성만 추가하세요(SDK에 맞는 버전을 자동으로 해결합니다).
  • 설정을 병합하고, 교체하지 마세요. app.json/app.config.*에서 예제가 도입했지만 사용자에게 없는 플러그인과 권한만 추가하세요. 기존 설정 블록은 그대로 유지하세요.
  • 통합 코드를 이식하세요.
  • 환경 변수를 예제의 .env 형식에 맞춰 다시 만드세요. .env 파일은 실제 비밀 키가 아닌 자리 표시자를 보관합니다.

완료 조건: 통합 코드가 이식되었고, 해당 코드가 필요한 모든 의존성, 설정 플러그인, 권한 및 환경 변수가 사용자 앱에 반영되었을 때입니다. 단순히 겉보기에 연결된 것처럼 보이는 상태가 되어서는 안 됩니다.

주의사항

  • **기본 브랜치는 master**입니다 (main이 아님 — 원시 URL 및 sparse checkout 시 중요).
  • 원클릭 배포. 모든 예제에는 실행 URL이 있습니다: https://launch.expo.dev/?github=https://github.com/expo/examples/tree/master/<예제명>.

관련 스킬

  • 네이티브 UI 컴포넌트 (@expo/ui 패키지) → expo-ui
  • 스타일링 및 네이티브 느낌의 화면 → expo-native-ui
  • 내비게이션 및 라우팅 → expo-router
  • 네이티브 모듈 작성 → expo-module
  • 최신 SDK 예제 적용 전 SDK 업그레이드 → expo-upgrade

참고 자료

  • ./references/catalog.md — 빠른 분류를 위한 예제 라이브러리의 카테고리별 스냅샷.

피드백 제출

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

npx --yes submit-expo-feedback@latest --category skills --subject "expo-examples" "<구체적인 피드백>"

보고할 구체적이고 실행 가능한 내용이 있을 때만 제출하세요. 가능한 한 많은 관련 컨텍스트를 포함하세요.

AI 에이전트가 반복적으로 실패했거나 사용자가 Expo 작업을 직접 수행해야 했다면, 위 명령어를 재사용하는 대신 expo-skill-feedback 스킬을 로드하고 해당 스킬의 평가-후보(eval-candidate) 흐름을 따르세요.

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-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-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.

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.

관련 스킬