🚀 Production-Ready Expo Starter Kit - Mobile app template with 20+ pre-built UI components, TypeScript, NativeWind (Tailwind CSS), and platform-specific behaviors for iOS/Android.

Stop building UI components from scratch! This Expo starter template comes with:
/app/(tabs)/index.tsx) - Interactive component gallery/app/(tabs)/menu-demo.tsx) - Hamburger menu implementation/app/(tabs)/permissions-demo.tsx) - Permission management UI├── app/ # 📱 Expo Router screens
│ ├── (tabs)/ # 📊 Tab navigation
│ │ ├── index.tsx # Component showcase
│ │ ├── menu-demo.tsx # Menu examples
│ │ └── permissions-demo.tsx # Permission examples
│ └── _layout.tsx # 🎨 Root layout
├── components/
│ ├── ui/ # 🎨 UI component library (20+ components)
│ └── error-boundary/ # Error handling components
├── hooks/ # 🪝 Custom React hooks
├── constants/ # 📌 App constants & colors
├── config/ # ⚙️ App configuration
├── assets/ # 🖼️ Images, fonts, etc.
Some features require a development build instead of Expo Go: - Push Notifications - Requires development build (SDK 53+) - Camera - May have limited functionality - Other native modules - Some features work better in dev builds
To create a development build:
npx eas build --profile development --platform ios
npx eas build --profile development --platform android
Clone the template
bash
git clone https://github.com/yourusername/expo-starter-template.git my-app
cd my-app
Install dependencies
bash
npm install
# or
yarn install
Start the development server
bash
npx expo start
Run on your device
i for iOS simulatora for Android emulatorexpo-nativewind-template/
├── app/ # App routes (Expo Router)
│ ├── (tabs)/ # Tab navigation screens
│ │ ├── _layout.tsx # Tab layout configuration
│ │ ├── index.tsx # UI component showcase
│ │ ├── menu-demo.tsx # Hamburger menu demo
│ │ └── permissions-demo.tsx # Permissions demo
│ ├── _layout.tsx # Root layout with providers
│ └── +not-found.tsx # 404 screen
├── components/
│ └── ui/ # UI component library
│ ├── button.tsx
│ ├── card.tsx
│ ├── dialog.tsx
│ ├── sheet.tsx
│ ├── theme.tsx # Theme provider
│ └── ... # Other components
├── assets/ # Images, fonts, etc.
├── hooks/ # Custom React hooks
├── constants/ # App constants
└── package.json
import { Button, Text, Card, SafeAreaView } from '@/components/ui';
export default function MyScreen() {
return (
<SafeAreaView className="flex-1 p-4">
<Card>
<Text variant="h2">Welcome!</Text>
<Button onPress={() => console.log('Pressed')}>
<Text>Get Started</Text>
</Button>
</Card>
</SafeAreaView>
);
}
Components automatically adapt to the platform:
// Button uses TouchableOpacity on iOS, Pressable with ripple on Android
<Button onPress={handlePress}>
<Text>Platform Adaptive Button</Text>
</Button>
// Dialog animations differ by platform
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent>
{/* iOS: slide animation, Android: fade animation */}
</DialogContent>
</Dialog>
import { PermissionRequester, useCameraPermissions } from '@/components/ui';
// Using the component
<PermissionRequester permission="location">
{({ status, requestPermission }) => (
<Button onPress={requestPermission}>
<Text>{status === 'granted' ? 'Access Granted' : 'Request Access'}</Text>
</Button>
)}
</PermissionRequester>
// Using the hook for camera (special case)
const [permission, requestPermission] = useCameraPermissions();
This template uses NativeWind (Tailwind for React Native):
// Using className for styling
<View className="flex-1 bg-background p-4">
<Text className="text-lg font-bold text-primary">Hello World</Text>
<Button className="mt-4" variant="secondary">
<Text>Click me</Text>
</Button>
</View>
// Dark mode is automatic
<Text className="text-foreground">Adapts to dark/light mode</Text>
Edit global.css to customize your theme:
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
/* ... other colors */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* ... dark mode colors */
}
}
/components/ui//components/ui/index.tsFor platform-specific implementations:
components/ui/
├── button.tsx # Shared logic
├── button.ios.tsx # iOS specific (optional)
└── button.android.tsx # Android specific (optional)
# iOS
eas build --platform ios --profile development
# Android
eas build --platform android --profile development
# iOS
eas build --platform ios --profile production
# Android
eas build --platform android --profile production
| Library | Version | Description | Documentation |
|---|---|---|---|
| Expo SDK | ~53.0.0 | React Native framework | Docs |
| React Native | 0.74.5 | Mobile framework | Docs |
| TypeScript | ^5.3.3 | Type safety | Docs |
| Expo Router | ~3.5.23 | File-based routing | Docs |
| NativeWind | ^4.0.0 | Tailwind for RN | Docs |
| Library | Purpose | Documentation |
|---|---|---|
| @gorhom/bottom-sheet | Bottom sheets | Docs |
| react-native-gesture-handler | Gesture handling | Docs |
| react-native-reanimated | Animations | Docs |
| lucide-react-native | Icon library | Icons |
| class-variance-authority | Component variants | Docs |
| Library | Purpose | Documentation |
|---|---|---|
| expo-camera | Camera access | API |
| expo-location | Location services | API |
| expo-media-library | Photo library | API |
| expo-notifications | Push notifications | API |
| expo-contacts | Contacts access | API |
expo starter template, expo ui components, react native starter kit, expo typescript template, react native ui kit, expo tailwind template, nativewind starter, expo component library, react native boilerplate, expo production template, mobile app starter, cross-platform ui components
Can I use this template for commercial projects?
Yes! This template is MIT licensed, meaning you can use it for commercial projects, modify it, and distribute it.
How do I add custom colors to the theme?
Edit the global.css file and add your custom colors to the :root and .dark selectors. NativeWind will automatically generate the utility classes.
Do the components support iPad/tablets?
Yes, the components are responsive and work on tablets. You may want to adjust some layouts for larger screens using responsive utilities.
Can I use this with React Native CLI instead of Expo?
While this template is optimized for Expo, most components will work with React Native CLI. You'll need to replace Expo-specific packages with their React Native equivalents.
If this template helps you build your app faster, please consider:
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)This project is licensed under the MIT License - see the LICENSE file for details.
Current version: 0.1.0 - See CHANGELOG.md for version history.
Built with ❤️ for the React Native community
If you found this helpful, please ⭐ the repository!
$ claude mcp add expo-nativewind-template \
-- python -m otcore.mcp_server <graph>