← Expo2CONTENT HISTORY
WHAT CHANGED
Update to Expo2
Snapshot Nov 6, 2026 · 18:22 UTC · version 1.14.6
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Expo2 and check future changes in Following.
Up to 3 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "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`.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 399
},
{
"relative_path": "references/catalog.md",
"size_in_bytes": 4353
}
],
"name": "expo-examples",
"skill_md_contents": "---\nname: expo-examples\ndescription: 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`.\nlicense: MIT\n---\n\n# Expo Examples\n\n[expo/examples](https://github.com/expo/examples) is Expo's official library of ~70 **integration examples** — directories named `with-<library>` (e.g. `with-stripe`, `with-maps`), each built around **one** library or service. These are not full apps: they're **managed** projects (no `ios/`/`android/` dirs — native setup is via config plugins), and the typical one is a **single screen of ~100–200 lines**. Mine them for the canonical integration *pattern* — the dependency set, `app.json` config plugins, and minimal wiring Expo maintains against the current SDK — and adapt that into the user's app. Don't expect to lift an application architecture from them.\n\nReach for an example before hand-rolling an integration. (Kinds — full-stack, showcases, starters — are noted in `./references/catalog.md`.)\n\n## Two modes\n\n1. **Inspiration / adapt** (most common) — the user already has a project. Find the matching example, read its key files, and apply the *pattern* to their code.\n2. **Scaffold** — greenfield. Start a fresh project directly from the example.\n\n## Workflow\n\n### 1. Find the right example\n\nMap the user's need to an example name (e.g. payments → `with-stripe`, auth → `with-clerk`). `./references/catalog.md` is a categorized snapshot for fast triage — but it drifts, so confirm against the live list:\n\n```bash\n# Live example names:\ngh api repos/expo/examples/contents --jq '.[] | select(.type==\"dir\" and (.name|startswith(\".\")|not)) | .name'\n# Aliases (renamed) + deprecated (dead/moved) examples — check before recommending:\ngh api repos/expo/examples/contents/meta.json --jq '.content' | base64 -d\n```\n\n`meta.json` is the source of truth for what's renamed or dead (deprecated examples are removed from the repo tree but still listed here, each with a `message`). If an example is in its `deprecated` map, don't recommend it — follow the `message` to the modern path. If it's in `aliases`, use the `destination`.\n\n### 2a. Inspiration mode — study without touching the user's project\n\nThe common case: the user already has an app and wants to see how Expo does something. Read the example as **reference** and apply the patterns by hand — never scaffold an example on top of their project.\n\n**First, list the whole example in one call.** Integration code is often nested (e.g. Stripe's server routes live in `app/api/`), so a one-level listing misses the important files:\n\n```bash\ngh api 'repos/expo/examples/git/trees/master?recursive=1' \\\n --jq '.tree[].path | select(startswith(\"with-stripe/\"))'\n```\n\n**Then read the high-signal files first:** `README.md` (setup) → `package.json` (deps) → `app.json` (config plugins / permissions) → the integration code the manifest revealed → `.env.example` (variable names and placeholders). Per file:\n\n```bash\ngh api repos/expo/examples/contents/with-stripe/utils/stripe-server.ts --jq '.content' | base64 -d\n# No gh? Raw URL (branch is master):\ncurl -s https://raw.githubusercontent.com/expo/examples/master/with-stripe/utils/stripe-server.ts\n```\n\n**Reading more than a couple of files?** Many integrations are spread across server routes, a client provider, and config (Stripe is). Skip the per-file calls — pull the whole example into a **throwaway/gitignored dir (not the user's project)** and read it freely with Grep/Read, then apply by hand:\n\n```bash\nnpx degit expo/examples/with-stripe /tmp/expo-ref/with-stripe # clean copy, no git history\n# fallback without degit (sparse-checkout, no full ~64 MB clone):\ngit clone --depth 1 --filter=blob:none --sparse https://github.com/expo/examples.git /tmp/expo-ref/examples \\\n && (cd /tmp/expo-ref/examples && git sparse-checkout set with-stripe)\n```\n\nRead from there with Grep/Read; delete the scratch dir when done.\n\n### 2b. Scaffold mode — new project from an example\n\n```bash\nnpx create-expo --example with-stripe # short form: npx create-expo -e with-stripe\nbun create expo --example with-stripe # with bun\n```\n\n### 3. Adapt into the user's app — non-destructively (critical)\n\nWhen the user already has an app, **add only what the example introduces; never overwrite their setup.**\n\n- **Version-align — don't copy pinned versions.** Examples track the **latest** SDK, so their `package.json` pins won't match an older project. Add only the *missing* deps with `npx expo install <pkg>` (it resolves SDK-correct versions) instead of copying exact versions.\n- **Merge config, don't replace it.** Add only the `app.json`/`app.config.*` plugins and permissions the example introduces that the user lacks — keep their existing config block intact.\n- **Port the integration code.**\n- **Recreate env vars** from the example's `.env` shape — it holds placeholders, never working secrets.\n\n**Done when** the integration code is ported and every dependency, config plugin, permission, and env var it needs is accounted for in the user's app — not when it merely *looks* wired up.\n\n## Gotchas\n\n- **Default branch is `master`,** not `main` (matters for raw URLs and sparse checkout).\n- **Single-click deploy.** Every example has a launch URL: `https://launch.expo.dev/?github=https://github.com/expo/examples/tree/master/<example>`.\n\n## Related skills\n\n- Native UI components (@expo/ui package) → `expo-ui`\n- Styling and native-feeling screens → `expo-native-ui`\n- Navigation and routing → `expo-router`\n- Authoring a native module → `expo-module`\n- Upgrade the SDK before adopting a latest-SDK example → `expo-upgrade`\n\n## References\n\n- `./references/catalog.md` — categorized snapshot of the example library for fast triage.\n\n## Submitting Feedback\nWhen the user requests feedback submission, use:\n```bash\nnpx --yes @expo/agent-cli@1.0.23 feedback --category skills --subject \"expo-examples\" \"<actionable feedback>\"\n```\nInclude only relevant technical details; keep credentials, private data, and conversation contents out of feedback.\n"
}SHA-256 of public snapshot: 722e0211a824b9db0b8c586283c6eb14da32ca667f3bbf79275728b16dd5ab24