Create Expo App (TypeScript, Bun)
Scaffold a brand-new Expo app with TypeScript using Bun as the package manager. This is the minimal path, no monorepo, no EAS workflows. Uniwind (Tailwind) is available as an optional add-on via references/uniwind.md, and a component library (requires Uniwind) is available as a user choice between HeroUI Native via references/heroui-native.md and Delacour UI via references/delacour-ui.md.
When to Use
- User asks for a Expo or React Native app
- User wants a minimal Expo + Bun setup without a monorepo
- User explicitly says "bun create expo", "new expo typescript app", etc.
- User asks to add Tailwind / Uniwind to an existing Expo app scaffolded by this skill (or a comparable minimal Expo + Bun setup), jump directly to references/uniwind.md without re-running the base scaffold
- User asks to add a component library to an existing Expo app. If they named one, jump directly to references/heroui-native.md (HeroUI Native) or references/delacour-ui.md (Delacour UI); otherwise ask per Component Library Choice. If Uniwind is not yet installed, run references/uniwind.md first, then continue
- User asks to set up EAS Workflows / CI/CD on an existing Expo app, jump directly to references/eas-workflows.md without re-running the base scaffold
- Triggers for the add-on flows: "add uniwind", "set up tailwind in this expo app", "install heroui native", "add delacour ui", "add a component library to my expo app", "set up eas workflows", "add expo ci", "automate expo builds"
Prerequisites
- Bun installed (
bun --version). Install from https://bun.sh if missing. - Node.js LTS installed.
bun create expoandbun expo prebuildstill require Node per the Expo docs. - For native builds later: Xcode (iOS) and/or Android Studio.
Rules / Steps
Follow the full procedure in references/scaffold.md. Do not skip steps and do not paraphrase the commands or code snippets, copy them as written.
High-level outline:
- Prompt the user for app name, iOS bundle identifier, Android package name, bundler port (default
8081), and parent directory. Also ask whether to set up EAS Workflows (defaultno); if yes, also collect the iOS App Store Connect App ID and Apple Developer Team ID up front. bun create expo-app <app-name> --template blank-typescript, thencdinto it.- Replace
app.jsonwith a typedapp.config.ts(iOS bundle id + Android package baked in); copyassets/scripts/ensure-prebuild.tsinto the new app'sscripts/; rewrite thepackage.jsonscriptsblock to useprebuild/ensure-prebuild/start/dev/ios/android(ios+android viaexpo run:* --device --port <bundler_port>, all run commands gated bybun ensure-prebuild; dropsweb). bun install, thenbunx expo installthe Expo Router peer set plusexpo-dev-client.- Overwrite
index.tswithimport "expo-router/entry";, deleteApp.tsx, and scaffoldsrc/app/_layout.tsx+src/app/index.tsx. - Scaffold the colocated module pattern under
src/modules/per references/modules.md. Createssrc/modules/AGENTS.md+src/modules/CLAUDE.mddocumenting the per-domaincomponents//sheets//contexts//hooks//utils/convention. No code, no empty subfolders, subfolders are added on demand per module. bun ios/bun android/bun dev(theensure-prebuildguard auto-runsexpo prebuildon first invocation).- Optional: if the user wants Tailwind-style styling, follow references/uniwind.md after the base scaffold completes. It installs
uniwind+tailwindcss, createssrc/styles/global.css, imports it fromsrc/app/_layout.tsx, and wiresmetro.config.jswithwithUniwindConfig. - Optional (requires step 8): after Uniwind setup completes, ask which component library to install per Component Library Choice, then follow the matching reference. If the user requests a library first without Uniwind, run references/uniwind.md first, then continue.
- Optional (independent of Uniwind / component library): if the user opted into EAS Workflows in step 1 (or asks for CI/CD on an existing app), follow references/eas-workflows.md. It collects
<WORKING_DIRECTORY>+ iOS App Store Connect ID + Apple Team ID, runsbunx eas-cli init, copies a parameterizedeas.jsonand four workflow YAMLs (build:native:dev,build:native:prod,release:prod,submit:native:prod) into the project, and walks through the standalone-vs-monorepoworking_directoryadjustment.release:prodruns on push torelease/app/*orworkflow_dispatch(inputsversion,force_native);build:native:prodisworkflow_dispatchonly (inputversion). Pass inputs withbun run eas:<script> -F key=value. Also installseas-check-channel.ts(gates OTA publishes on a linkedproductionchannel) andeas-tag.ts(GitHub tags for every production binary and OTA update, via aGITHUB_TAG_TOKENEAS secret).
Component Library Choice
Ask the user which React Native component library to use. Use the agent's structured question tool when one is available. Exactly one library per app.
| Option | Model | Reference |
|---|---|---|
| Delacour UI | Copy-in source via the delacour CLI into src/components/ui/; app owns and edits the code; DelacourProvider |
references/delacour-ui.md |
| HeroUI Native | npm package heroui-native with pinned peer deps; HeroUINativeProvider + GestureHandlerRootView |
references/heroui-native.md |
| None | Uniwind classNames only | n/a |
- Both require Uniwind (references/uniwind.md) and both keep the CSS entry at
src/styles/global.css. - Never install both in one app: two providers, two gesture roots and two token sets.
- If the project already has one installed (
heroui-nativeinpackage.json, ornative-components.json/src/components/ui/providerfor Delacour UI), skip the prompt and use that library.
Edge Cases
- If
bun create expo-apperrors mentioning Node, install Node LTS and retry. - Do not scaffold inside a non-empty directory unless the user confirms.
Reference
- Using Bun with Expo: https://docs.expo.dev/guides/using-bun/
- Create Expo reference: https://docs.expo.dev/more/create-expo/
- Expo Router installation: https://docs.expo.dev/router/installation/
- Using a
src/directory with Expo Router: https://docs.expo.dev/router/reference/src-directory/ app.config.ts/ dynamic config: https://docs.expo.dev/workflow/configuration/- Uniwind Quickstart: https://docs.uniwind.dev/quickstart
- HeroUI Native Quick Start: https://www.heroui.com/docs/native/getting-started/quick-start
- Delacour UI Quick Start: https://ui.delacour.co.nz/docs/native/getting-started
- Delacour UI agent skill: https://ui.delacour.co.nz/skills/delacour-ui/SKILL.md
- EAS Workflows: https://docs.expo.dev/eas/workflows/get-started/
eas.jsonreference: https://docs.expo.dev/eas/json/