chvvkrishnakumar
expo-nativewind-template
TypeScript

A production-ready Expo + React Native + TypeScript starter kit with NativeWind (Tailwind CSS), pre-styled UI components, dark mode support, and Expo Router navigation โ€” designed for building beautiful cross-platform iOS & Android apps quickly. This template brings together best-in-class tools and patterns, including shadcn-style component archite

Last updated Jun 30, 2026
51
Stars
7
Forks
0
Issues
+1
Stars/day
Attention Score
42
Language breakdown
TypeScript 97.6%
JavaScript 1.5%
CSS 0.9%
โ–ธ Files click to expand
README

๐Ÿ“ฑ Expo NativeWind Template

๐Ÿš€ 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.

Version Expo React Native TypeScript NativeWind License: MIT

20+ Pre-built UI Components โ€ข TypeScript โ€ข NativeWind โ€ข Expo Router โ€ข Dark Mode

๐ŸŽฏ Why This Template?

Stop building UI components from scratch! This Expo starter template comes with:

  • โœ… 20+ Pre-built Components - Buttons, Cards, Dialogs, Bottom Sheets, and more
  • โœ… Platform-Specific UI - Automatic iOS/Android adaptations
  • โœ… Dark Mode Ready - System-aware theme switching
  • โœ… Permission Management - Unified API for all device permissions
  • โœ… TypeScript First - Full type safety out of the box
  • โœ… Production Ready - Best practices and scalable architecture

๐ŸŒŸ Perfect For

  • ๐Ÿ“ฑ Mobile App MVPs - Launch faster with pre-built components
  • ๐Ÿข Enterprise Apps - Scalable architecture and TypeScript safety
  • ๐ŸŽจ Design Systems - Consistent UI across iOS and Android
  • ๐Ÿš€ Startups - Focus on your business logic, not UI implementation

๐Ÿš€ Core Features

  • ๐ŸŽจ Complete UI Component Library - 20+ pre-built components with iOS/Android platform-specific behaviors
  • ๐ŸŽฏ TypeScript - Full type safety and IntelliSense support
  • ๐Ÿ’จ NativeWind - Tailwind CSS for React Native with dark mode support
  • ๐Ÿ“ Expo Router - File-based routing with typed navigation
  • ๐Ÿ”’ Permission Management - Unified permission handling for camera, location, notifications, etc.
  • ๐Ÿ“ฑ Platform-Specific Components - Automatic iOS/Android adaptations
  • ๐ŸŒ™ Dark Mode - Built-in theme support with automatic system detection
  • โ™ฟ Accessibility - WCAG compliant components with proper ARIA labels

๐Ÿ“ฆ What's Included

UI Components

  • Layout: SafeAreaView, ScrollView, KeyboardAvoidingView
  • Typography: Text with variants (h1-h6, p, lead, muted, code)
  • Buttons: Multiple variants (primary, secondary, destructive, outline, ghost, link)
  • Forms: Input, Label, Switch, Checkbox
  • Feedback: Dialog, Sheet (Bottom Sheet), Drawer
  • Display: Card, Badge
  • Navigation: Hamburger Menu, Tab Navigation
  • Utilities: Permission Requester, Theme Provider

Demo Screens

  • UI Showcase (/app/(tabs)/index.tsx) - Interactive component gallery
  • Menu Demo (/app/(tabs)/menu-demo.tsx) - Hamburger menu implementation
  • Permissions Demo (/app/(tabs)/permissions-demo.tsx) - Permission management UI

๐Ÿ—๏ธ Project Structure

โ”œโ”€โ”€ 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.

โš ๏ธ Important Notes

Expo Go Limitations

Some features require a development build instead of Expo Go:
  • Push Notifications - Requires development build (SDK 56+)
  • 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

๐Ÿ› ๏ธ Getting Started

Prerequisites

  • Node.js 18+ and npm/yarn
  • iOS Simulator (Mac only) or Android Studio
  • Expo Go app on your physical device (optional)

Installation

  • Clone the template
git clone https://github.com/chvvkrishnakumar/expo-nativewind-template.git my-app
   cd my-app
  • Install dependencies
npm install
   # or
   yarn install
  • Start the development server
npx expo start
  • Run on your device
- Press i for iOS simulator - Press a for Android emulator - Scan QR code with Expo Go app

๐Ÿ“ Project Structure

expo-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

๐ŸŽจ Using Components

Basic Example

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> ); }

Platform-Specific Components

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>

Permission Handling

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();

๐ŸŽจ Styling with NativeWind

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>

๐Ÿ”ง Customization

Theme Colors

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 /
  }
}

Adding New Components

  • Create component in /components/ui/
  • Export from /components/ui/index.ts
  • Follow existing patterns for platform-specific behavior

๐Ÿ“ฑ Platform-Specific Files

For platform-specific implementations:

components/ui/
โ”œโ”€โ”€ button.tsx          # Shared logic
โ”œโ”€โ”€ button.ios.tsx      # iOS specific (optional)
โ””โ”€โ”€ button.android.tsx  # Android specific (optional)

๐Ÿš€ Building for Production

Development Build

# iOS
eas build --platform ios --profile development

Android

eas build --platform android --profile development

Production Build

# iOS
eas build --platform ios --profile production

Android

eas build --platform android --profile production

๐Ÿ“š Tech Stack & Resources

Core Libraries

| 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 |

UI Libraries

| 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 |

Permission Libraries

| 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 |

๐Ÿค” Frequently Asked Questions

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.

๐ŸŒŸ Show Your Support

If this template helps you build your app faster, please consider:

  • โญ Starring the repository
  • ๐Ÿฆ Sharing it on Twitter
  • ๐Ÿ’ฌ Leaving feedback in Issues
  • ๐Ÿค Contributing improvements

๐Ÿค Contributing

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.

Contributing Guidelines

  • Fork the repository
  • Create your feature branch (git checkout -b feature/AmazingFeature)
  • Commit your changes (git commit -m 'Add some AmazingFeature')
  • Push to the branch (git push origin feature/AmazingFeature)
  • Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿท๏ธ Version

Current version: 0.1.0 - See CHANGELOG.md for version history.

๐Ÿ™ Acknowledgments


Built with โค๏ธ for the React Native community
If you found this helpful, please โญ the repository!

Back to top โฌ†๏ธ

ยฉ 2026 GitRepoTrend ยท chvvkrishnakumar/expo-nativewind-template ยท Updated daily from GitHub