File contents Community Expo React Native Best Practices
Comprehensive performance optimization guide for Expo React Native applications. Contains 54 rules across 9 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
Writing new Expo React Native components
Optimizing app startup and Time to Interactive
Implementing lists, images, or animations
Reducing bundle size and memory usage
Reviewing code for mobile performance issues
Rule Categories by Priority
Priority
Category
Impact
Prefix
1
Launch Time Optimization
CRITICAL
launch-
2
Bundle Size Optimization
CRITICAL
bundle-
3
List Virtualization
HIGH
list-
4
Image Optimization
HIGH
image-
5
Data Fetching Patterns
HIGH
data-
6
Navigation Performance
MEDIUM-HIGH
nav-
7
Re-render Prevention
MEDIUM
rerender-
8
Animation Performance
MEDIUM
anim-
9
Memory Management
LOW-MEDIUM
mem-
Quick Reference
1. Launch Time Optimization (CRITICAL)
launch-splash-screen-control - Control splash screen visibility during asset loading
launch-preload-critical-assets - Preload fonts and images during splash
launch-hermes-engine - Use Hermes engine for faster startup
launch-defer-non-critical - Defer non-critical initialization
launch-new-architecture - Enable New Architecture for synchronous native communication
launch-minimize-root-imports - Minimize imports in root App component
2. Bundle Size Optimization (CRITICAL)
bundle-avoid-barrel-files - Avoid barrel file imports
bundle-analyze-size - Analyze bundle size before release
bundle-remove-unused-dependencies - Remove unused dependencies
bundle-split-by-architecture - Generate architecture-specific APKs
bundle-enable-proguard - Enable ProGuard for Android release builds
bundle-optimize-fonts - Subset custom fonts to used characters
bundle-use-lightweight-alternatives - Use lightweight library alternatives
3. List Virtualization (HIGH)
list-use-flashlist - Use FlashList instead of FlatList
list-provide-estimated-size - Provide accurate estimatedItemSize
list-avoid-inline-functions - Avoid inline functions in renderItem
list-provide-getitemlayout - Provide getItemLayout for fixed-height items
list-avoid-key-prop - Avoid key prop inside FlashList items
list-batch-rendering - Configure list batch rendering
list-memoize-item-components - Memoize list item components
4. Image Optimization (HIGH)
image-use-expo-image - Use expo-image instead of React Native Image
image-resize-to-display-size - Resize images to display size
image-use-webp-format - Use WebP format for smaller file sizes
image-use-placeholders - Use BlurHash or ThumbHash placeholders
image-preload-critical - Preload critical above-the-fold images
image-lazy-load-offscreen - Lazy load off-screen images
5. Data Fetching Patterns (HIGH)
data-parallel-fetching - Fetch independent data in parallel
data-request-deduplication - Deduplicate concurrent requests
data-abort-requests - Abort requests on component unmount
data-pagination - Implement efficient pagination strategies
data-cache-strategies - Use appropriate caching strategies
data-optimistic-updates - Apply optimistic updates for responsiveness
6. Navigation Performance (MEDIUM-HIGH)
nav-use-native-stack - Use native stack navigator
nav-unmount-inactive-screens - Unmount inactive tab screens
nav-prefetch-screen-data - Prefetch data before navigation
nav-optimize-screen-options - Optimize screen options
nav-avoid-deep-nesting - Avoid deeply nested navigators
7. Re-render Prevention (MEDIUM)
rerender-use-memo-components - Memoize expensive components with React.memo
rerender-use-callback - Stabilize callbacks with useCallback
rerender-use-memo-values - Memoize expensive computations with useMemo
rerender-avoid-context-overuse - Avoid overusing Context for frequent updates
rerender-split-component-state - Split components to isolate updating state
rerender-use-react-compiler - Enable React Compiler for automatic memoization
rerender-avoid-anonymous-components - Avoid anonymous components in JSX
8. Animation Performance (MEDIUM)
anim-use-reanimated - Use Reanimated for UI thread animations
anim-use-native-driver - Enable useNativeDriver for Animated API
anim-avoid-layout-animation - Prefer transform over layout animations
anim-gesture-handler-integration - Use Gesture Handler with Reanimated
anim-interaction-manager - Defer heavy work during animations
9. Memory Management (LOW-MEDIUM)
mem-cleanup-useeffect - Clean up subscriptions and timers
mem-abort-fetch-requests - Abort fetch requests on unmount
mem-avoid-closure-leaks - Avoid closure-based memory leaks
mem-release-heavy-resources - Release heavy resources when not needed
mem-profile-with-tools - Profile memory usage with development tools
How to Use
Read individual reference files for detailed explanations and code examples:
Section definitions - Category structure and impact levels
Rule template - Template for adding new rules
Example rules: launch-splash-screen-control, list-use-flashlist
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
1 --- 2 name: expo 3 description: Community Expo React Native Best Practices 4 --- 5 # Community Expo React Native Best Practices 6 7 Comprehensive performance optimization guide for Expo React Native applications. Contains 54 rules across 9 categories, prioritized by impact to guide automated refactoring and code generation. 8 9 ## When to Apply 10 11 Reference these guidelines when: 12 - Writing new Expo React Native components 13 - Optimizing app startup and Time to Interactive 14 - Implementing lists, images, or animations 15 - Reducing bundle size and memory usage 16 - Reviewing code for mobile performance issues 17 18 ## Rule Categories by Priority 19 20 | Priority | Category | Impact | Prefix | 21 |----------|----------|--------|--------| 22 | 1 | Launch Time Optimization | CRITICAL | `launch-` | 23 | 2 | Bundle Size Optimization | CRITICAL | `bundle-` | 24 | 3 | List Virtualization | HIGH | `list-` | 25 | 4 | Image Optimization | HIGH | `image-` | 26 | 5 | Data Fetching Patterns | HIGH | `data-` | 27 | 6 | Navigation Performance | MEDIUM-HIGH | `nav-` | 28 | 7 | Re-render Prevention | MEDIUM | `rerender-` | 29 | 8 | Animation Performance | MEDIUM | `anim-` | 30 | 9 | Memory Management | LOW-MEDIUM | `mem-` | 31 32 ## Quick Reference 33 34 ### 1. Launch Time Optimization (CRITICAL) 35 36 - `launch-splash-screen-control` - Control splash screen visibility during asset loading 37 - `launch-preload-critical-assets` - Preload fonts and images during splash 38 - `launch-hermes-engine` - Use Hermes engine for faster startup 39 - `launch-defer-non-critical` - Defer non-critical initialization 40 - `launch-new-architecture` - Enable New Architecture for synchronous native communication 41 - `launch-minimize-root-imports` - Minimize imports in root App component 42 43 ### 2. Bundle Size Optimization (CRITICAL) 44 45 - `bundle-avoid-barrel-files` - Avoid barrel file imports 46 - `bundle-analyze-size` - Analyze bundle size before release 47 - `bundle-remove-unused-dependencies` - Remove unused dependencies 48 - `bundle-split-by-architecture` - Generate architecture-specific APKs 49 - `bundle-enable-proguard` - Enable ProGuard for Android release builds 50 - `bundle-optimize-fonts` - Subset custom fonts to used characters 51 - `bundle-use-lightweight-alternatives` - Use lightweight library alternatives 52 53 ### 3. List Virtualization (HIGH) 54 55 - `list-use-flashlist` - Use FlashList instead of FlatList 56 - `list-provide-estimated-size` - Provide accurate estimatedItemSize 57 - `list-avoid-inline-functions` - Avoid inline functions in renderItem 58 - `list-provide-getitemlayout` - Provide getItemLayout for fixed-height items 59 - `list-avoid-key-prop` - Avoid key prop inside FlashList items 60 - `list-batch-rendering` - Configure list batch rendering 61 - `list-memoize-item-components` - Memoize list item components 62 63 ### 4. Image Optimization (HIGH) 64 65 - `image-use-expo-image` - Use expo-image instead of React Native Image 66 - `image-resize-to-display-size` - Resize images to display size 67 - `image-use-webp-format` - Use WebP format for smaller file sizes 68 - `image-use-placeholders` - Use BlurHash or ThumbHash placeholders 69 - `image-preload-critical` - Preload critical above-the-fold images 70 - `image-lazy-load-offscreen` - Lazy load off-screen images 71 72 ### 5. Data Fetching Patterns (HIGH) 73 74 - `data-parallel-fetching` - Fetch independent data in parallel 75 - `data-request-deduplication` - Deduplicate concurrent requests 76 - `data-abort-requests` - Abort requests on component unmount 77 - `data-pagination` - Implement efficient pagination strategies 78 - `data-cache-strategies` - Use appropriate caching strategies 79 - `data-optimistic-updates` - Apply optimistic updates for responsiveness 80 81 ### 6. Navigation Performance (MEDIUM-HIGH) 82 83 - `nav-use-native-stack` - Use native stack navigator 84 - `nav-unmount-inactive-screens` - Unmount inactive tab screens 85 - `nav-prefetch-screen-data` - Prefetch data before navigation 86 - `nav-optimize-screen-options` - Optimize screen options 87 - `nav-avoid-deep-nesting` - Avoid deeply nested navigators 88 89 ### 7. Re-render Prevention (MEDIUM) 90 91 - `rerender-use-memo-components` - Memoize expensive components with React.memo 92 - `rerender-use-callback` - Stabilize callbacks with useCallback 93 - `rerender-use-memo-values` - Memoize expensive computations with useMemo 94 - `rerender-avoid-context-overuse` - Avoid overusing Context for frequent updates 95 - `rerender-split-component-state` - Split components to isolate updating state 96 - `rerender-use-react-compiler` - Enable React Compiler for automatic memoization 97 - `rerender-avoid-anonymous-components` - Avoid anonymous components in JSX 98 99 ### 8. Animation Performance (MEDIUM) 100 101 - `anim-use-reanimated` - Use Reanimated for UI thread animations 102 - `anim-use-native-driver` - Enable useNativeDriver for Animated API 103 - `anim-avoid-layout-animation` - Prefer transform over layout animations 104 - `anim-gesture-handler-integration` - Use Gesture Handler with Reanimated 105 - `anim-interaction-manager` - Defer heavy work during animations 106 107 ### 9. Memory Management (LOW-MEDIUM) 108 109 - `mem-cleanup-useeffect` - Clean up subscriptions and timers 110 - `mem-abort-fetch-requests` - Abort fetch requests on unmount 111 - `mem-avoid-closure-leaks` - Avoid closure-based memory leaks 112 - `mem-release-heavy-resources` - Release heavy resources when not needed 113 - `mem-profile-with-tools` - Profile memory usage with development tools 114 115 ## How to Use 116 117 Read individual reference files for detailed explanations and code examples: 118 119 - [Section definitions](references/_sections.md) - Category structure and impact levels 120 - [Rule template](assets/templates/_template.md) - Template for adding new rules 121 - Example rules: [launch-splash-screen-control](references/launch-splash-screen-control.md), [list-use-flashlist](references/list-use-flashlist.md) 122 123 ## Full Compiled Document 124 125 For the complete guide with all rules expanded: `AGENTS.md`
ComeOnOliver/skillshub/tree/main/skills/pproenca/dot-skills/expo commit 36fab73b64
Frequently asked questions How do I install the Expo skill? Run npx skillmds@latest add comeonoliver/expo in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Expo skill do? Community Expo React Native Best Practices It is listed under Web & Frontend on SkillMD.
Is Expo safe to use? This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Expo? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Expo free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Expo? ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.