A production-ready React Native Expo starter template with SQLite database integration, featuring a modern tech stack with local-first data persistence, state management, testing, and code quality tools pre-configured.
- Expo SDK 54 - Latest Expo framework with React 19
- Expo Router - File-based routing for native navigation
- TypeScript - Type-safe development
- NativeWind (Tailwind CSS) - Utility-first styling for React Native
- Drizzle ORM - Type-safe database toolkit with SQLite
- Zustand - Lightweight state management
- React Query - Powerful data fetching and caching
- Gorhom Bottom Sheet - Performant bottom sheet component
- Jest & Testing Library - Comprehensive testing setup
- ESLint & Prettier - Code quality and formatting
- Husky & lint-staged - Pre-commit hooks for code quality
- Drizzle Studio - Database visualization and management
- Expo - React Native development platform
- React Native - Mobile framework
- TypeScript - Type safety
- Expo Router - File-based routing
- NativeWind - Tailwind CSS for React Native
- Gorhom Bottom Sheet - Performant bottom sheet modals
- React Native Reanimated - Smooth animations
- React Native Gesture Handler - Touch gestures
- React Native Safe Area Context - Safe area handling
- Drizzle ORM - Type-safe ORM
- Expo SQLite - Local database
- Drizzle Kit - Database migrations
- Zustand - State management
- React Query - Server state management
- Jest - Testing framework
- Testing Library - React Native testing utilities
- ESLint - Linting with Expo config
- Prettier - Code formatting
- Husky - Git hooks
- lint-staged - Run linters on staged files
- Node.js (LTS version recommended)
- npm or yarn
- Expo CLI
- For iOS: macOS with Xcode
- For Android: Android Studio with SDK
# Clone the repository
git clone <your-repo-url>
cd expo-sqlite-starter
# Or use as GitHub template
# Click "Use this template" button on GitHubnpm installUpdate app.json and package.json with your project details.
Generate your first migration after modifying db/schema.ts with npm run db:generate. The database will automatically migrate when the app starts. You can also view and manage your database with npm run db:studio.
# Start Expo dev server
npm start
# Run on specific platform
npm run android
npm run ios
npm run webexpo-sqlite-starter/
βββ app/ # Expo Router pages
β βββ index.tsx # Home screen
β βββ _layout.tsx # Root layout with providers
βββ db/ # Database configuration
β βββ client.ts # Drizzle client setup
β βββ schema.ts # Database schema definitions
βββ drizzle/ # Database migrations (auto-generated)
βββ store/ # Zustand stores
β βββ useExampleStore.ts # Example store
βββ hooks/ # Custom React hooks
β βββ useMulti.ts # Zustand multi-selector hook
βββ providers/ # React context providers
β βββ QueryProvider.tsx # React Query provider
βββ utils/ # Utility functions
βββ assets/ # Images, fonts, etc.
npm start- Start Expo development servernpm run android- Run on Android emulator/devicenpm run ios- Run on iOS simulator/devicenpm run web- Run in web browser
npm run db:generate- Generate migrations from schema changesnpm run db:migrate- Apply migrations to databasenpm run db:studio- Open Drizzle Studio GUI
npm test- Run tests oncenpm run test:watch- Run tests in watch modenpm run test:coverage- Generate coverage report
npm run lint- Run ESLint
Define your schema in db/schema.ts, generate migrations with npm run db:generate, and use the database via the db client from db/client.ts.
Create Zustand stores in the store/ directory and use React Query for server state management. See the official documentation for usage examples.
Use Tailwind CSS classes directly in your components via the className prop. Configure Tailwind in tailwind.config.js.
Run tests with npm test. Jest and Testing Library are pre-configured for React Native testing.
Husky runs lint-staged before each commit to ensure code quality. ESLint is configured with Expo recommended rules and Prettier integration.
Build for production using npx expo run:android --variant release or npx expo run:ios --configuration Release. For cloud builds, use EAS Build (recommended).
Remove unused features by uninstalling packages and deleting their directories. Add new screens in the app/ directory using file-based routing.
Clear caches with npx expo start -c. For persistent issues, reinstall dependencies with rm -rf node_modules package-lock.json && npm install.
Contributions are welcome! Feel free to open an issue or submit a pull request.
MIT License - feel free to use this starter kit for your projects.
- Expo Documentation
- React Native Documentation
- Drizzle ORM Documentation
- NativeWind Documentation
- Zustand Documentation
- React Query Documentation
For issues and questions:
- Open an issue on GitHub
- Check existing documentation
- Join the Expo community on Discord
Built with β€οΈ using Expo and React Native


