Source profileQuality 93/100

agents-inc/skills/src/skills/mobile-framework-react-native/SKILL.md

mobile-framework-react-native

React Native mobile development patterns - New Architecture (Fabric, TurboModules, JSI), component architecture, React Navigation 7+, FlashList v2 optimization, gestures with Reanimated 4, platform-specific code, React 19 features

Source repository stars
23
Declared platforms
0
Static risk flags
0
Last source update
2026-08-09
Source checked
2026-08-28

Decision brief

What it does: where it fits

Quick Guide: Build cross-platform mobile apps with React Native's New Architecture (default since 0.76). Use FlashList for performant lists (or FlatList with proper optimization). Use type-safe navigation hooks with static or dynamic API. Keep components small, memoize callbacks…

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/agents-inc/skills --skill "src/skills/mobile-framework-react-native"
    Safe inspection promptEditorial

    Inspect the Agent Skill "mobile-framework-react-native" from https://github.com/agents-inc/skills/blob/81d43a51211aca12c85dcc16085fa99014ec548e/src/skills/mobile-framework-react-native/SKILL.md at commit 81d43a51211aca12c85dcc16085fa99014ec548e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      CRITICAL: Before Using This Skill

      All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering, import type, named constants)

      Building cross-platform iOS and Android mobile applicationsCreating native mobile UIs with React patternsImplementing mobile navigation with stack, tab, or drawer patterns
    2. 02

      Philosophy

      React Native enables building native mobile apps using React patterns. The key insight is that mobile has different constraints than web: performance matters more, platform conventions differ, and users expect native feel.

      New Architecture first - React Native 0.76+ uses the New Architecture by default (Fabric, TurboModules, JSI, bridgeless mode)Platform-first thinking - iOS and Android have different UX conventions (haptics, ripples, navigation patterns)Performance by default - Mobile devices are constrained; use FlashList/FlatList, memoize callbacks, avoid inline styles
    3. 03

      Core Patterns

      Build components with TypeScript, accessibility props, and platform awareness. Key concerns: use Pressable over TouchableOpacity, include accessibilityRole/accessibilityState, use testID for E2E tests, and memoize styles with useMemo.

      Build components with TypeScript, accessibility props, and platform awareness. Key concerns: use Pressable over TouchableOpacity, include accessibilityRole/accessibilityState, use testID for E2E tests, and memoize style…Why good: accessibilityRole/State for screen readers, testID for E2E, Pressable supports androidripple unlike TouchableOpacitySee examples/core.md for full component with forwardRef, variants, and loading state.
    4. 04

      Pattern 1: Component Architecture

      Build components with TypeScript, accessibility props, and platform awareness. Key concerns: use Pressable over TouchableOpacity, include accessibilityRole/accessibilityState, use testID for E2E tests, and memoize styles with useMemo.

      Build components with TypeScript, accessibility props, and platform awareness. Key concerns: use Pressable over TouchableOpacity, include accessibilityRole/accessibilityState, use testID for E2E tests, and memoize style…Why good: accessibilityRole/State for screen readers, testID for E2E, Pressable supports androidripple unlike TouchableOpacitySee examples/core.md for full component with forwardRef, variants, and loading state.
    5. 05

      Pattern 2: Safe Area and Keyboard Handling

      Handle device notches, status bars, and keyboard properly. Use react-native-safe-area-context (RN's built-in SafeAreaView is deprecated in 0.81+).

      Handle device notches, status bars, and keyboard properly. Use react-native-safe-area-context (RN's built-in SafeAreaView is deprecated in 0.81+).Why good: SafeAreaView handles notches/Dynamic Island, KeyboardAvoidingView prevents keyboard overlap, Platform.select handles iOS/Android differences

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score93/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars23SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    agents-inc/skills
    Skill path
    src/skills/mobile-framework-react-native/SKILL.md
    Commit
    81d43a51211aca12c85dcc16085fa99014ec548e
    License
    MIT
    Collected
    2026-08-28
    Default branch
    main
    View the original SKILL.md

    React Native Development Patterns

    Quick Guide: Build cross-platform mobile apps with React Native's New Architecture (default since 0.76). Use FlashList for performant lists (or FlatList with proper optimization). Use type-safe navigation hooks with static or dynamic API. Keep components small, memoize callbacks passed to lists, and test on both platforms from day one.


    <critical_requirements>

    CRITICAL: Before Using This Skill

    All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering, import type, named constants)

    (You MUST use FlashList (preferred) or FlatList for lists with more than 20 items - NEVER ScrollView with .map() for long lists)

    (You MUST memoize renderItem callbacks and use stable keyExtractor functions - avoid key props on FlashList items as it breaks recycling)

    (You MUST use react-native-safe-area-context for safe areas - React Native's built-in SafeAreaView is deprecated in 0.81+ and will be removed)

    (You MUST test on BOTH iOS AND Android from day one - platform differences cause bugs)

    (You MUST use Platform.select() or platform-specific files for platform differences - shadows, fonts, and feedback differ)

    (You MUST be aware the New Architecture is enabled by default since React Native 0.76 - Fabric, TurboModules, and bridgeless mode)

    </critical_requirements>


    Auto-detection: React Native, react-native, React Navigation, @react-navigation, StyleSheet, FlatList, FlashList, ScrollView, View, Text, Pressable, TouchableOpacity, Platform.OS, Platform.select, SafeAreaView, KeyboardAvoidingView, Reanimated, Gesture Handler, TurboModules, Fabric, JSI, New Architecture

    When to use:

    • Building cross-platform iOS and Android mobile applications
    • Creating native mobile UIs with React patterns
    • Implementing mobile navigation with stack, tab, or drawer patterns
    • Optimizing list performance with FlashList/FlatList and virtualization
    • Adding gestures and animations with Reanimated 4
    • Handling platform-specific code for iOS vs Android differences
    • Working with React Native's New Architecture (Fabric, TurboModules, JSI)

    Key patterns covered:

    • New Architecture fundamentals (Fabric, TurboModules, JSI, bridgeless mode)
    • Component architecture with accessibility props and platform-specific patterns
    • React Navigation 7+ with type-safe hooks, static API, and auth flows
    • FlashList/FlatList optimization with memoization and cell recycling
    • Platform-specific code with Platform.select and file extensions
    • Safe area and keyboard handling
    • React 19 features (React Native 0.78+): useOptimistic, use, ref as props

    When NOT to use:

    • Web-only React applications (use standard React patterns)
    • React Native Web hybrid apps (requires additional considerations)
    • Flutter, Swift, or Kotlin native development

    Detailed Resources:


    Philosophy

    React Native enables building native mobile apps using React patterns. The key insight is that mobile has different constraints than web: performance matters more, platform conventions differ, and users expect native feel.

    Core principles:

    1. New Architecture first - React Native 0.76+ uses the New Architecture by default (Fabric, TurboModules, JSI, bridgeless mode)
    2. Platform-first thinking - iOS and Android have different UX conventions (haptics, ripples, navigation patterns)
    3. Performance by default - Mobile devices are constrained; use FlashList/FlatList, memoize callbacks, avoid inline styles
    4. Native feel matters - Use native components, proper keyboard handling, safe area insets
    5. Type safety prevents bugs - Type navigation params, props, and native module interfaces
    6. Test both platforms early - Platform bugs compound over time; test daily on both

    New Architecture (React Native 0.76+):

    The New Architecture removes the legacy bridge and provides:

    • Fabric - Modern rendering engine with synchronous layout effects
    • TurboModules - Lazy-loaded native modules with type-safe interfaces
    • JSI (JavaScript Interface) - Direct synchronous JS-to-native calls without serialization
    • Bridgeless Mode - Complete removal of the async bridge for better performance

    Performance improvements with New Architecture: ~15ms faster app startup (~8% improvement), ~3.8MB smaller app size (20% reduction), ~15x faster Metro resolver, ~4x faster warm builds.

    Mental model:

    React Native is NOT "write once, run anywhere" - it's "learn once, write anywhere." Expect to write some platform-specific code. The shared codebase is typically 80-95%, not 100%.


    Core Patterns

    Pattern 1: Component Architecture

    Build components with TypeScript, accessibility props, and platform awareness. Key concerns: use Pressable over TouchableOpacity, include accessibilityRole/accessibilityState, use testID for E2E tests, and memoize styles with useMemo.

    // Key pattern: accessibility + testID + memoized styles
    <Pressable
      ref={ref}
      style={buttonStyle}
      onPress={handlePress}
      disabled={disabled}
      testID={testID}
      accessibilityRole="button"
      accessibilityState={{ disabled }}
    >
      <Text style={styles.text}>{children}</Text>
    </Pressable>
    

    Why good: accessibilityRole/State for screen readers, testID for E2E, Pressable supports android_ripple unlike TouchableOpacity

    See examples/core.md for full component with forwardRef, variants, and loading state.


    Pattern 2: Safe Area and Keyboard Handling

    Handle device notches, status bars, and keyboard properly. Use react-native-safe-area-context (RN's built-in SafeAreaView is deprecated in 0.81+).

    import { SafeAreaView, useSafeAreaInsets } from "react-native-safe-area-context";
    
    // Screen wrapper with safe areas
    <SafeAreaView style={{ flex: 1 }} edges={["top", "bottom"]}>
      {children}
    </SafeAreaView>
    
    // Keyboard handling for forms
    <KeyboardAvoidingView
      style={{ flex: 1 }}
      behavior={Platform.OS === "ios" ? "padding" : "height"}
      keyboardVerticalOffset={Platform.select({ ios: HEADER_HEIGHT, android: 0 })}
    >
      <ScrollView keyboardShouldPersistTaps="handled">
        <FormContent />
      </ScrollView>
    </KeyboardAvoidingView>
    

    Why good: SafeAreaView handles notches/Dynamic Island, KeyboardAvoidingView prevents keyboard overlap, Platform.select handles iOS/Android differences


    Pattern 3: Platform-Specific Code

    Handle iOS and Android differences with Platform.select for small differences, separate files (.ios.tsx/.android.tsx) for significant divergence.

    // Platform.select for shadows (iOS shadow props ignored on Android)
    const styles = StyleSheet.create({
      card: {
        ...Platform.select({
          ios: {
            shadowColor: "#000",
            shadowOffset: { width: 0, height: 2 },
            shadowOpacity: 0.1,
            shadowRadius: 4,
          },
          android: { elevation: 4 },
        }),
      },
      text: {
        fontWeight: Platform.select({ ios: "600", android: "bold" }),
      },
    });
    

    Why good: iOS shadow props are completely ignored on Android, fontWeight 100-900 unreliable on Android

    For platform-specific file splitting with haptics, see examples/core.md.


    Pattern 4: FlashList and FlatList Optimization

    Use FlashList for performant lists (cell recycling, 50% less blank area). FlashList v2 is New Architecture only. Always memoize renderItem and keyExtractor. Never add key props to FlashList items (breaks recycling).

    // Critical: memoized renderItem + no key prop on items
    const renderItem = useCallback(
      ({ item }: { item: Product }) => (
        <ProductItem item={item} onPress={onProductPress} />
      ),
      [onProductPress]
    );
    
    <FlashList
      data={products}
      renderItem={renderItem}
      estimatedItemSize={ITEM_HEIGHT} // Optional in v2, required in v1
      getItemType={(item) => item.category} // Improves recycling pool
    />
    

    Why good: useCallback prevents renderItem recreation, getItemType optimizes recycling, no key prop preserves FlashList's main benefit

    See examples/performance.md for full FlashList and FlatList optimization patterns.


    Pattern 5: React 19 Features (React Native 0.78+)

    React Native 0.78+ includes React 19 with new hooks and simplified patterns.

    import { useOptimistic } from "react";
    
    // useOptimistic - optimistic UI updates with automatic rollback
    const [optimisticMessages, addOptimisticMessage] = useOptimistic(
      messages,
      (state, newMessage: Message) => [...state, { ...newMessage, sending: true }]
    );
    
    // ref as props - no more forwardRef wrapper needed (React 19)
    function Input({ ref, placeholder, onChangeText }: InputProps) {
      return <TextInput ref={ref} placeholder={placeholder} onChangeText={onChangeText} />;
    }
    

    Why good: useOptimistic provides automatic rollback on errors, ref as props eliminates forwardRef boilerplate


    <red_flags>

    RED FLAGS

    High Priority Issues:

    • Using ScrollView + map() for lists with 50+ items - causes severe performance, use FlashList or FlatList
    • Adding key prop to FlashList items - BREAKS cell recycling, eliminates FlashList's main benefit
    • Using React Native's built-in SafeAreaView - deprecated in 0.81+, use react-native-safe-area-context
    • Not testing on both platforms - iOS/Android differences compound; test daily on both
    • Inline functions in FlatList/FlashList renderItem - creates new function every render, breaks memoization
    • Using Reanimated 4 with old architecture - Reanimated 4.x is New Architecture ONLY

    Medium Priority Issues:

    • Hardcoded colors/spacing instead of constants - breaks consistency, makes theming impossible
    • Not using Platform.select for shadows - iOS shadow props don't work on Android (use elevation)
    • Missing keyboard handling on forms - keyboard covers inputs without KeyboardAvoidingView
    • Using TouchableOpacity everywhere - Pressable is more flexible and supports android_ripple

    Gotchas & Edge Cases:

    • Android fontWeight only supports 'normal' and 'bold' reliably - 100-900 values may not work
    • iOS shadow props are completely ignored on Android - must use elevation for Android shadows
    • StatusBar backgroundColor only works on Android - iOS uses translucent status bar
    • FlatList onEndReached fires immediately if data fits screen - use onEndReachedThreshold carefully
    • KeyboardAvoidingView behavior differs: 'padding' for iOS, 'height' for Android
    • React Native doesn't have CSS cascade - each component must have complete styles
    • Text must be wrapped in <Text> component - raw strings cause crashes
    • New Architecture enabled by default in 0.76+ - some older libraries may need updates
    • FlashList v2 is New Architecture only - use v1 or FlatList if on old architecture
    • React Native 0.78+ uses React 19 - propTypes removed, forwardRef optional
    • React 19 adoption in recent SDK versions - check for breaking changes in your dependencies
    • Android 15/16 enforces edge-to-edge - must handle safe areas properly
    • Reanimated 4 requires react-native-worklets - Reanimated 3 will not work with it installed
    • boxShadow and filter props are New Architecture only - not available on legacy architecture
    • Reanimated 4: withSpring no longer uses restDisplacementThreshold/restSpeedThreshold - replaced by energyThreshold

    </red_flags>


    <critical_reminders>

    CRITICAL REMINDERS

    All code must follow project conventions in CLAUDE.md

    (You MUST use FlashList (preferred) or FlatList for lists with more than 20 items - NEVER ScrollView with .map() for long lists)

    (You MUST memoize renderItem callbacks and use stable keyExtractor functions - avoid key props on FlashList items as it breaks recycling)

    (You MUST use react-native-safe-area-context for safe areas - React Native's built-in SafeAreaView is deprecated in 0.81+ and will be removed)

    (You MUST test on BOTH iOS AND Android from day one - platform differences cause bugs)

    (You MUST use Platform.select() or platform-specific files for platform differences - shadows, fonts, and feedback differ)

    (You MUST be aware the New Architecture is enabled by default since React Native 0.76 - Fabric, TurboModules, and bridgeless mode)

    Failure to follow these rules will result in poor performance, platform-specific bugs, and broken UX on mobile devices.

    </critical_reminders>

    Frequently asked questions

    What to verify before installation and use

    What does the mobile-framework-react-native source document cover?

    Quick Guide: Build cross-platform mobile apps with React Native's New Architecture (default since 0.76). Use FlashList for performant lists (or FlatList with proper optimization). Use type-safe navigation hooks with static or dynamic API. Keep components small, memoize callbacks…

    How do I install mobile-framework-react-native?

    The source record exposes this install command: npx skills add https://github.com/agents-inc/skills --skill "src/skills/mobile-framework-react-native". Inspect the command and pinned source before running it.

    Alternatives

    Compare before choosing

    Computed 1009

    event4u-app/agent-config

    existing-ui-audit

    Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.

    Computed 97150

    UiPath/skills

    uipath-coded-apps

    UiPath Coded Apps — scaffold, build, run, and deploy Coded Web Apps and Coded Action Apps: React/TypeScript apps that call UiPath Cloud APIs via the `@uipath/uipath-typescript` SDK and ship to Automation Cloud (push/pull to Studio Web, pack, publish, deploy, OAuth-PKCE). Also generates live analytics & governance dashboards from a plain-language request, wired to tenant data via the Insights real-time API, with edit and deploy flows. For RPA→uipath-rpa, Python agents→uipath-agents, Maestro flows

    Computed 961,113

    fcakyon/claude-codex-settings

    vercel-react-view-transitions

    Guide for implementing smooth, native-feeling animations using React's View Transition API (`<ViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter/exit of components, animate list reorder, implement directional (forward/back) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view

    Computed 96224

    yonatangross/orchestkit

    json-render-catalog

    json-render component catalog patterns for AI-safe generative UI. Define Zod-typed catalogs that constrain what AI can generate, use @json-render/shadcn for 36 pre-built components, optimize specs with YAML mode, and apply the three edit modes (patch/merge/diff) for progressive updates. Use when building AI-generated UIs, defining component catalogs, or integrating json-render into React/Vue/Svelte/React Native/Ink/Next.js projects.