A powerful CLI tool to quickly scaffold Expo applications with optional NativeWind (TailwindCSS for React Native) integration. Get a production-ready setup in seconds with intelligent prompts and automatic configuration.
- Features
- Prerequisites
- Quick Start
- Installation
- Usage
- Command Line Options
- Interactive Mode
- Package Manager Support
- What Gets Configured
- Project Structure
- NativeWind Integration
- Examples
- Troubleshooting
- Contributing
- License
- Interactive CLI Experience - Beautiful prompts guide you through project setup
- NativeWind v4 Support - Optional TailwindCSS integration with modern architecture
- Flexible Installation - Create new projects or install in current directory
- Multiple Package Managers - Automatic detection and support for npm, yarn, pnpm, and bun
- Smart Dependency Management - Automatic dependency installation with
--no-installoverride - Template Selection - Pick from multiple Expo templates when not using NativeWind
- Auto-Configuration - Babel, Metro, TypeScript, and Tailwind configs set up automatically
- Git Integration - Automatic repository initialization with sensible defaults
- Graceful Interruption - Clean handling of Ctrl+C during installation
- Current Directory Support - Install directly into existing folders
- TypeScript Ready - Full TypeScript support out of the box
- Cross-Platform - Works on Windows, macOS, and Linux
- Node.js >= 18.0.0
- Package Manager: npm, yarn, pnpm, or bun
Create a new Expo app with NativeWind in seconds:
npx create-expo-nativewind my-appThis will launch an interactive setup where you can choose:
- Expo version
- Whether to include NativeWind
- Automatic or manual dependency installation
- Template selection (if not using NativeWind)
No installation required! Use npx to run the latest version:
npx create-expo-nativewind [project-name]Or with your preferred package manager:
# Using yarn
yarn create expo-nativewind my-app
# Using pnpm
pnpm create expo-nativewind my-app
# Using bun
bunx create-expo-nativewind my-appnpx create-expo-nativewind [project-name] [options]npx create-expo-nativewind my-appUse . as the project name to install in the current directory:
npx create-expo-nativewind .Skip prompts by providing all options via flags:
npx create-expo-nativewind my-app --nativewind --npm| Option | Description | Default |
|---|---|---|
--nativewind |
Set up project with NativeWind (TailwindCSS) | Prompted |
--template <name> |
Specify Expo template (blank, tabs, etc.) | blank |
--npm |
Use npm as package manager | Auto-detected |
--yarn |
Use yarn as package manager | Auto-detected |
--pnpm |
Use pnpm as package manager | Auto-detected |
--bun |
Use bun as package manager | Auto-detected |
--no-install |
Skip dependency installation | Prompted |
--no-git |
Skip Git repository initialization | Enabled |
-v, --version |
Display CLI version | - |
-h, --help |
Show help information | - |
When not using NativeWind, you can choose from these Expo templates:
blank- A minimal app with a single screenblank-typescript- Minimal app with TypeScript configuredtabs- Several example screens with tab navigationnavigation- Basic navigation setup included
When you run the CLI without all required options, it enters interactive mode with intelligent prompts:
-
Project Name (if not provided)
- Validates against npm package naming rules
- Supports
.for current directory
-
Expo Version
- Choose any version or use
latest - Default:
latest
- Choose any version or use
-
NativeWind Setup
- Would you like to set up NativeWind?
- Default:
Yes
-
Template Selection (only if not using NativeWind)
- Pick from available Expo templates
- Default:
blank-typescript
The CLI automatically detects your package manager from:
- Command invocation -
npx,yarn create,pnpm create,bunx - Environment variables -
npm_config_user_agent - Explicit flags -
--npm,--yarn,--pnpm,--bun
| Manager | Install Command | Run Scripts |
|---|---|---|
| npm | npm install |
npm run start |
| yarn | yarn install |
yarn start |
| pnpm | pnpm install |
pnpm start |
| bun | bun install |
bun run start |
All projects include:
- Expo SDK with React Native
- Metro bundler configuration
- TypeScript support
- ESLint configuration
- Git repository (unless
--no-git) - Platform-specific configurations (iOS, Android, Web)
Additional setup includes:
nativewind@^4.0.1- TailwindCSS for React Nativetailwindcss@^3.4.17- Core TailwindCSS frameworkreact-native-reanimated@~3.17.4- Animation libraryreact-native-safe-area-context@5.4.0- Safe area handlingprettier-plugin-tailwindcss@^0.5.11- Code formatting
-
tailwind.config.jsmodule.exports = { content: [ "./App.{js,jsx,ts,tsx}", "./app/**/*.{js,jsx,ts,tsx}", "./components/**/*.{js,jsx,ts,tsx}", ], presets: [require("nativewind/preset")], theme: { extend: {} }, plugins: [], };
-
babel.config.jsmodule.exports = function (api) { api.cache(true); return { presets: [ ["babel-preset-expo", { jsxImportSource: "nativewind" }], "nativewind/babel", ], }; };
-
metro.config.jsconst { getDefaultConfig } = require("expo/metro-config"); const { withNativeWind } = require('nativewind/metro'); const config = getDefaultConfig(__dirname); module.exports = withNativeWind(config, { input: './app/global.css' });
-
app/global.css@tailwind base; @tailwind components; @tailwind utilities;
-
nativewind-env.d.ts/// <reference types="nativewind/types" /> -
app.json- Adds
"bundler": "metro"to web configuration
- Adds
my-app/
├── app/
│ ├── (tabs)/ # Tab navigation (if using tabs template)
│ ├── _layout.tsx # Root layout
│ └── index.tsx # Home screen
├── assets/ # Images, fonts, etc.
├── node_modules/
├── .gitignore
├── app.json # Expo configuration
├── babel.config.js
├── metro.config.js
├── package.json
├── tsconfig.json
└── README.md
my-app/
├── app/
│ ├── global.css # Tailwind styles
│ ├── _layout.tsx
│ └── index.tsx # Updated with NativeWind examples
├── assets/
├── node_modules/
├── .gitignore
├── app.json
├── babel.config.js # NativeWind configured
├── metro.config.js # NativeWind configured
├── nativewind-env.d.ts # TypeScript declarations
├── package.json
├── tailwind.config.js # Tailwind configuration
├── tsconfig.json
└── README.md
After setup, use Tailwind classes directly in your React Native components:
import { View, Text } from 'react-native';
export default function App() {
return (
<View className="flex-1 items-center justify-center bg-white">
<Text className="text-3xl font-bold text-purple-600">
Welcome to Expo + NativeWind!
</Text>
<Text className="mt-4 text-lg text-gray-600">
Start building your app with TailwindCSS
</Text>
</View>
);
}The global CSS file is automatically imported in your root component:
import "./global.css"; // Imports Tailwind stylesNativeWind supports responsive modifiers:
<View className="w-full md:w-1/2 lg:w-1/3">
<Text className="text-sm md:text-base lg:text-lg">
Responsive text
</Text>
</View>Extend the theme in tailwind.config.js:
module.exports = {
theme: {
extend: {
colors: {
primary: '#3B82F6',
secondary: '#10B981',
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
},
};npx create-expo-nativewind my-app --nativewind --yarn --no-gitnpx create-expo-nativewind . --nativewindnpx create-expo-nativewind my-app --no-install
cd my-app
npm install # Install later manuallynpx create-expo-nativewind my-app --template tabs --pnpmbunx create-expo-nativewind my-app --nativewind --bunAfter creating your app:
# Navigate to project directory
cd my-app
# Start the development server
npm startThen press:
a- Open on Android emulator/devicei- Open on iOS simulatorw- Open in web browserr- Reload the appm- Toggle menu
# Android
npm run android
# iOS
npm run ios
# Web
npm run webIf automatic installation fails, install manually:
npm install
# or
yarn install
# or
pnpm install
# or
bun install- Make sure
global.cssis imported in your root component - Verify
metro.config.jsincludes NativeWind configuration - Clear Metro cache:
npx expo start -c - Restart the development server
- Ensure
nativewind-env.d.tsexists in project root - Restart TypeScript server in your editor
- Run
npx tsc --noEmitto check for errors
If the wrong package manager is detected, specify explicitly:
npx create-expo-nativewind my-app --npm
# or --yarn, --pnpm, --bunThe CLI will warn if installing in non-empty directory. Confirm to proceed or choose different location.
- Expo Documentation - Learn about Expo
- NativeWind Documentation - NativeWind guides and API
- TailwindCSS Documentation - Tailwind utility classes
- React Native Documentation - React Native fundamentals
MIT License - see LICENSE file for details.
Prince Patel
- GitHub: @imprince26
If you encounter issues or have questions:
- Open an issue on GitHub
- Check existing issues for solutions
- Review the troubleshooting section
Made for the React Native community