skills/react-native-architect/SKILL.md
React Native 0.76+ architect with New Architecture, Fabric renderer, TurboModules, and production navigation/state patterns. Activate on: React Native app, RN architecture, Fabric, TurboModules, React Navigation, Expo integration, RN performance, native modules. NOT for: web-only React (use frontend-architect), Expo-specific workflows (use expo-workflow-expert), Flutter (use flutter-bloc-state-manager).
npx skillsauth add curiositech/windags-skills react-native-architectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expert in building production React Native applications with the New Architecture (Fabric + TurboModules), performant navigation, and scalable state management.
Is data persisted across app restarts?
├─ YES: Is it frequently accessed/updated?
│ ├─ YES: MMKV + Zustand (persistent store)
│ └─ NO: AsyncStorage + Context
└─ NO: Is data from server?
├─ YES: TanStack Query + optimistic updates
└─ NO: Local component complexity?
├─ Simple: useState/useReducer
├─ Cross-component: Zustand
└─ Atomic updates: Jotai
Performance requirement?
├─ 60fps critical (UI interactions, gestures)
│ └─ React Native Reanimated 3 (UI thread worklets)
├─ Layout transitions only
│ └─ Fabric's LayoutAnimation API
└─ Simple state changes
└─ Animated API or CSS transitions
Need native functionality?
├─ Existing in community: Use @react-native-community/* package
├─ Simple data access: TurboModule with Codegen spec
├─ Complex native UI: Fabric native component
└─ Heavy computation: JSI module with C++ bridge
App complexity?
├─ Single stack: Stack Navigator
├─ Tab + Stack: Nested navigators with typed routes
├─ Drawer + Tabs: Bottom Tabs inside Drawer
└─ Complex routing: Expo Router with file-based routing
Detection: Unable to resolve module, ViewManager not found, or native crashes
Diagnosis: New Architecture compatibility issues
Fix:
react-native.config.js for New Architecture flagcd ios && pod install --repo-updatenpx react-native clean && cd ios && xcodebuild cleanDetection: Memory profiler shows steady climb, app killed by OS Diagnosis: Bridge reference leaks between JS and native Fix:
Detection: Performance monitor shows JS thread >16ms, dropped frames Diagnosis: Animations running on JS thread instead of UI thread Fix:
useAnimatedStylerunOnUI() for expensive calculationsDetection: Time to Interactive profiling, user complaints Diagnosis: Bundle size or initialization bottlenecks Fix:
HermesInternal existsReact.lazy() with Suspensereact-native-performanceDetection: Users return to wrong screen, navigation stack corrupted Diagnosis: Missing navigation state persistence Fix:
NavigationContainer state persistencegetStateFromPath/getPathFromState for URL syncScenario: Displaying 10MB product catalog with images, filtering, and real-time updates.
Decision Process:
Data Transfer: 10MB JSON over old bridge = 3-5s blocking
State Strategy:
// TurboModule for efficient data transfer
const productData = await ProductCatalog.getChunkedData(chunkSize: 1000);
// Virtualized rendering
<FlashList
data={products}
estimatedItemSize={120}
renderItem={({ item }) => <ProductCard product={item} />}
onEndReached={() => fetchNextPage()}
/>
Performance Trade-offs:
What novice misses:
Expert optimization:
newArchEnabled: true in config)global.HermesInternal exists)Web-only React development → Use frontend-architect instead
Expo managed workflow specifics → Use expo-workflow-expert instead
Cross-platform mobile strategy → Use flutter-bloc-state-manager for Flutter
React Native <0.70 → Use legacy React Native skills
tools
Building resilient distributed systems with circuit breakers, retries with full-jitter exponential backoff, retry budgets (per-request 3-attempt + per-client 10% ratio per Google SRE), deadline propagation, and the cascading-failure math (4 layers × 3 retries = 64x amplification). Grounded in Resilience4j, Microsoft Cloud Patterns, AWS Architecture Blog (Marc Brooker), and Google SRE Book.
testing
Designing HTTP cache headers that work correctly across browsers, CDNs, and shared proxies — `Cache-Control` directives per RFC 9111, `stale-while-revalidate` and `stale-if-error` per RFC 5861, the Vary header for varying responses, and surrogate keys for tag-based purging. Grounded in IETF RFCs and Cloudflare/Fastly docs.
development
Use when designing or fixing a Content Security Policy on a real site, choosing between nonce-based and hash-based CSP, adding strict-dynamic, debugging "Refused to execute inline script" errors, deploying CSP in report-only mode first, configuring report-to / report-uri, or auditing an existing policy for unsafe-inline / unsafe-eval / wildcards. Triggers: "CSP blocks legitimate inline script", strict-dynamic, nonce-{RANDOM}, sha256-{HASH}, object-src none, base-uri none, frame-ancestors, Trusted Types, X-Content-Security-Policy obsolete, report-only vs enforced. NOT for general HTTP security headers (HSTS, COOP/COEP), Trusted Types deep dive, CORS configuration, or building a WAF.
tools
Choosing and operating an HTTP API versioning strategy that doesn't break clients — Stripe's date-based pinned versions, the Deprecation/Sunset header pair (RFC 9745 + RFC 8594), URI vs header vs media-type approaches, and the version-transformer pattern. Grounded in Stripe's published architecture and IETF RFCs.