@varunindiit/create-expo-starter
v1.0.0
Published
Production-ready Expo (SDK 56) starter: expo-router auth flow, bottom tabs, Redux Toolkit, theming, i18n, SVG support, API/service layer and reusable components. Scaffolds a fully renamed project in seconds.
Maintainers
Readme
create-expo-starter
A CLI that scaffolds a production-ready Expo (SDK 56) app in seconds. Answer one prompt (the project name) and you get a fully wired, renamed project that runs immediately — no extra setup.
npx @varunindiit/create-expo-starter
# or
npx @varunindiit/create-expo-starter my-cool-app --bundle-id com.acme.coolWhat you get
A complete, scalable architecture copied from a real app:
src/
├── app/ # expo-router routes (file-based navigation)
│ ├── _layout.tsx # root navigator + global providers + auth guard
│ ├── (auth)/ # auth flow (login, …) — shown when logged out
│ └── (tabs)/ # bottom-tab app — shown when logged in
├── components/ # reusable UI: Button, Input, Text, Header, Container,
│ # BottomSheet, ImagePickerSheet, Common/*, Icon, …
├── redux/ # Redux Toolkit store + feature slices (auth, app, …)
├── services/ # axios api client, Config, storage (MMKV), places
├── theme/ # colors, fonts, spacing, typography
├── localization/ # i18next setup + en/fr resources
├── hooks/ # shared hooks (useCurrentLocation, …)
├── utils/ # constants + helper functions
├── types/ # shared TypeScript types
└── assets/ # fonts, images, svg icons (SVG-as-component support)Highlights
- expo-router file-based navigation with a declarative
Stack.Protectedauth guard — the auth flow and the tab app are mounted based onstate.auth.isLoggedIn, no manual redirects. - Bottom tabs via a custom
BottomTabBar. - Redux Toolkit store pre-wired with feature slices.
- axios API layer with token interceptor +
mocked()helper, centralisedConfig, and MMKV storage. - Theme system (colors / fonts / spacing) and i18n (i18next).
- SVG support via
react-native-svg-transformer(import.svgas a component) — Metro + TypeScript already configured. - Environment config: dynamic
app.config.js+.env(auto-seeded from.env.example) with a layered, typedConfighelper —EXPO_PUBLIC_*vars for client-safe values plusexpo.extra(viaexpo-constants) for build-time config and EAS secrets. - EAS build ready:
eas.jsonwithdevelopment/preview/productionprofiles wired toAPP_ENV. - TypeScript strict, path alias
@/*→src/*. - Reanimated 4, gesture-handler, safe-area, keyboard-controller, flash-message and other common packages preinstalled.
CLI behaviour
When you run the CLI it:
- Asks for the project name (and a bundle identifier, with a sensible default).
- Creates a new project directory and copies the template.
- Automatically replaces the project name everywhere —
package.jsonname,app.json(expo.name,slug,scheme), the iOSbundleIdentifier, the Androidpackage, and any other references. - Optionally installs dependencies and initialises git.
Options
| Flag | Description |
| -------------------- | --------------------------------------------- |
| [project-name] | Project name (positional). Prompted if omitted |
| --bundle-id <id> | Reverse-DNS identifier, e.g. com.acme.app |
| --no-install | Skip dependency installation |
| --no-git | Skip git initialisation |
| -y, --yes | Accept all defaults, no prompts |
| -h, --help | Show help |
After scaffolding
cd <project-name>
npm install # if you skipped --install
npm start # then press i / a / wBuilt for Expo SDK 56. Review the versioned docs at https://docs.expo.dev/versions/v56.0.0/ before upgrading.
License
MIT
