The fastest way to bootstrap production-ready Expo React Native apps
Quick Start β’ Features β’ What You Get β’ Tech Stack β’ Contributing
Init Expo App is a CLI tool that generates fully-configured Expo React Native applications with a modern tech stack in seconds. Stop wasting hours setting up NativeWind, state management, API layers, and navigationβstart building your app immediately.
Think of it as create-t3-app but for mobile development.
npx init-expo-app my-appThat's it. One command to get a production-ready mobile app template.
Every React Native developer knows the pain:
| β Without Init Expo App | β With Init Expo App |
|---|---|
| 2-4 hours setting up a new project | 30 seconds to get started |
| Manually configuring NativeWind, Tailwind | Pre-configured and working |
| Setting up state management patterns | Zustand store ready to use |
| Creating API layer from scratch | Axios client with interceptors |
| Building auth screens again and again | Login, Signup, Home screens included |
| Figuring out Expo Router setup | File-based routing configured |
| Inconsistent project structures | Clean, scalable architecture |
Save 4+ hours on every new project.
- Node.js 16+
- npm or yarn
# Using npx (recommended - no installation needed)
npx init-expo-app my-app
# Navigate to your app
cd my-app
# Start developing
npx expo start# Install globally
npm install -g init-expo-app
# Use it anywhere
init-expo-app my-appThe CLI will ask you to choose which features you want:
? Add NativeWind (Tailwind CSS for React Native)? Yes
? Add Zustand (state management)? Yes
? Add Axios (API client)? Yes
? Add environment variables support? Yes
All options are enabled by defaultβjust press Enter to accept.
Write beautiful UIs with Tailwind classes directly in React Native. No StyleSheet boilerplate.
<View className="flex-1 items-center justify-center bg-white">
<Text className="text-xl font-bold text-blue-500">Hello World</Text>
</View>Modern file-based routing. Create a file, get a route. Simple.
app/
βββ _layout.tsx β Root layout
βββ index.tsx β / (Welcome screen)
βββ login.tsx β /login
βββ signup.tsx β /signup
βββ home.tsx β /home
Lightweight, fast, and scalable state management without boilerplate.
// Already set up for you
const { user, setUser, logout } = useAppStore();Pre-configured API client with interceptors for auth tokens and error handling.
import api from './src/api/client';
const response = await api.get('/users');Login, Signup, and Home screens with:
- Form validation
- Loading states
- Error handling
- Navigation flow
Scalable folder structure following best practices.
my-app/
βββ app/ # Expo Router (file-based routing)
β βββ _layout.tsx # Root layout with global CSS
β βββ index.tsx # Welcome/Start screen
β βββ login.tsx # Login screen with validation
β βββ signup.tsx # Signup screen with validation
β βββ home.tsx # Home screen (authenticated)
β
βββ src/
β βββ api/ # API layer
β β βββ client.ts # Axios instance with interceptors
β β βββ services.ts # API service functions
β β
β βββ components/
β β βββ ui/ # Reusable UI components
β β βββ Button.tsx # Button with variants
β β βββ Input.tsx # Input with validation
β β βββ Card.tsx # Card container
β β
β βββ store/ # State management
β β βββ useAppStore.ts # Zustand store
β β
β βββ hooks/ # Custom React hooks
β β βββ useToggle.ts
β β
β βββ utils/ # Helper functions
β β βββ helpers.ts
β β
β βββ constants/ # App constants
β β βββ theme.ts # Colors, spacing, fonts
β β
β βββ config/ # Configuration
β β βββ env.ts # Environment variables
β β
β βββ types/ # TypeScript types
β βββ index.ts
β
βββ .env # Environment variables
βββ .env.example # Environment template
βββ global.css # Tailwind CSS entry
βββ tailwind.config.js # Tailwind configuration
βββ metro.config.js # Metro bundler config
βββ babel.config.js # Babel config for NativeWind
βββ app.json # Expo configuration
| Technology | Purpose | Version |
|---|---|---|
| Expo | React Native framework | SDK 54 |
| TypeScript | Type safety | 5.x |
| Expo Router | File-based navigation | 6.x |
| NativeWind | Tailwind CSS for RN | 4.x |
| Zustand | State management | 5.x |
| Axios | HTTP client | 1.x |
- Indie developers who want to ship mobile apps fast
- Startups building MVPs without wasting time on setup
- Freelancers starting new client projects
- Hackathon participants who need to move quickly
- Teams who want consistent project structure
- Developers learning React Native with best practices
- Projects that need custom navigation (not Expo Router)
- Apps that can't use NativeWind for styling
- Projects with very specific architecture requirements
Want to contribute or customize the CLI? Here's how to run it locally:
# Clone the repository
git clone https://github.com/Heisenberg300604/init-expo-app.git
cd init-expo-app
# Install dependencies
npm install
# Link the package globally
npm link
# Now you can use it locally
init-expo-app test-appinit-expo-app/
βββ bin/
β βββ init-expo-app.js # CLI entry point
β
βββ src/
β βββ index.js # Main orchestrator
β βββ prompts.js # Interactive prompts
β β
β βββ modules/ # Feature modules
β β βββ nativewind.js # NativeWind setup
β β βββ zustand.js # Zustand setup
β β βββ axios.js # Axios setup
β β βββ envConfig.js # Environment setup
β β βββ navigation.js # Expo Router setup
β β βββ folderStructure.js # Folder & components
β β
β βββ utils/ # Utilities
β βββ installer.js # npm install wrapper
β βββ patcher.js # File patching utilities
β
βββ package.json
We love contributions! Here's how you can help:
- π Report Bugs - Open an issue with reproduction steps
- π‘ Suggest Features - Open an issue with your idea
- π Improve Docs - Fix typos, add examples
- π§ Submit PRs - Fix bugs or add features
# 1. Fork the repository
# 2. Clone your fork
git clone https://github.com/YOUR_USERNAME/init-expo-app.git
# 3. Create a feature branch
git checkout -b feature/amazing-feature
# 4. Make your changes
# 5. Test locally
npm link
init-expo-app test-app
# 6. Commit your changes
git commit -m "feat: add amazing feature"
# 7. Push to your fork
git push origin feature/amazing-feature
# 8. Open a Pull RequestWe use Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changeschore:Maintenance tasks
If this project helped you, please consider giving it a star! It helps others discover it.
Made with β€οΈ by Nibedan