agy-superpowers 5.0.8 → 5.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/package.json +1 -1
  2. package/template/agent/rules/superpowers.md +54 -0
  3. package/template/agent/skills/frontend-developer/SKILL.md +39 -0
  4. package/template/agent/skills/frontend-developer/references/react-nextjs.md +343 -0
  5. package/template/agent/skills/frontend-developer/references/react-rules/_sections.md +46 -0
  6. package/template/agent/skills/frontend-developer/references/react-rules/_template.md +28 -0
  7. package/template/agent/skills/frontend-developer/references/react-rules/advanced-event-handler-refs.md +55 -0
  8. package/template/agent/skills/frontend-developer/references/react-rules/advanced-init-once.md +42 -0
  9. package/template/agent/skills/frontend-developer/references/react-rules/advanced-use-latest.md +39 -0
  10. package/template/agent/skills/frontend-developer/references/react-rules/async-api-routes.md +38 -0
  11. package/template/agent/skills/frontend-developer/references/react-rules/async-defer-await.md +80 -0
  12. package/template/agent/skills/frontend-developer/references/react-rules/async-dependencies.md +51 -0
  13. package/template/agent/skills/frontend-developer/references/react-rules/async-parallel.md +28 -0
  14. package/template/agent/skills/frontend-developer/references/react-rules/async-suspense-boundaries.md +99 -0
  15. package/template/agent/skills/frontend-developer/references/react-rules/bundle-barrel-imports.md +59 -0
  16. package/template/agent/skills/frontend-developer/references/react-rules/bundle-conditional.md +31 -0
  17. package/template/agent/skills/frontend-developer/references/react-rules/bundle-defer-third-party.md +49 -0
  18. package/template/agent/skills/frontend-developer/references/react-rules/bundle-dynamic-imports.md +35 -0
  19. package/template/agent/skills/frontend-developer/references/react-rules/bundle-preload.md +50 -0
  20. package/template/agent/skills/frontend-developer/references/react-rules/client-event-listeners.md +74 -0
  21. package/template/agent/skills/frontend-developer/references/react-rules/client-localstorage-schema.md +71 -0
  22. package/template/agent/skills/frontend-developer/references/react-rules/client-passive-event-listeners.md +48 -0
  23. package/template/agent/skills/frontend-developer/references/react-rules/client-swr-dedup.md +56 -0
  24. package/template/agent/skills/frontend-developer/references/react-rules/js-batch-dom-css.md +107 -0
  25. package/template/agent/skills/frontend-developer/references/react-rules/js-cache-function-results.md +80 -0
  26. package/template/agent/skills/frontend-developer/references/react-rules/js-cache-property-access.md +28 -0
  27. package/template/agent/skills/frontend-developer/references/react-rules/js-cache-storage.md +70 -0
  28. package/template/agent/skills/frontend-developer/references/react-rules/js-combine-iterations.md +32 -0
  29. package/template/agent/skills/frontend-developer/references/react-rules/js-early-exit.md +50 -0
  30. package/template/agent/skills/frontend-developer/references/react-rules/js-flatmap-filter.md +60 -0
  31. package/template/agent/skills/frontend-developer/references/react-rules/js-hoist-regexp.md +45 -0
  32. package/template/agent/skills/frontend-developer/references/react-rules/js-index-maps.md +37 -0
  33. package/template/agent/skills/frontend-developer/references/react-rules/js-length-check-first.md +49 -0
  34. package/template/agent/skills/frontend-developer/references/react-rules/js-min-max-loop.md +82 -0
  35. package/template/agent/skills/frontend-developer/references/react-rules/js-set-map-lookups.md +24 -0
  36. package/template/agent/skills/frontend-developer/references/react-rules/js-tosorted-immutable.md +57 -0
  37. package/template/agent/skills/frontend-developer/references/react-rules/rendering-activity.md +26 -0
  38. package/template/agent/skills/frontend-developer/references/react-rules/rendering-animate-svg-wrapper.md +47 -0
  39. package/template/agent/skills/frontend-developer/references/react-rules/rendering-conditional-render.md +40 -0
  40. package/template/agent/skills/frontend-developer/references/react-rules/rendering-content-visibility.md +38 -0
  41. package/template/agent/skills/frontend-developer/references/react-rules/rendering-hoist-jsx.md +46 -0
  42. package/template/agent/skills/frontend-developer/references/react-rules/rendering-hydration-no-flicker.md +82 -0
  43. package/template/agent/skills/frontend-developer/references/react-rules/rendering-hydration-suppress-warning.md +30 -0
  44. package/template/agent/skills/frontend-developer/references/react-rules/rendering-resource-hints.md +85 -0
  45. package/template/agent/skills/frontend-developer/references/react-rules/rendering-script-defer-async.md +68 -0
  46. package/template/agent/skills/frontend-developer/references/react-rules/rendering-svg-precision.md +28 -0
  47. package/template/agent/skills/frontend-developer/references/react-rules/rendering-usetransition-loading.md +75 -0
  48. package/template/agent/skills/frontend-developer/references/react-rules/rerender-defer-reads.md +39 -0
  49. package/template/agent/skills/frontend-developer/references/react-rules/rerender-dependencies.md +45 -0
  50. package/template/agent/skills/frontend-developer/references/react-rules/rerender-derived-state-no-effect.md +40 -0
  51. package/template/agent/skills/frontend-developer/references/react-rules/rerender-derived-state.md +29 -0
  52. package/template/agent/skills/frontend-developer/references/react-rules/rerender-functional-setstate.md +74 -0
  53. package/template/agent/skills/frontend-developer/references/react-rules/rerender-lazy-state-init.md +58 -0
  54. package/template/agent/skills/frontend-developer/references/react-rules/rerender-memo-with-default-value.md +38 -0
  55. package/template/agent/skills/frontend-developer/references/react-rules/rerender-memo.md +44 -0
  56. package/template/agent/skills/frontend-developer/references/react-rules/rerender-move-effect-to-event.md +45 -0
  57. package/template/agent/skills/frontend-developer/references/react-rules/rerender-no-inline-components.md +82 -0
  58. package/template/agent/skills/frontend-developer/references/react-rules/rerender-simple-expression-in-memo.md +35 -0
  59. package/template/agent/skills/frontend-developer/references/react-rules/rerender-split-combined-hooks.md +64 -0
  60. package/template/agent/skills/frontend-developer/references/react-rules/rerender-transitions.md +40 -0
  61. package/template/agent/skills/frontend-developer/references/react-rules/rerender-use-deferred-value.md +59 -0
  62. package/template/agent/skills/frontend-developer/references/react-rules/rerender-use-ref-transient-values.md +73 -0
  63. package/template/agent/skills/frontend-developer/references/react-rules/server-after-nonblocking.md +73 -0
  64. package/template/agent/skills/frontend-developer/references/react-rules/server-auth-actions.md +96 -0
  65. package/template/agent/skills/frontend-developer/references/react-rules/server-cache-lru.md +41 -0
  66. package/template/agent/skills/frontend-developer/references/react-rules/server-cache-react.md +76 -0
  67. package/template/agent/skills/frontend-developer/references/react-rules/server-dedup-props.md +65 -0
  68. package/template/agent/skills/frontend-developer/references/react-rules/server-hoist-static-io.md +142 -0
  69. package/template/agent/skills/frontend-developer/references/react-rules/server-parallel-fetching.md +83 -0
  70. package/template/agent/skills/frontend-developer/references/react-rules/server-serialization.md +38 -0
  71. package/template/agent/skills/frontend-developer/references/svelte-sveltekit.md +220 -0
  72. package/template/agent/skills/frontend-developer/references/vanilla.md +275 -0
  73. package/template/agent/skills/frontend-developer/references/vue-nuxt.md +289 -0
  74. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/_index.md +154 -0
  75. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/animation-class-based-technique.md +254 -0
  76. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/animation-state-driven-technique.md +291 -0
  77. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-async.md +97 -0
  78. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-data-flow.md +307 -0
  79. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-fallthrough-attrs.md +174 -0
  80. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-keep-alive.md +137 -0
  81. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-slots.md +216 -0
  82. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-suspense.md +228 -0
  83. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-teleport.md +108 -0
  84. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-transition-group.md +128 -0
  85. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/component-transition.md +125 -0
  86. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/composables.md +290 -0
  87. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/directives.md +162 -0
  88. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-avoid-component-abstraction-in-lists.md +159 -0
  89. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-v-once-v-memo-directives.md +182 -0
  90. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/perf-virtualize-large-lists.md +187 -0
  91. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/plugins.md +166 -0
  92. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/reactivity.md +344 -0
  93. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/render-functions.md +201 -0
  94. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/sfc.md +310 -0
  95. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/state-management.md +135 -0
  96. package/template/agent/skills/frontend-developer/references/vue-rules/best-practices/updated-hook-performance.md +187 -0
  97. package/template/agent/skills/frontend-developer/references/vue-rules/router/_index.md +23 -0
  98. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-beforeenter-no-param-trigger.md +167 -0
  99. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-beforerouteenter-no-this.md +176 -0
  100. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-guard-async-await-pattern.md +227 -0
  101. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-navigation-guard-infinite-loop.md +187 -0
  102. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-navigation-guard-next-deprecated.md +150 -0
  103. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-param-change-no-lifecycle.md +181 -0
  104. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-simple-routing-cleanup.md +209 -0
  105. package/template/agent/skills/frontend-developer/references/vue-rules/router/router-use-vue-router-for-production.md +183 -0
  106. package/template/agent/skills/frontend-developer/references/vue-rules/testing/_index.md +29 -0
  107. package/template/agent/skills/frontend-developer/references/vue-rules/testing/async-component-testing.md +163 -0
  108. package/template/agent/skills/frontend-developer/references/vue-rules/testing/teleport-testing-complexity.md +158 -0
  109. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-async-await-flushpromises.md +175 -0
  110. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-browser-vs-node-runners.md +208 -0
  111. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-component-blackbox-approach.md +144 -0
  112. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-composables-helper-wrapper.md +238 -0
  113. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-e2e-playwright-recommended.md +242 -0
  114. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-no-snapshot-only.md +197 -0
  115. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-pinia-store-setup.md +228 -0
  116. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-suspense-async-components.md +229 -0
  117. package/template/agent/skills/frontend-developer/references/vue-rules/testing/testing-vitest-recommended-for-vue.md +204 -0
  118. package/template/agent/skills/mobile-developer/SKILL.md +52 -0
  119. package/template/agent/skills/mobile-developer/references/android-native.md +396 -0
  120. package/template/agent/skills/mobile-developer/references/android-rules/android-accessibility.md +36 -0
  121. package/template/agent/skills/mobile-developer/references/android-rules/android-architecture.md +52 -0
  122. package/template/agent/skills/mobile-developer/references/android-rules/android-coroutines.md +139 -0
  123. package/template/agent/skills/mobile-developer/references/android-rules/android-data-layer.md +51 -0
  124. package/template/agent/skills/mobile-developer/references/android-rules/android-emulator-skill.md +108 -0
  125. package/template/agent/skills/mobile-developer/references/android-rules/android-gradle-logic.md +126 -0
  126. package/template/agent/skills/mobile-developer/references/android-rules/android-retrofit.md +142 -0
  127. package/template/agent/skills/mobile-developer/references/android-rules/android-testing.md +102 -0
  128. package/template/agent/skills/mobile-developer/references/android-rules/android-viewmodel.md +43 -0
  129. package/template/agent/skills/mobile-developer/references/android-rules/coil-compose.md +74 -0
  130. package/template/agent/skills/mobile-developer/references/android-rules/compose-navigation.md +422 -0
  131. package/template/agent/skills/mobile-developer/references/android-rules/compose-performance-audit.md +199 -0
  132. package/template/agent/skills/mobile-developer/references/android-rules/compose-ui.md +49 -0
  133. package/template/agent/skills/mobile-developer/references/android-rules/gradle-build-performance.md +346 -0
  134. package/template/agent/skills/mobile-developer/references/android-rules/kotlin-concurrency-expert.md +169 -0
  135. package/template/agent/skills/mobile-developer/references/android-rules/rxjava-to-coroutines-migration.md +101 -0
  136. package/template/agent/skills/mobile-developer/references/android-rules/xml-to-compose-migration.md +338 -0
  137. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-best-practices.md +52 -0
  138. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-checks-migration.md +134 -0
  139. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-cli-app-best-practices.md +123 -0
  140. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-doc-validation.md +45 -0
  141. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-matcher-best-practices.md +106 -0
  142. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-modern-features.md +241 -0
  143. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-package-maintenance.md +75 -0
  144. package/template/agent/skills/mobile-developer/references/flutter-rules/dart-test-fundamentals.md +124 -0
  145. package/template/agent/skills/mobile-developer/references/flutter.md +291 -0
  146. package/template/agent/skills/mobile-developer/references/ios-native.md +358 -0
  147. package/template/agent/skills/mobile-developer/references/ios-rules/accessibility-patterns.md +215 -0
  148. package/template/agent/skills/mobile-developer/references/ios-rules/animation-advanced.md +403 -0
  149. package/template/agent/skills/mobile-developer/references/ios-rules/animation-basics.md +284 -0
  150. package/template/agent/skills/mobile-developer/references/ios-rules/animation-transitions.md +326 -0
  151. package/template/agent/skills/mobile-developer/references/ios-rules/charts-accessibility.md +135 -0
  152. package/template/agent/skills/mobile-developer/references/ios-rules/charts.md +602 -0
  153. package/template/agent/skills/mobile-developer/references/ios-rules/image-optimization.md +203 -0
  154. package/template/agent/skills/mobile-developer/references/ios-rules/latest-apis.md +464 -0
  155. package/template/agent/skills/mobile-developer/references/ios-rules/layout-best-practices.md +266 -0
  156. package/template/agent/skills/mobile-developer/references/ios-rules/liquid-glass.md +416 -0
  157. package/template/agent/skills/mobile-developer/references/ios-rules/list-patterns.md +394 -0
  158. package/template/agent/skills/mobile-developer/references/ios-rules/macos-scenes.md +318 -0
  159. package/template/agent/skills/mobile-developer/references/ios-rules/macos-views.md +357 -0
  160. package/template/agent/skills/mobile-developer/references/ios-rules/macos-window-styling.md +303 -0
  161. package/template/agent/skills/mobile-developer/references/ios-rules/performance-patterns.md +403 -0
  162. package/template/agent/skills/mobile-developer/references/ios-rules/scroll-patterns.md +293 -0
  163. package/template/agent/skills/mobile-developer/references/ios-rules/sheet-navigation-patterns.md +363 -0
  164. package/template/agent/skills/mobile-developer/references/ios-rules/state-management.md +417 -0
  165. package/template/agent/skills/mobile-developer/references/ios-rules/view-structure.md +389 -0
  166. package/template/agent/skills/mobile-developer/references/react-native-rules/_sections.md +86 -0
  167. package/template/agent/skills/mobile-developer/references/react-native-rules/_template.md +28 -0
  168. package/template/agent/skills/mobile-developer/references/react-native-rules/animation-derived-value.md +53 -0
  169. package/template/agent/skills/mobile-developer/references/react-native-rules/animation-gesture-detector-press.md +95 -0
  170. package/template/agent/skills/mobile-developer/references/react-native-rules/animation-gpu-properties.md +65 -0
  171. package/template/agent/skills/mobile-developer/references/react-native-rules/design-system-compound-components.md +66 -0
  172. package/template/agent/skills/mobile-developer/references/react-native-rules/fonts-config-plugin.md +71 -0
  173. package/template/agent/skills/mobile-developer/references/react-native-rules/imports-design-system-folder.md +68 -0
  174. package/template/agent/skills/mobile-developer/references/react-native-rules/js-hoist-intl.md +61 -0
  175. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-callbacks.md +44 -0
  176. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-function-references.md +132 -0
  177. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-images.md +53 -0
  178. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-inline-objects.md +97 -0
  179. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-expensive.md +94 -0
  180. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-memo.md +82 -0
  181. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-item-types.md +104 -0
  182. package/template/agent/skills/mobile-developer/references/react-native-rules/list-performance-virtualize.md +67 -0
  183. package/template/agent/skills/mobile-developer/references/react-native-rules/monorepo-native-deps-in-app.md +46 -0
  184. package/template/agent/skills/mobile-developer/references/react-native-rules/monorepo-single-dependency-versions.md +63 -0
  185. package/template/agent/skills/mobile-developer/references/react-native-rules/navigation-native-navigators.md +188 -0
  186. package/template/agent/skills/mobile-developer/references/react-native-rules/react-compiler-destructure-functions.md +50 -0
  187. package/template/agent/skills/mobile-developer/references/react-native-rules/react-compiler-reanimated-shared-values.md +48 -0
  188. package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-dispatcher.md +91 -0
  189. package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-fallback.md +56 -0
  190. package/template/agent/skills/mobile-developer/references/react-native-rules/react-state-minimize.md +65 -0
  191. package/template/agent/skills/mobile-developer/references/react-native-rules/rendering-no-falsy-and.md +74 -0
  192. package/template/agent/skills/mobile-developer/references/react-native-rules/rendering-text-in-text-component.md +36 -0
  193. package/template/agent/skills/mobile-developer/references/react-native-rules/scroll-position-no-state.md +82 -0
  194. package/template/agent/skills/mobile-developer/references/react-native-rules/state-ground-truth.md +80 -0
  195. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-expo-image.md +66 -0
  196. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-image-gallery.md +104 -0
  197. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-measure-views.md +78 -0
  198. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-menus.md +174 -0
  199. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-native-modals.md +77 -0
  200. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-pressable.md +61 -0
  201. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-safe-area-scroll.md +65 -0
  202. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-scrollview-content-inset.md +45 -0
  203. package/template/agent/skills/mobile-developer/references/react-native-rules/ui-styling.md +87 -0
  204. package/template/agent/skills/mobile-developer/references/react-native.md +345 -0
@@ -0,0 +1,345 @@
1
+ # React Native + Expo Reference
2
+
3
+ > **Philosophy:** JavaScript-first, native-quality. Ship fast with OTA updates, but never sacrifice 60fps.
4
+ > Expo is the default — eject only when you must.
5
+
6
+ ---
7
+
8
+ ## Project Setup & Detection
9
+
10
+ **Stack indicators:** `package.json` with `react-native` or `expo` dependency.
11
+
12
+ **Key config files:**
13
+
14
+ | File | Purpose |
15
+ |------|---------|
16
+ | `app.json` / `app.config.js` | Expo configuration (app name, version, plugins) |
17
+ | `metro.config.js` | Metro bundler configuration |
18
+ | `babel.config.js` | Babel presets and plugins |
19
+ | `tsconfig.json` | TypeScript configuration |
20
+ | `eas.json` | EAS Build/Submit/Update configuration |
21
+
22
+ **Recommended project structure (feature-based):**
23
+
24
+ ```
25
+ src/
26
+ features/
27
+ auth/
28
+ screens/LoginScreen.tsx
29
+ components/AuthForm.tsx
30
+ hooks/useAuth.ts
31
+ store/authStore.ts
32
+ home/
33
+ screens/HomeScreen.tsx
34
+ components/FeedList.tsx
35
+ shared/
36
+ components/ # Reusable UI components
37
+ hooks/ # Shared hooks
38
+ utils/ # Pure utility functions
39
+ services/ # API clients, storage wrappers
40
+ constants/ # Theme, config values
41
+ app/ # expo-router file-based routing
42
+ _layout.tsx
43
+ (tabs)/
44
+ _layout.tsx
45
+ index.tsx
46
+ settings.tsx
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Architecture Patterns
52
+
53
+ ### State Management
54
+
55
+ | Approach | Use When |
56
+ |----------|----------|
57
+ | **Zustand** (recommended) | Most apps — simple API, selector-based subscriptions, minimal boilerplate |
58
+ | **Redux Toolkit** | Large teams, complex state with many reducers, need Redux DevTools |
59
+ | **Jotai** | Atomic state, when individual pieces of state are independent |
60
+ | **React Context** | Infrequently-changing values (theme, locale, auth status) |
61
+
62
+ **State design principles:**
63
+ - State should be the **minimal source of truth**. If a value can be derived from other state or props, derive it during render — don't store it.
64
+ - Use **selector functions** in Zustand to subscribe to specific slices and avoid unnecessary re-renders.
65
+ - Keep UI state local (`useState`), share only what multiple components need.
66
+
67
+ ### Navigation
68
+
69
+ Use **native navigators** over JS-based navigators for performance:
70
+
71
+ | Navigator | Correct | Incorrect |
72
+ |-----------|---------|-----------|
73
+ | Stack | `createNativeStackNavigator` / `expo-router Stack` | `createStackNavigator` (JS-based, slow transitions) |
74
+ | Tabs | `createNativeBottomTabNavigator` / `expo-router NativeTabs` | `createBottomTabNavigator` (JS-based) |
75
+
76
+ Native navigators run transitions on the UI thread, provide platform-native gestures, large titles (iOS), search bars, and proper safe area handling automatically.
77
+
78
+ **Prefer native header options over custom header components.** Native headers support iOS large titles, blur effects, and search bars out of the box.
79
+
80
+ ### New Architecture
81
+
82
+ React Native's New Architecture includes:
83
+ - **TurboModules** — lazy-loaded, synchronous native module access (replaces Bridge)
84
+ - **Fabric** — concurrent renderer with synchronous layout (replaces old renderer)
85
+ - **Bridgeless mode** — eliminates the JS-native bridge entirely
86
+ - **React Compiler** — automatic memoization (eliminates `React.memo`, `useCallback`, `useMemo`)
87
+
88
+ When using **React Compiler**, `memo()` and `useCallback()` are unnecessary. However, **object reference stability** still matters for list virtualization.
89
+
90
+ ---
91
+
92
+ ## Performance Optimization
93
+
94
+ ### Critical Thresholds
95
+
96
+ | Metric | Target | Critical |
97
+ |--------|--------|----------|
98
+ | Cold start (JS bundle ready) | < 1s | > 2s |
99
+ | Time to interactive | < 2s | > 4s |
100
+ | List scroll frame rate | 60fps | < 45fps |
101
+ | JS bundle size (gzipped) | < 1MB | > 3MB |
102
+ | IPA/APK download size | < 30MB | > 100MB |
103
+
104
+ ### List Performance (CRITICAL)
105
+
106
+ **Always use a list virtualizer** — even for short lists. Virtualizers only render visible items, reducing memory and mount time.
107
+
108
+ | Library | When to Use |
109
+ |---------|------------|
110
+ | **LegendList** | Default choice — excellent recycling, great performance |
111
+ | **FlashList** (@shopify) | Alternative — well-tested, widely adopted |
112
+ | **FlatList** (built-in) | Legacy — avoid if possible, use LegendList/FlashList |
113
+
114
+ **Key rules for list performance:**
115
+
116
+ 1. **Stable object references** — don't `.map()` or `.filter()` data before passing to lists. Transform data inside list items instead.
117
+ 2. **Pass primitives to list items** — enables shallow comparison in `memo()`. Pass `id`, `name`, `email` instead of entire objects.
118
+ 3. **Hoist callbacks to list root** — extract `renderItem` and callbacks outside the component, or use `useCallback` if not using React Compiler.
119
+ 4. **No inline objects in renderItem** — every render creates new references, causing full re-renders of all visible items.
120
+ 5. **Use compressed images** — large images in lists destroy scroll performance.
121
+ 6. **Use item types** for heterogeneous lists — helps the virtualizer recycle views correctly.
122
+
123
+ ```tsx
124
+ // ❌ Bad: creates new references on every render
125
+ <LegendList
126
+ data={items.map(i => ({ ...i, label: i.name.toUpperCase() }))}
127
+ renderItem={({ item }) => <ItemCard item={item} />}
128
+ />
129
+
130
+ // ✅ Good: stable data, transform inside item
131
+ const renderItem = ({ item }) => <ItemCard item={item} />
132
+
133
+ <LegendList
134
+ data={items}
135
+ renderItem={renderItem}
136
+ keyExtractor={(item) => item.id}
137
+ estimatedItemSize={80}
138
+ />
139
+ ```
140
+
141
+ ### Animation (HIGH)
142
+
143
+ **Only animate GPU-accelerated properties:** `transform` (translate, scale, rotate) and `opacity`. Animating `width`, `height`, `top`, `left`, `margin`, `padding` triggers layout recalculation on every frame.
144
+
145
+ ```tsx
146
+ // ❌ Bad: animates height (layout recalc every frame)
147
+ useAnimatedStyle(() => ({ height: withTiming(expanded ? 200 : 0) }))
148
+
149
+ // ✅ Good: animates transform (GPU-accelerated)
150
+ useAnimatedStyle(() => ({
151
+ transform: [{ scaleY: withTiming(expanded ? 1 : 0) }],
152
+ opacity: withTiming(expanded ? 1 : 0),
153
+ }))
154
+ ```
155
+
156
+ - Use `useDerivedValue` over `useAnimatedReaction` for computed animations.
157
+ - Use `GestureDetector` (from `react-native-gesture-handler`) for press animations instead of `Pressable`.
158
+
159
+ ### Scroll Performance
160
+
161
+ **Never track scroll position in useState** — it triggers a JS re-render on every frame. Use `useSharedValue` from Reanimated instead.
162
+
163
+ ### Hermes Engine
164
+
165
+ Hermes is the default JS engine. It pre-compiles JavaScript to bytecode at build time, reducing cold start time and memory usage. Ensure Hermes is enabled in your project (`"jsEngine": "hermes"` in `app.json`).
166
+
167
+ ---
168
+
169
+ ## Common Libraries Ecosystem
170
+
171
+ | Category | Recommended | Alternative |
172
+ |----------|-------------|-------------|
173
+ | **Navigation** | `expo-router` (file-based) | `@react-navigation/native` (imperative) |
174
+ | **State** | `zustand` | `@reduxjs/toolkit`, `jotai` |
175
+ | **Server State** | `@tanstack/react-query` | `swr` |
176
+ | **HTTP** | `fetch` (built-in) | `axios`, `ky` |
177
+ | **Storage (non-sensitive)** | `react-native-mmkv` | `@react-native-async-storage/async-storage` |
178
+ | **Storage (sensitive)** | `expo-secure-store` | `react-native-keychain` |
179
+ | **Images** | `expo-image` | `react-native-fast-image` |
180
+ | **Animation** | `react-native-reanimated` | `react-native-animated` (built-in, limited) |
181
+ | **Gestures** | `react-native-gesture-handler` | — |
182
+ | **Lists** | `@legendapp/list` (LegendList) | `@shopify/flash-list` (FlashList) |
183
+ | **Forms** | `react-hook-form` | `formik` |
184
+ | **Modals** | Native `Modal` with `formSheet` | `react-native-bottom-sheet` |
185
+ | **Menus** | `zeego` (native context/dropdown) | — |
186
+ | **Image Gallery** | `galeria` | — |
187
+ | **Icons** | `expo-symbols` (SF Symbols) | `@expo/vector-icons` |
188
+ | **Fonts** | Config plugin (native load) | `expo-font` (runtime load) |
189
+
190
+ ---
191
+
192
+ ## Anti-Patterns & Gotchas
193
+
194
+ | ❌ Don't | Why | ✅ Do Instead |
195
+ |----------|-----|---------------|
196
+ | `ScrollView` with `.map()` for lists | Renders ALL items, memory explodes | `LegendList` / `FlashList` |
197
+ | `TouchableOpacity` for press | Legacy, limited API | `Pressable` — standard, more flexible |
198
+ | Text not wrapped in `<Text>` | Crashes on Android, undefined behavior | Always wrap strings in `<Text>` |
199
+ | `{condition && <Component/>}` with falsy value | `0` or `NaN` renders as text on Android | `{condition ? <Component/> : null}` |
200
+ | `useState` for scroll position | Re-renders on every frame, janky | `useSharedValue` from Reanimated |
201
+ | Inline objects in `style` prop | New reference every render | `StyleSheet.create()` or `borderCurve: 'continuous'` |
202
+ | `shadowColor`/`elevation` for shadows | Legacy, inconsistent cross-platform | CSS `boxShadow` string syntax |
203
+ | Margin between siblings | Fragile, breaks when children change | `gap` on parent container |
204
+ | `LinearGradient` third-party | Extra dependency | `experimental_backgroundImage: 'linear-gradient(...)'` |
205
+ | Custom header components | Misses native features (large titles, blur) | Native header `options` |
206
+ | `{ borderRadius: 12 }` alone | Sharp iOS corners | Add `borderCurve: 'continuous'` for smooth corners |
207
+ | Import entire lodash | Bundle bloat | `import debounce from 'lodash/debounce'` |
208
+ | `console.log` in production | Blocks JS thread, leaks data | Use a logger with levels, strip in release |
209
+ | Tokens in `AsyncStorage` | Plaintext, exposed on rooted device | `expo-secure-store` / Keychain |
210
+
211
+ ### React Compiler Gotchas
212
+
213
+ When React Compiler is enabled:
214
+ - **Destructure functions early** — the compiler optimizes better with destructured function references.
215
+ - **Use `.get()`/`.set()` for Reanimated shared values** — the compiler cannot optimize `.value` property access patterns.
216
+
217
+ ---
218
+
219
+ ## Testing
220
+
221
+ | Layer | Tool | Purpose |
222
+ |-------|------|---------|
223
+ | **Unit** | Jest + React Native Testing Library | Component logic, hooks, utils |
224
+ | **Component** | `@testing-library/react-native` | Render + interact with components |
225
+ | **E2E** | Maestro | Full flow testing, easy YAML syntax |
226
+ | **E2E (alt)** | Detox (Wix) | Full flow testing, JS-based |
227
+
228
+ **Testing principles:**
229
+ - Test behavior, not implementation (don't test component internals)
230
+ - Use `screen.getByRole()` and `getByText()` over `getByTestId()`
231
+ - Mock native modules at the module level (`jest.mock('expo-secure-store')`)
232
+ - Test loading, error, and empty states for every async component
233
+
234
+ ---
235
+
236
+ ## Deployment & Distribution
237
+
238
+ ### EAS (Expo Application Services)
239
+
240
+ | Service | Purpose |
241
+ |---------|---------|
242
+ | **EAS Build** | Cloud builds for iOS and Android (no local Xcode/Android Studio needed) |
243
+ | **EAS Submit** | Publish to App Store / Google Play directly from CLI |
244
+ | **EAS Update** | OTA JavaScript updates (code push without app store review) |
245
+
246
+ **OTA update strategy:**
247
+ - Use `expo-updates` for JS-only changes (bug fixes, UI tweaks)
248
+ - Native changes (new native modules, SDK version bump) require a full build + store submission
249
+ - Set update channels: `production`, `staging`, `preview`
250
+
251
+ ### Build commands
252
+
253
+ ```bash
254
+ # Development build (with dev client)
255
+ eas build --profile development --platform ios
256
+
257
+ # Production build
258
+ eas build --profile production --platform all
259
+
260
+ # Submit to stores
261
+ eas submit --platform ios
262
+ eas submit --platform android
263
+
264
+ # OTA update
265
+ eas update --branch production --message "Fix login bug"
266
+ ```
267
+
268
+ ### App size optimization
269
+ - Enable Hermes (pre-compiled bytecode, smaller bundle)
270
+ - Use `expo-image` instead of `Image` (optimized loading)
271
+ - Tree-shake unused code with Metro bundler
272
+ - Use `expo-asset` for preloading critical assets
273
+ - Audit dependencies with `npx expo-doctor`
274
+
275
+ ---
276
+
277
+ ## Quick Reference — Granular Rules
278
+
279
+ Individual rule files in `react-native-rules/` with detailed incorrect/correct
280
+ code examples. Read the specific rule when working in that area.
281
+
282
+ > Source: [Vercel agent-skills](https://github.com/vercel-labs/agent-skills/tree/main/skills/react-native-skills)
283
+
284
+ ### CRITICAL — Core Rendering
285
+
286
+ - [rendering-text-in-text-component.md](react-native-rules/rendering-text-in-text-component.md) — All text must be inside `<Text>`
287
+ - [rendering-no-falsy-and.md](react-native-rules/rendering-no-falsy-and.md) — Avoid falsy `&&` rendering
288
+
289
+ ### HIGH — List Performance
290
+
291
+ - [list-performance-virtualize.md](react-native-rules/list-performance-virtualize.md) — Always use LegendList/FlashList
292
+ - [list-performance-function-references.md](react-native-rules/list-performance-function-references.md) — Stable object references
293
+ - [list-performance-item-memo.md](react-native-rules/list-performance-item-memo.md) — Pass primitives for memo
294
+ - [list-performance-callbacks.md](react-native-rules/list-performance-callbacks.md) — Hoist callbacks
295
+ - [list-performance-inline-objects.md](react-native-rules/list-performance-inline-objects.md) — No inline objects
296
+ - [list-performance-images.md](react-native-rules/list-performance-images.md) — Compressed images in lists
297
+ - [list-performance-item-types.md](react-native-rules/list-performance-item-types.md) — Item types for recycling
298
+ - [list-performance-item-expensive.md](react-native-rules/list-performance-item-expensive.md) — Defer expensive items
299
+
300
+ ### HIGH — Animation
301
+
302
+ - [animation-gpu-properties.md](react-native-rules/animation-gpu-properties.md) — GPU-only properties (transform, opacity)
303
+ - [animation-derived-value.md](react-native-rules/animation-derived-value.md) — useDerivedValue over useAnimatedReaction
304
+ - [animation-gesture-detector-press.md](react-native-rules/animation-gesture-detector-press.md) — GestureDetector for press animations
305
+
306
+ ### HIGH — Scroll & Navigation
307
+
308
+ - [scroll-position-no-state.md](react-native-rules/scroll-position-no-state.md) — Never track scroll in useState
309
+ - [navigation-native-navigators.md](react-native-rules/navigation-native-navigators.md) — Native stack/tab navigators
310
+
311
+ ### MEDIUM — React State
312
+
313
+ - [react-state-minimize.md](react-native-rules/react-state-minimize.md) — Minimize state, derive values
314
+ - [react-state-dispatcher.md](react-native-rules/react-state-dispatcher.md) — Dispatch pattern for state
315
+ - [react-state-fallback.md](react-native-rules/react-state-fallback.md) — Fallback rendering pattern
316
+ - [state-ground-truth.md](react-native-rules/state-ground-truth.md) — State ground truth principles
317
+
318
+ ### MEDIUM — React Compiler
319
+
320
+ - [react-compiler-destructure-functions.md](react-native-rules/react-compiler-destructure-functions.md) — Destructure functions early
321
+ - [react-compiler-reanimated-shared-values.md](react-native-rules/react-compiler-reanimated-shared-values.md) — .get()/.set() for shared values
322
+
323
+ ### MEDIUM — UI Patterns
324
+
325
+ - [ui-expo-image.md](react-native-rules/ui-expo-image.md) — Use expo-image
326
+ - [ui-pressable.md](react-native-rules/ui-pressable.md) — Pressable over TouchableOpacity
327
+ - [ui-native-modals.md](react-native-rules/ui-native-modals.md) — Native modal presentations
328
+ - [ui-menus.md](react-native-rules/ui-menus.md) — Native context/dropdown menus (zeego)
329
+ - [ui-image-gallery.md](react-native-rules/ui-image-gallery.md) — Native image gallery (galeria)
330
+ - [ui-measure-views.md](react-native-rules/ui-measure-views.md) — Measure views correctly
331
+ - [ui-safe-area-scroll.md](react-native-rules/ui-safe-area-scroll.md) — Safe area with scroll
332
+ - [ui-scrollview-content-inset.md](react-native-rules/ui-scrollview-content-inset.md) — ScrollView content inset
333
+ - [ui-styling.md](react-native-rules/ui-styling.md) — Modern styling patterns (gap, boxShadow, borderCurve)
334
+
335
+ ### MEDIUM — Design System
336
+
337
+ - [design-system-compound-components.md](react-native-rules/design-system-compound-components.md) — Compound component pattern
338
+
339
+ ### LOW — Monorepo, Dependencies, JS, Fonts
340
+
341
+ - [monorepo-native-deps-in-app.md](react-native-rules/monorepo-native-deps-in-app.md) — Native deps in app package
342
+ - [monorepo-single-dependency-versions.md](react-native-rules/monorepo-single-dependency-versions.md) — Single dependency versions
343
+ - [imports-design-system-folder.md](react-native-rules/imports-design-system-folder.md) — Re-export third-party deps
344
+ - [js-hoist-intl.md](react-native-rules/js-hoist-intl.md) — Hoist Intl formatters
345
+ - [fonts-config-plugin.md](react-native-rules/fonts-config-plugin.md) — Config plugin for fonts