react-native

React Native with Expo framework for building native mobile apps on Android, iOS, and web from a single TypeScript codebase. Covers Expo Router file-based navigation (stack, tabs, drawer), EAS Build/Submit/Update for CI/CD and OTA updates, expo-dev-client for custom development builds, Expo Modules API for native Swift/Kotlin modules, core RN patterns (StyleSheet, FlatList, Platform-specific code), native device APIs (camera, notifications, haptics), and NativeWind for Tailwind CSS styling. Use when building React Native apps with Expo, configuring Expo Router navigation, setting up EAS Build pipelines, implementing OTA updates, creating native modules, or integrating device APIs like camera and push notifications.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "react-native" with this command: npx skills add oakoss/agent-skills/oakoss-agent-skills-react-native

React Native with Expo

Overview

Expo is an open-source framework for building universal native apps with React Native from a single TypeScript codebase. It provides file-based routing (Expo Router), cloud build services (EAS Build/Submit/Update), and a rich set of native modules for device APIs.

When to use: Mobile apps targeting iOS and Android, universal apps with web support, projects needing OTA updates, apps requiring native device APIs (camera, notifications, haptics), teams preferring managed infrastructure over bare React Native.

When NOT to use: Apps requiring heavy custom native code incompatible with Expo Modules API, brownfield integration into existing native apps, apps with native-only CI/CD requirements.

Quick Reference

PatternAPIKey Points
Stack navigation<Stack> from expo-routerFile-based, _layout.tsx defines navigator
Tab navigation<Tabs> from expo-router(tabs) directory group with _layout.tsx
Drawer navigation<Drawer> from expo-router/drawerRequires @react-navigation/drawer
Typed routeshref with /(group)/routeEnable typed-routes in app.json
Dev buildexpo-dev-clientCustom native code + dev tools
EAS Buildeas build --profile productionCloud builds for app stores
EAS Submiteas submit -p ios / -p androidAutomated store submission
OTA Updateeas update --branch productionJS-only updates, no rebuild needed
Native moduleExpo Modules APISwift/Kotlin with expo-module.config.json
Platform codePlatform.select() / .ios.tsxPer-platform logic or entire files
Styled listsFlatList / FlashListVirtualized, keyExtractor required
Cameraexpo-cameraPermissions via useCameraPermissions()
Notificationsexpo-notificationsPush tokens via getExpoPushTokenAsync()
Hapticsexpo-hapticsimpactAsync, notificationAsync
Tailwind (RN)NativeWind v4className prop, Tailwind CSS in RN

Common Mistakes

MistakeCorrect Pattern
Using react-navigation directly instead of Expo RouterExpo Router wraps React Navigation with file-based routing
Forgetting _layout.tsx in route directoriesEvery directory with routes needs a layout file
Using expo start for custom native codeUse expo start --dev-client with expo-dev-client
Running eas update after native dependency changesNative changes require eas build, OTA is JS-only
Hardcoding platform checks with ifUse Platform.select() or platform-specific file extensions
Not requesting permissions before accessing device APIsAlways check/request permissions before camera, notifications
Using ScrollView for long listsUse FlatList or FlashList for virtualized rendering
Inline styles in render functionsDefine styles with StyleSheet.create() outside component
Missing keyExtractor on FlatListAlways provide keyExtractor for stable list rendering
Importing from react-native for Expo-provided APIsPrefer expo-* packages over react-native equivalents

Delegation

  • Pattern discovery: Use Explore agent
  • Build/deployment review: Use Task agent
  • Code review: Delegate to code-reviewer agent

If the react-patterns skill is available, delegate React component patterns and hooks to it. If the tanstack-query skill is available, delegate data fetching and caching to it. If the zustand skill is available, delegate client-side state management to it. If the vitest-testing skill is available, delegate unit and component testing patterns to it. If the tailwind skill is available, delegate Tailwind CSS utility patterns to it (NativeWind uses Tailwind CSS syntax). If the accessibility skill is available, delegate mobile accessibility patterns to it.

References

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

github-cli

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

tanstack-cli

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

typescript-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

tanstack-devtools

No summary provided by upstream source.

Repository SourceNeeds Review