Creating an app from a template
The create-expo-app CLI takes a --template flag — a built-in name or any GitHub repo:
# Default template (blank TypeScript + Expo Router tabs)
npx create-expo-app@latest my-app
# Pick a specific template
npx create-expo-app@latest my-app --template blank-typescript
# Start from any GitHub repo template
npx create-expo-app@latest my-app --template https://github.com/user/repoThe official templates
| Prop | Type | Default | Description |
|---|---|---|---|
| default | Expo Router + tabs | TypeScript | The recommended start — file-based routing, example tabs. |
| blank | Minimal | JavaScript | One screen, nothing else. Build up from scratch. |
| blank-typescript | Minimal | TypeScript | Same as blank, typed. |
| tabs | Bottom tabs | TypeScript | Expo Router with a tab layout scaffolded. |
When a template isn’t enough
Templates give you plumbing, not a product. You still build every screen, wire the data, and handle auth by hand. That’s fine for learning — but if you’re starting a real app, a generic template leaves 90% of the work. This is where describing your app and generating a real, structured Expo project (screens, nav, and data already wired) saves the most time.
Gotchas
- Templates go stale. A repo template pinned to an old Expo SDK can break on install — prefer the official templates or a recently updated repo.
- The
defaulttemplate now uses Expo Router (file-based routing), not the old React Navigation setup many tutorials still show. - After cloning a GitHub template, run
npx expo installto fix native dependency versions for your SDK.
FAQ
What’s the best Expo template to start with? The default template (Expo Router + TypeScript) for most apps; use blank-typescript if you want a clean slate.
How do I use a custom template? Pass a GitHub URL to --template.