react-native-specialist-skill/SKILL.md
Expert in React Native (New Architecture), TurboModules, Fabric, and Expo. Specializes in native module development and performance optimization.
npx skillsauth add 404kidwiz/claude-supercode-skills react-native-specialistInstall 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.
Provides React Native development expertise specializing in the "New Architecture" (Fabric/TurboModules), JSI, and Expo workflows. Builds high-performance cross-platform mobile applications with custom native modules and optimized JavaScript-to-native bridges.
Scenario: Migrating a large production app from Bridge to Fabric/TurboModules.
Implementation:
Results:
Scenario: Need to integrate Bluetooth Low Energy for a fitness app.
Implementation:
Results:
Scenario: App experiencing janky scrolling and memory issues.
Implementation:
Results:
Which architecture to use?
│
├─ **New Architecture (Default for 0.76+)**
│ ├─ **TurboModules:** Lazy-loaded native modules (Sync/Async).
│ ├─ **Fabric:** C++ Shadow Tree for UI (No bridge serialization).
│ ├─ **Codegen:** Type-safe spec for Native <-> JS communication.
│ └─ **Bridgeless Mode:** Removes the legacy bridge entirely.
│
└─ **Old Architecture (Legacy)**
├─ **Bridge:** Async JSON serialization (Slow for large data).
└─ **Maintenance:** Only for unmigrated legacy libraries.
| Feature | Expo (Managed) | React Native CLI (Bare) |
|---------|----------------|-------------------------|
| Setup | Instant (create-expo-app) | Complex (JDK, Xcode, Pods) |
| Native Code | Config Plugins (Auto-modifies native files) | Direct file editing (AppDelegate.m) |
| Upgrades | npx expo install --fix (Stable sets) | Manual diffing (Upgrade Helper) |
| Builds | EAS Build (Cloud) | Local or CI (Fastlane) |
| Updates | EAS Update (OTA) | CodePush (Microsoft) |
Red Flags → Escalate to mobile-developer (Native):
Goal: Access native battery level synchronously via JSI.
Steps:
Define Spec (NativeBattery.ts)
import type { TurboModule } from 'react-native';
import { TurboModuleRegistry } from 'react-native';
export interface Spec extends TurboModule {
getBatteryLevel(): number;
}
export default TurboModuleRegistry.getEnforcing<Spec>('RTNBattery');
Generate Code
yarn codegen. Generates C++ interfaces.Implement iOS (RTNBattery.mm)
- (NSNumber *)getBatteryLevel {
[UIDevice currentDevice].batteryMonitoringEnabled = YES;
return @([UIDevice currentDevice].batteryLevel);
}
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
(const facebook::react::ObjCTurboModule::InitParams &)params {
return std::make_shared<facebook::react::NativeBatterySpecJSI>(params);
}
Implement Android (BatteryModule.kt)
class BatteryModule(context: ReactApplicationContext) : NativeBatterySpec(context) {
override fun getName() = "RTNBattery"
override fun getBatteryLevel(): Double {
val manager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
return manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY).toDouble()
}
}
Goal: 60fps drag gesture on the UI thread.
Steps:
Setup
import { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated';
import { GestureDetector, Gesture } from 'react-native-gesture-handler';
Implementation
function Ball() {
const offset = useSharedValue({ x: 0, y: 0 });
const gesture = Gesture.Pan()
.onUpdate((e) => {
// Runs on UI thread
offset.value = { x: e.translationX, y: e.translationY };
})
.onEnd(() => {
offset.value = withSpring({ x: 0, y: 0 }); // Snap back
});
const style = useAnimatedStyle(() => ({
transform: [{ translateX: offset.value.x }, { translateY: offset.value.y }]
}));
return (
<GestureDetector gesture={gesture}>
<Animated.View style={[styles.ball, style]} />
</GestureDetector>
);
}
What it looks like:
Animated.timing with useNativeDriver: false.useEffect and setState.Why it fails:
Correct approach:
useNativeDriver: true.What it looks like:
Why it fails:
Correct approach:
podfile / build.gradle (Default in new Expo).What it looks like:
style={{ width: 100, height: 100 }}Why it fails:
Correct approach:
StyleSheet.create or const style = { ... } outside component.Performance:
useMemo/useCallback used for expensive props.FlashList used instead of FlatList.Architecture:
Native:
development
Expert in automating Excel workflows using Node.js (ExcelJS, SheetJS) and Python (pandas, openpyxl).
content-media
Expert in designing durable, scalable workflow systems using Temporal, Camunda, and Event-Driven Architectures.
tools
Use when user needs WordPress development, theme or plugin creation, site optimization, security hardening, multisite management, or scaling WordPress from small sites to enterprise platforms.
tools
Expert in Windows Server, Active Directory (AD DS), Hybrid Identity (Entra ID), and PowerShell automation.