A production-ready React Native boilerplate that just works. Built with Expo Router, TypeScript, and offline-first architecture.
NovaRN is the ultimate React Native boilerplate that eliminates the friction of starting a new project. It's designed for developers who want to build production-ready apps without the boilerplate headaches.
β¨ Zero Configuration - Get started in seconds, not hours
π Production-Ready Security - Secure token handling built-in
π‘ Offline-First Architecture - Works even when the internet doesn't
π¨ Modern Styling - NativeWind (Tailwind CSS) for beautiful UIs
β‘ Performance Optimized - Lightweight stack with best practices
π Well Documented - Comprehensive examples and guides
π Developer Experience - TypeScript, ESLint, and more
# Create a new NovaRN app
npx create-nova-rn MyApp
# Navigate to your project
cd MyApp
# Install dependencies
npm install
# Start the development server
npx expo startThat's it! You now have a fully functional React Native app with authentication, offline support, and a rich component library.
- Zustand for in-memory auth state (user, accessToken)
- expo-secure-store for refresh tokens only
- TanStack Query for automatic 401 handling and silent refresh
Built-in optimistic updates and cache persistence with MMKV. Your app works even when the internet doesn't.
Style your components with familiar Tailwind classes:
<View className="flex-1 justify-center items-center bg-gray-100 dark:bg-gray-900 p-4">
<Text className="text-2xl font-bold text-blue-600 dark:text-blue-400">
Beautiful UI with NativeWind
</Text>
</View>- File-based routing with Expo Router
- Feature-based organization for scalable codebase
- Global error boundaries for crash recovery
- Theme management with light/dark/system mode
| Feature | NovaRN | Ignite | Expo Template |
|---|---|---|---|
| Philosophy | Expo-first, zero native code | Bare React Native | Basic Expo setup |
| Language | TypeScript only | TypeScript + JavaScript | JavaScript/TypeScript |
| Routing | Expo Router (file-based) | React Navigation (manual) | Basic navigation |
| Auth | Complete 401 handling | Manual setup | None |
| Offline | MMKV + Optimistic Updates | Manual setup | None |
| Styling | NativeWind (Tailwind) | StyleSheet | StyleSheet |
| Bundle Size | Lighter, focused stack | Heavier, more opinions | Minimal |
| Learning Curve | Gentle, follows Expo conventions | Steeper, custom patterns | Basic |
| Best For | Fast MVPs, indie devs, startups | Teams needing full native control | Learning Expo |
- Expo SDK 54+ (Expo Go + EAS Build)
- Expo Router (file-based routing)
- TypeScript (strictly typed)
- Zustand (state management)
- TanStack Query + Axios (data fetching with 401 silent refresh)
- expo-secure-store (refresh tokens only)
- MMKV (cache persistence)
- NativeWind (Tailwind CSS for React Native)
- React Native Reanimated (smooth animations)
NovaRNTemplate/
βββ app/ # ποΈ Expo Router (file-based routing)
β βββ (auth)/ # Auth group (login, signup)
β β βββ _layout.tsx # Auth layout wrapper
β β βββ login.tsx # Login screen
β βββ (app)/ # App group (protected routes)
β β βββ (tabs)/ # Tab navigator
β β β βββ _layout.tsx # Tabs layout
β β β βββ home.tsx # Home screen
β β β βββ tasks.tsx # Tasks screen (offline demo)
β β βββ _layout.tsx # App layout wrapper
β βββ _layout.tsx # Root layout (auth boundary)
β βββ index.tsx # Entry point
β
βββ src/ # π¦ Source code
β βββ features/ # Feature-based modules
β β βββ auth/ # Authentication feature
β β β βββ hooks/
β β β β βββ useAuth.ts # Auth controller
β β β βββ store/
β β β β βββ useAuthStore.ts # Auth state (memory-only)
β β β βββ components/
β β β βββ LoginForm.tsx # Login form
β β βββ tasks/ # Tasks feature
β β βββ hooks/
β β β βββ useTasks.ts # Task management
β β βββ components/
β β βββ TaskItem.tsx # Task item
β βββ shared/ # Shared functionality
β β βββ hooks/
β β β βββ useAuthBoundary.ts # Route protection
β β β βββ useForm.ts # Form handling
β β β βββ useErrorHandler.ts # Error handling
β β β βββ use-app-theme.ts # Theme management
β β βββ store/
β β β βββ useThemeStore.ts # Theme state (persisted)
β β βββ theme/
β β β βββ colors.ts # Color palette
β β β βββ space.ts # Spacing tokens
β β β βββ typography.ts # Typography tokens
β β βββ api/
β β β βββ client.ts # Axios with 401 handling
β β β βββ queryClient.ts # TanStack Query + MMKV
β β βββ providers/
β β β βββ QueryProvider.tsx # Query provider
β β βββ components/
β β β βββ ErrorBoundary.tsx # Global error boundary
β β β βββ Form.tsx # Form components
β β β βββ ThemeToggle.tsx # Theme switcher
β β βββ utils/
β β β βββ formUtils.ts # Form utilities
β β β βββ auth.ts # Auth utilities
β β β βββ authUtils.ts # Additional auth utilities
β β β βββ storage.ts # Storage utilities
β β β βββ responsive.ts # Responsive helpers
β β βββ ui/ # UI components
β β βββ button.tsx # Button component
β β βββ card.tsx # Card component
β β βββ input.tsx # Input component
β β βββ alert.tsx # Alert component
β β βββ loading.tsx # Loading component
β β βββ modal.tsx # Modal component
β β βββ checkbox.tsx # Checkbox component
β β βββ collapsible.tsx # Collapsible component
β βββ README.md # Source code documentation
β
βββ cli/ # π§° CLI Tool
β βββ index.js # CLI entry point
β βββ package.json # CLI package configuration
β
βββ .vscode/ # VS Code settings
βββ eas.json # EAS Build configuration
βββ package.json # Dependencies
- File-based routing with Expo Router
- Authentication flow with proper token handling
- State management with Zustand
- Data fetching with TanStack Query and Axios
- Secure storage for refresh tokens
- Cache persistence with MMKV
- TypeScript strict mode
- Path aliases configured (@/*)
- Feature-based organization for scalable codebase
- Theme management with light/dark/system mode
- Form handling with validation utilities
- Global error boundaries for crash recovery
- Rich UI component library for rapid development
- Dependency verification script for maintenance
- NativeWind (Tailwind CSS for React Native)
- NEVER persist access tokens β only refresh tokens in SecureStore
- Auth state (user, accessToken) lives in memory (Zustand, no persist)
- All screens live in
app/using Expo Router file-based conventions - Every new file includes a brief JSDoc comment explaining its purpose
- Always prefer explicit over magic β devs must understand every line
- Node.js 18+
- npm or yarn
- Expo Go app on your device (for development)
# Create a new NovaRN app
npx create-nova-rn MyApp
# Navigate to your project
cd MyApp
# Install dependencies
npm install
# Start the development server
npx expo start# iOS Simulator
npx expo start --ios
# Android Emulator
npx expo start --android
# Web Browser
npx expo start --web
# Physical Device
# Scan the QR code with the Expo Go appNovaRN includes a comprehensive testing setup with Jest and React Native Testing Library:
# Run all tests
npm test
# Run tests in watch mode
npm test -- --watch
# Run tests with coverage
npm test -- --coverage# Install EAS CLI
npm install -g eas-cli
# Configure your project
eas build:configure
# Build for iOS
eas build --platform ios
# Build for Android
eas build --platform androidFollow the Expo deployment guides for detailed instructions.
We love contributions! NovaRN is built by developers for developers.
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Found a friction point? That's a bug.
NovaRN is designed to be frictionless. If you hit a snag, open an issue. We treat developer experience bugs as seriously as code bugs.
MIT Β© NovaRN
Built with β€οΈ for the React Native community.
If you like NovaRN, please consider starring the repo! β
