create-disposabl-app 0.1.0 → 0.1.1

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 (390) hide show
  1. package/dist/index.js +21 -22
  2. package/dist/templates/default/apps/desktop/.oxfmtrc.json +5 -0
  3. package/dist/templates/default/apps/desktop/.oxlintrc.json +6 -0
  4. package/dist/templates/default/apps/desktop/README.md +58 -0
  5. package/dist/templates/default/apps/desktop/forge.config.mts +90 -0
  6. package/dist/templates/default/apps/desktop/index.html +12 -0
  7. package/dist/templates/default/apps/desktop/package.json +55 -1
  8. package/dist/templates/default/apps/desktop/src/declarations.d.ts +2 -0
  9. package/dist/templates/default/apps/desktop/src/index.css +8 -0
  10. package/dist/templates/default/apps/desktop/src/main.ts +58 -0
  11. package/dist/templates/default/apps/desktop/src/preload.ts +3 -0
  12. package/dist/templates/default/apps/desktop/src/renderer.ts +19 -0
  13. package/dist/templates/default/apps/desktop/tsconfig.json +14 -0
  14. package/dist/templates/default/apps/desktop/vite.main.config.mts +4 -0
  15. package/dist/templates/default/apps/desktop/vite.preload.config.mts +4 -0
  16. package/dist/templates/default/apps/desktop/vite.renderer.config.mts +4 -0
  17. package/dist/templates/default/apps/mobile/.agents/skills/agent-device/SKILL.md +22 -0
  18. package/dist/templates/default/apps/mobile/.agents/skills/android-emulator/SKILL.md +32 -0
  19. package/dist/templates/default/apps/mobile/.agents/skills/dogfood/SKILL.md +27 -0
  20. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/SKILL.md +176 -0
  21. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/agents/openai.yaml +4 -0
  22. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/app-store-metadata.md +497 -0
  23. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/ios-app-store.md +376 -0
  24. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/native-ios.md +167 -0
  25. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/play-store.md +244 -0
  26. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/testflight.md +62 -0
  27. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/workflows.md +120 -0
  28. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/SKILL.md +431 -0
  29. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/agents/openai.yaml +4 -0
  30. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/SKILL.md +46 -0
  31. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/agents/openai.yaml +4 -0
  32. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/metrics.md +98 -0
  33. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/queries.md +444 -0
  34. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/setup.md +529 -0
  35. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/third-party.md +136 -0
  36. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/SKILL.md +237 -0
  37. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/agents/openai.yaml +4 -0
  38. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/controllers.md +139 -0
  39. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/logs-and-crashes.md +101 -0
  40. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/run-your-app.md +256 -0
  41. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/troubleshooting.md +56 -0
  42. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/SKILL.md +146 -0
  43. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/agents/openai.yaml +4 -0
  44. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/SKILL.md +238 -0
  45. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/agents/openai.yaml +4 -0
  46. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  47. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  48. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/SKILL.md +99 -0
  49. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/agents/openai.yaml +4 -0
  50. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/fetch.js +109 -0
  51. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/package.json +6 -0
  52. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/LICENSE +21 -0
  53. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/RECIPES.md +385 -0
  54. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/SKILL.md +274 -0
  55. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/agents/openai.yaml +4 -0
  56. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/SKILL.md +290 -0
  57. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/agents/openai.yaml +4 -0
  58. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/references/native-module.md +96 -0
  59. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/SKILL.md +69 -0
  60. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/agents/openai.yaml +4 -0
  61. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-integrated.md +551 -0
  62. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-isolated.md +449 -0
  63. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/comparison.md +63 -0
  64. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/feature-integration.md +163 -0
  65. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/troubleshooting.md +88 -0
  66. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/version-compatibility.md +40 -0
  67. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/SKILL.md +478 -0
  68. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/agents/openai.yaml +4 -0
  69. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
  70. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
  71. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/SKILL.md +376 -0
  72. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/agents/openai.yaml +4 -0
  73. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/audit.md +190 -0
  74. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/native-slop.md +74 -0
  75. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/SKILL.md +184 -0
  76. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/agents/openai.yaml +4 -0
  77. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/SKILL.md +425 -0
  78. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/agents/openai.yaml +4 -0
  79. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/SKILL.md +106 -0
  80. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/agents/openai.yaml +4 -0
  81. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/references/catalog.md +105 -0
  82. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/SKILL.md +124 -0
  83. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/agents/openai.yaml +4 -0
  84. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/compatibility.md +130 -0
  85. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/example.md +212 -0
  86. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/migration-map.md +457 -0
  87. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/SKILL.md +151 -0
  88. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/agents/openai.yaml +4 -0
  89. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/config-plugin.md +90 -0
  90. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/create-expo-module.md +206 -0
  91. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/lifecycle.md +127 -0
  92. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/module-config.md +48 -0
  93. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-module.md +286 -0
  94. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-view.md +171 -0
  95. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/SKILL.md +201 -0
  96. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/agents/openai.yaml +4 -0
  97. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/controls.md +231 -0
  98. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/gradients.md +106 -0
  99. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/icons.md +232 -0
  100. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/media.md +193 -0
  101. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/storage.md +121 -0
  102. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/visual-effects.md +198 -0
  103. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/webgpu-three.md +605 -0
  104. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/SKILL.md +120 -0
  105. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/agents/openai.yaml +4 -0
  106. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/references/launch-without-dev-menu.md +24 -0
  107. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/SKILL.md +114 -0
  108. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/agents/openai.yaml +4 -0
  109. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/SKILL.md +240 -0
  110. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/agents/openai.yaml +4 -0
  111. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/form-sheet.md +253 -0
  112. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/route-structure.md +229 -0
  113. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/search.md +248 -0
  114. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/tabs.md +433 -0
  115. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/toolbar-and-headers.md +284 -0
  116. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/zoom-transitions.md +158 -0
  117. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/SKILL.md +314 -0
  118. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/agents/visual-grader.md +52 -0
  119. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/design-rubric.md +45 -0
  120. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/runtime-matrix.md +34 -0
  121. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/check-static.sh +64 -0
  122. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
  123. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
  124. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
  125. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
  126. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
  127. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
  128. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
  129. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
  130. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/SKILL.md +101 -0
  131. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/agents/openai.yaml +4 -0
  132. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/drop-in-replacements.md +27 -0
  133. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/jetpack-compose.md +73 -0
  134. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/swift-ui.md +73 -0
  135. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/universal.md +104 -0
  136. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/scripts/list-components.js +193 -0
  137. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/SKILL.md +150 -0
  138. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/agents/openai.yaml +4 -0
  139. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
  140. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-video.md +160 -0
  141. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/native-tabs.md +124 -0
  142. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/new-architecture.md +79 -0
  143. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-19.md +79 -0
  144. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-compiler.md +59 -0
  145. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
  146. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/SKILL.md +91 -0
  147. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/agents/openai.yaml +4 -0
  148. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/false-friends.md +119 -0
  149. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/native-patterns.md +39 -0
  150. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/run-as-goal.md +48 -0
  151. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/verify-on-device.md +45 -0
  152. package/dist/templates/default/apps/mobile/.agents/skills/ios-simulator/SKILL.md +32 -0
  153. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/POWER.md +172 -0
  154. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/SKILL.md +238 -0
  155. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/agents/openai.yaml +4 -0
  156. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-app.md +208 -0
  157. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-js.md +264 -0
  158. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-barrel-exports.md +250 -0
  159. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-code-splitting.md +255 -0
  160. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-hermes-mmap.md +167 -0
  161. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-library-size.md +164 -0
  162. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-native-assets.md +208 -0
  163. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-r8-android.md +231 -0
  164. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-tree-shaking.md +215 -0
  165. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/bundle-treemap-source-map-explorer.png +0 -0
  166. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/controlled-textinput-pingpong.png +0 -0
  167. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/devtools-flamegraph.png +0 -0
  168. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/emerge-xray-ios.png +0 -0
  169. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/expo-atlas-treemap.png +0 -0
  170. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/flashlight-flatlist-vs-flashlist.png +0 -0
  171. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/fps-drop-graph.png +0 -0
  172. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/memory-heap-snapshot.png +0 -0
  173. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/tti-warm-start-diagram.png +0 -0
  174. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/view-hierarchy-flattening.png +0 -0
  175. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-instruments-templates.png +0 -0
  176. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-thread-view.png +0 -0
  177. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-animations-reanimated.md +273 -0
  178. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-atomic-state.md +190 -0
  179. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-bottomsheet.md +339 -0
  180. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-concurrent-react.md +238 -0
  181. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-lists-flatlist-flashlist.md +223 -0
  182. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-measure-fps.md +178 -0
  183. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-memory-leaks.md +168 -0
  184. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-profile-react.md +138 -0
  185. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-react-compiler.md +261 -0
  186. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-uncontrolled-components.md +219 -0
  187. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-android-16kb-alignment.md +114 -0
  188. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-measure-tti.md +221 -0
  189. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-leaks.md +206 -0
  190. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-patterns.md +240 -0
  191. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-platform-setup.md +112 -0
  192. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-profiling.md +140 -0
  193. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-sdks-over-polyfills.md +192 -0
  194. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-threading-model.md +230 -0
  195. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-turbo-modules.md +210 -0
  196. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-view-flattening.md +180 -0
  197. package/dist/templates/default/apps/mobile/AGENTS.md +41 -0
  198. package/dist/templates/default/apps/mobile/app.json +38 -0
  199. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
  200. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/grid.png +0 -0
  201. package/dist/templates/default/apps/mobile/assets/expo.icon/icon.json +40 -0
  202. package/dist/templates/default/apps/mobile/assets/images/android-icon-background.png +0 -0
  203. package/dist/templates/default/apps/mobile/assets/images/android-icon-foreground.png +0 -0
  204. package/dist/templates/default/apps/mobile/assets/images/android-icon-monochrome.png +0 -0
  205. package/dist/templates/default/apps/mobile/assets/images/icon.png +0 -0
  206. package/dist/templates/default/apps/mobile/assets/images/splash-icon.png +0 -0
  207. package/dist/templates/default/apps/mobile/eslint.config.js +10 -0
  208. package/dist/templates/default/apps/mobile/package.json +43 -1
  209. package/dist/templates/default/apps/mobile/skills-lock.json +185 -0
  210. package/dist/templates/default/apps/mobile/src/app/_layout.tsx +5 -0
  211. package/dist/templates/default/apps/mobile/src/app/index.tsx +17 -0
  212. package/dist/templates/default/apps/mobile/tsconfig.json +20 -0
  213. package/dist/templates/default/apps/web/.agents/skills/frontend-design/SKILL.md +71 -0
  214. package/dist/templates/default/apps/web/.agents/skills/web-design-guidelines/SKILL.md +39 -0
  215. package/dist/templates/default/apps/web/.env.example +3 -0
  216. package/dist/templates/default/apps/web/components.json +23 -0
  217. package/dist/templates/default/apps/web/eslint.config.ts +21 -0
  218. package/dist/templates/default/apps/web/package.json +39 -1
  219. package/dist/templates/default/apps/web/public/disposabl-logo.svg +8 -0
  220. package/dist/templates/default/apps/web/public/favicon.ico +0 -0
  221. package/dist/templates/default/apps/web/public/manifest.json +25 -0
  222. package/dist/templates/default/apps/web/skills-lock.json +17 -0
  223. package/dist/templates/default/apps/web/src/index.css +92 -0
  224. package/dist/templates/default/apps/web/src/routeTree.gen.ts +282 -0
  225. package/dist/templates/default/apps/web/src/router/__root.tsx +63 -0
  226. package/dist/templates/default/apps/web/src/router/_authenticated/dashboard.tsx +9 -0
  227. package/dist/templates/default/apps/web/src/router/_authenticated/todos/$id.tsx +27 -0
  228. package/dist/templates/default/apps/web/src/router/_authenticated/todos/index.tsx +33 -0
  229. package/dist/templates/default/apps/web/src/router/index.tsx +15 -0
  230. package/dist/templates/default/apps/web/src/router.tsx +20 -0
  231. package/dist/templates/default/apps/web/tsconfig.json +33 -0
  232. package/dist/templates/default/apps/web/tsr.config.json +6 -0
  233. package/dist/templates/default/apps/web/vite.config.ts +67 -0
  234. package/dist/templates/default/bun.lock +3932 -0
  235. package/dist/templates/default/bunfig.toml +5 -0
  236. package/dist/templates/default/disposabl.json +5 -0
  237. package/dist/templates/default/gitignore +9 -1
  238. package/dist/templates/default/package.json +29 -4
  239. package/dist/templates/default/packages/backend/.agents/skills/convex/SKILL.md +69 -0
  240. package/dist/templates/default/packages/backend/.agents/skills/convex-add/SKILL.md +26 -0
  241. package/dist/templates/default/packages/backend/.agents/skills/convex-advisor/SKILL.md +32 -0
  242. package/dist/templates/default/packages/backend/.agents/skills/convex-agent/SKILL.md +25 -0
  243. package/dist/templates/default/packages/backend/.agents/skills/convex-auth/SKILL.md +29 -0
  244. package/dist/templates/default/packages/backend/.agents/skills/convex-authz/SKILL.md +36 -0
  245. package/dist/templates/default/packages/backend/.agents/skills/convex-backup/SKILL.md +33 -0
  246. package/dist/templates/default/packages/backend/.agents/skills/convex-billing/SKILL.md +69 -0
  247. package/dist/templates/default/packages/backend/.agents/skills/convex-cost/SKILL.md +29 -0
  248. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/SKILL.md +325 -0
  249. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/agents/openai.yaml +14 -0
  250. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/assets/icon.svg +3 -0
  251. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/advanced-patterns.md +146 -0
  252. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/hybrid-components.md +38 -0
  253. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/local-components.md +39 -0
  254. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/packaged-components.md +54 -0
  255. package/dist/templates/default/packages/backend/.agents/skills/convex-crons/SKILL.md +23 -0
  256. package/dist/templates/default/packages/backend/.agents/skills/convex-deploy-guard/SKILL.md +29 -0
  257. package/dist/templates/default/packages/backend/.agents/skills/convex-design/SKILL.md +30 -0
  258. package/dist/templates/default/packages/backend/.agents/skills/convex-docs/SKILL.md +31 -0
  259. package/dist/templates/default/packages/backend/.agents/skills/convex-domains/SKILL.md +26 -0
  260. package/dist/templates/default/packages/backend/.agents/skills/convex-env/SKILL.md +24 -0
  261. package/dist/templates/default/packages/backend/.agents/skills/convex-expert/SKILL.md +38 -0
  262. package/dist/templates/default/packages/backend/.agents/skills/convex-explain-app/SKILL.md +29 -0
  263. package/dist/templates/default/packages/backend/.agents/skills/convex-improve-convex-plugin/SKILL.md +24 -0
  264. package/dist/templates/default/packages/backend/.agents/skills/convex-insights/SKILL.md +32 -0
  265. package/dist/templates/default/packages/backend/.agents/skills/convex-launch-readiness/SKILL.md +35 -0
  266. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate/SKILL.md +23 -0
  267. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate-rehearse/SKILL.md +31 -0
  268. package/dist/templates/default/packages/backend/.agents/skills/convex-monitor/SKILL.md +22 -0
  269. package/dist/templates/default/packages/backend/.agents/skills/convex-optimize/SKILL.md +26 -0
  270. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/SKILL.md +29 -0
  271. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/agents/openai.yaml +14 -0
  272. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/assets/icon.svg +4 -0
  273. package/dist/templates/default/packages/backend/.agents/skills/convex-reviewer/SKILL.md +26 -0
  274. package/dist/templates/default/packages/backend/.agents/skills/convex-seed/SKILL.md +23 -0
  275. package/dist/templates/default/packages/backend/.agents/skills/convex-self-heal/SKILL.md +38 -0
  276. package/dist/templates/default/packages/backend/.agents/skills/convex-sentinel/SKILL.md +25 -0
  277. package/dist/templates/default/packages/backend/.agents/skills/convex-suggest/SKILL.md +27 -0
  278. package/dist/templates/default/packages/backend/.agents/skills/convex-test/SKILL.md +23 -0
  279. package/dist/templates/default/packages/backend/.agents/skills/convex-verify/SKILL.md +34 -0
  280. package/dist/templates/default/packages/backend/.prettierignore +4 -0
  281. package/dist/templates/default/packages/backend/AGENTS.md +18 -0
  282. package/dist/templates/default/packages/backend/CLAUDE.md +13 -0
  283. package/dist/templates/default/packages/backend/README.md +25 -0
  284. package/dist/templates/default/packages/backend/convex/_generated/ai/ai-files.state.json +6 -0
  285. package/dist/templates/default/packages/backend/convex/_generated/ai/guidelines.md +286 -0
  286. package/dist/templates/default/packages/backend/convex/_generated/api.d.ts +66 -0
  287. package/dist/templates/default/packages/backend/convex/_generated/api.js +23 -0
  288. package/dist/templates/default/packages/backend/convex/_generated/dataModel.d.ts +60 -0
  289. package/dist/templates/default/packages/backend/convex/_generated/server.d.ts +164 -0
  290. package/dist/templates/default/packages/backend/convex/_generated/server.js +101 -0
  291. package/dist/templates/default/packages/backend/convex/auth.config.ts +14 -0
  292. package/dist/templates/default/packages/backend/convex/auth.ts +15 -0
  293. package/dist/templates/default/packages/backend/convex/convex.config.ts +30 -0
  294. package/dist/templates/default/packages/backend/convex/http.ts +5 -0
  295. package/dist/templates/default/packages/backend/convex/mcp.ts +8 -0
  296. package/dist/templates/default/packages/backend/convex/schema.ts +10 -0
  297. package/dist/templates/default/packages/backend/convex/todos/index.ts +26 -0
  298. package/dist/templates/default/packages/backend/convex/todos/internal.ts +43 -0
  299. package/dist/templates/default/packages/backend/convex/tsconfig.json +27 -0
  300. package/dist/templates/default/packages/backend/convex/users.ts +20 -0
  301. package/dist/templates/default/packages/backend/eslint.config.mjs +62 -0
  302. package/dist/templates/default/packages/backend/package.json +36 -0
  303. package/dist/templates/default/packages/backend/skills-lock.json +203 -0
  304. package/dist/templates/default/packages/disposabl-kit/client/components/ui/accordion.tsx +77 -0
  305. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert-dialog.tsx +185 -0
  306. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert.tsx +75 -0
  307. package/dist/templates/default/packages/disposabl-kit/client/components/ui/aspect-ratio.tsx +22 -0
  308. package/dist/templates/default/packages/disposabl-kit/client/components/ui/attachment.tsx +207 -0
  309. package/dist/templates/default/packages/disposabl-kit/client/components/ui/avatar.tsx +106 -0
  310. package/dist/templates/default/packages/disposabl-kit/client/components/ui/badge.tsx +51 -0
  311. package/dist/templates/default/packages/disposabl-kit/client/components/ui/breadcrumb.tsx +121 -0
  312. package/dist/templates/default/packages/disposabl-kit/client/components/ui/bubble.tsx +127 -0
  313. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button-group.tsx +87 -0
  314. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button.tsx +57 -0
  315. package/dist/templates/default/packages/disposabl-kit/client/components/ui/calendar.tsx +241 -0
  316. package/dist/templates/default/packages/disposabl-kit/client/components/ui/card.tsx +102 -0
  317. package/dist/templates/default/packages/disposabl-kit/client/components/ui/carousel.tsx +239 -0
  318. package/dist/templates/default/packages/disposabl-kit/client/components/ui/chart.tsx +368 -0
  319. package/dist/templates/default/packages/disposabl-kit/client/components/ui/checkbox.tsx +27 -0
  320. package/dist/templates/default/packages/disposabl-kit/client/components/ui/code-block.tsx +243 -0
  321. package/dist/templates/default/packages/disposabl-kit/client/components/ui/collapsible.tsx +19 -0
  322. package/dist/templates/default/packages/disposabl-kit/client/components/ui/combobox.tsx +300 -0
  323. package/dist/templates/default/packages/disposabl-kit/client/components/ui/command.tsx +194 -0
  324. package/dist/templates/default/packages/disposabl-kit/client/components/ui/context-menu.tsx +271 -0
  325. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dialog.tsx +156 -0
  326. package/dist/templates/default/packages/disposabl-kit/client/components/ui/direction.tsx +4 -0
  327. package/dist/templates/default/packages/disposabl-kit/client/components/ui/drawer.tsx +224 -0
  328. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dropdown-menu.tsx +269 -0
  329. package/dist/templates/default/packages/disposabl-kit/client/components/ui/empty.tsx +103 -0
  330. package/dist/templates/default/packages/disposabl-kit/client/components/ui/field.tsx +236 -0
  331. package/dist/templates/default/packages/disposabl-kit/client/components/ui/hover-card.tsx +50 -0
  332. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-group.tsx +158 -0
  333. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-otp.tsx +83 -0
  334. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input.tsx +19 -0
  335. package/dist/templates/default/packages/disposabl-kit/client/components/ui/item.tsx +201 -0
  336. package/dist/templates/default/packages/disposabl-kit/client/components/ui/kbd.tsx +26 -0
  337. package/dist/templates/default/packages/disposabl-kit/client/components/ui/label.tsx +19 -0
  338. package/dist/templates/default/packages/disposabl-kit/client/components/ui/marker.tsx +70 -0
  339. package/dist/templates/default/packages/disposabl-kit/client/components/ui/menubar.tsx +284 -0
  340. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message-scroller.tsx +128 -0
  341. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message.tsx +91 -0
  342. package/dist/templates/default/packages/disposabl-kit/client/components/ui/native-select.tsx +64 -0
  343. package/dist/templates/default/packages/disposabl-kit/client/components/ui/navigation-menu.tsx +170 -0
  344. package/dist/templates/default/packages/disposabl-kit/client/components/ui/pagination.tsx +133 -0
  345. package/dist/templates/default/packages/disposabl-kit/client/components/ui/popover.tsx +87 -0
  346. package/dist/templates/default/packages/disposabl-kit/client/components/ui/progress.tsx +82 -0
  347. package/dist/templates/default/packages/disposabl-kit/client/components/ui/questionnaire.tsx +330 -0
  348. package/dist/templates/default/packages/disposabl-kit/client/components/ui/radio-group.tsx +35 -0
  349. package/dist/templates/default/packages/disposabl-kit/client/components/ui/resizable.tsx +49 -0
  350. package/dist/templates/default/packages/disposabl-kit/client/components/ui/scroll-area.tsx +51 -0
  351. package/dist/templates/default/packages/disposabl-kit/client/components/ui/select.tsx +201 -0
  352. package/dist/templates/default/packages/disposabl-kit/client/components/ui/separator.tsx +22 -0
  353. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sheet.tsx +132 -0
  354. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sidebar.tsx +723 -0
  355. package/dist/templates/default/packages/disposabl-kit/client/components/ui/skeleton.tsx +13 -0
  356. package/dist/templates/default/packages/disposabl-kit/client/components/ui/slider.tsx +51 -0
  357. package/dist/templates/default/packages/disposabl-kit/client/components/ui/spinner.tsx +16 -0
  358. package/dist/templates/default/packages/disposabl-kit/client/components/ui/switch.tsx +31 -0
  359. package/dist/templates/default/packages/disposabl-kit/client/components/ui/table.tsx +113 -0
  360. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tabs.tsx +81 -0
  361. package/dist/templates/default/packages/disposabl-kit/client/components/ui/textarea.tsx +17 -0
  362. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toast.tsx +229 -0
  363. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle-group.tsx +87 -0
  364. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle.tsx +42 -0
  365. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tooltip.tsx +65 -0
  366. package/dist/templates/default/packages/disposabl-kit/client/components/ui/trace.tsx +161 -0
  367. package/dist/templates/default/packages/disposabl-kit/client/hooks/use-mobile.ts +21 -0
  368. package/dist/templates/default/packages/disposabl-kit/client/lib/prerender.ts +89 -0
  369. package/dist/templates/default/packages/disposabl-kit/client/lib/return-to.ts +12 -0
  370. package/dist/templates/default/packages/disposabl-kit/client/lib/utils.ts +1 -0
  371. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/login.tsx +114 -0
  372. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/signUp.tsx +120 -0
  373. package/dist/templates/default/packages/disposabl-kit/client/routes/_authenticated/route.tsx +38 -0
  374. package/dist/templates/default/packages/disposabl-kit/client/routes/consent.tsx +137 -0
  375. package/dist/templates/default/packages/disposabl-kit/client/routes/route.tsx +30 -0
  376. package/dist/templates/default/packages/disposabl-kit/client/styles/globals.css +60 -0
  377. package/dist/templates/default/packages/disposabl-kit/client/vite.config.ts +32 -0
  378. package/dist/templates/default/packages/disposabl-kit/components.json +23 -0
  379. package/dist/templates/default/packages/disposabl-kit/eslint.config.js +21 -0
  380. package/dist/templates/default/packages/disposabl-kit/package.json +60 -0
  381. package/dist/templates/default/packages/disposabl-kit/server/http.ts +86 -0
  382. package/dist/templates/default/packages/disposabl-kit/server/lib/functions.ts +40 -0
  383. package/dist/templates/default/packages/disposabl-kit/server/lib/platforms.ts +20 -0
  384. package/dist/templates/default/packages/disposabl-kit/server/lib/static-routes.ts +56 -0
  385. package/dist/templates/default/packages/disposabl-kit/tsconfig.json +17 -0
  386. package/dist/templates/default/patches/@convex-dev%2Fauth@2.0.0-beta.0.patch +310 -0
  387. package/dist/templates/default/patches/@convex-dev%2Fstatic-hosting@0.2.1.patch +187 -0
  388. package/dist/templates/default/tsconfig.json +9 -0
  389. package/dist/templates/default/turbo.json +51 -0
  390. package/package.json +1 -2
@@ -0,0 +1,112 @@
1
+ ---
2
+ title: Platform Differences
3
+ impact: MEDIUM
4
+ tags: ios, android, xcode, gradle, cocoapods
5
+ ---
6
+
7
+ # Skill: Platform Differences
8
+
9
+ Navigate iOS and Android tooling, dependency management, and build systems in React Native.
10
+
11
+ ## Quick Reference
12
+
13
+ | Platform | IDE | Package Manager | Build System |
14
+ |----------|-----|-----------------|--------------|
15
+ | JavaScript | VS Code | npm/yarn/pnpm/bun | Metro |
16
+ | iOS | Xcode | CocoaPods | xcodebuild |
17
+ | Android | Android Studio | Gradle | Gradle |
18
+
19
+ ```bash
20
+ # Common commands
21
+ bundle install # Install ruby bundler
22
+ cd ios && bundle exec pod install # Install CocoaPods deps
23
+ cd android && ./gradlew tasks # Verify Gradle wrapper and tasks
24
+ xed ios/ # Open Xcode
25
+ ```
26
+
27
+ ## When to Use
28
+
29
+ - Setting up native development environment
30
+ - Adding native dependencies
31
+ - Debugging platform-specific issues
32
+ - Understanding build processes
33
+
34
+ ## Dependency Management
35
+
36
+ React Native autolinking only handles libraries structured as React Native modules. React Native packages often ship native iOS/Android code through npm, then CocoaPods/Gradle reference local files from `node_modules`. Pure native dependencies still need Podfile or Gradle changes.
37
+
38
+ ### JavaScript (npm/yarn/pnpm/bun)
39
+
40
+ Infer package manager from lockfile: `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `bun.lockb`.
41
+
42
+ ### iOS (CocoaPods)
43
+
44
+ ```bash
45
+ # Install pods after npm install
46
+ bundle install
47
+ cd ios && bundle exec pod install
48
+
49
+ # Key files
50
+ ios/Podfile # Pod dependencies
51
+ ios/Pods/ # Installed pods (gitignored)
52
+ ios/*.xcworkspace # Open this in Xcode (not .xcodeproj)
53
+ Gemfile # Ruby/CocoaPods version
54
+ ```
55
+
56
+
57
+ ### Android (Gradle)
58
+
59
+ ```bash
60
+ # Verify Gradle after adding dependencies
61
+ cd android && ./gradlew tasks
62
+
63
+ # Key files
64
+ android/build.gradle # Project-level config
65
+ android/app/build.gradle # App dependencies
66
+ android/gradle.properties # Build flags
67
+ android/gradlew # Gradle wrapper
68
+ ```
69
+
70
+ Use exact Gradle dependency versions in production. Avoid dynamic `+` versions because they can change builds unpredictably.
71
+
72
+ ## Common Commands
73
+
74
+ ```bash
75
+ # iOS
76
+ bundle install # Install ruby bundler
77
+ cd ios && bundle exec pod install # Install pods
78
+ xcrun simctl list # List simulators
79
+
80
+ # Android
81
+ cd android && ./gradlew clean # Clean build
82
+ ./gradlew tasks # List available tasks
83
+ ./gradlew assembleRelease # Build release APK
84
+
85
+ # React Native CLI
86
+ npx react-native start # Start Metro
87
+ npx react-native run-ios # Run on iOS
88
+ npx react-native run-android # Run on Android
89
+
90
+ # Expo
91
+ npx expo start # Start Metro (Expo)
92
+ npx expo run:ios # Run on iOS (dev client)
93
+ npx expo run:android # Run on Android (dev client)
94
+ npx expo prebuild # Generate native projects
95
+ ```
96
+
97
+ ## Troubleshooting
98
+
99
+ | Issue | Solution |
100
+ |-------|----------|
101
+ | Pod install fails | `cd ios && bundle exec pod install --repo-update` |
102
+ | Xcode build fails | `cd ios && xcodebuild clean` |
103
+ | Android Gradle sync fails | Open Android Studio sync details, then run the failing Gradle task directly |
104
+ | Can't find simulator | `xcrun simctl list` to verify name |
105
+ | Metro cache issues | `npx react-native start --reset-cache` |
106
+ | React Native cache issues | Clear the specific cache reported by the failing tool |
107
+
108
+ ## Related Skills
109
+
110
+ - [native-profiling.md](./native-profiling.md) - Use IDE profilers
111
+ - [native-turbo-modules.md](./native-turbo-modules.md) - Build native modules
112
+ - [upgrading-react-native.md](../../upgrading-react-native/references/upgrading-react-native.md) - Upgrade React Native safely
@@ -0,0 +1,140 @@
1
+ ---
2
+ title: Profile Native Code
3
+ impact: MEDIUM
4
+ tags: xcode, instruments, android-studio, profiler
5
+ ---
6
+
7
+ # Skill: Profile Native Code
8
+
9
+ Use Xcode Instruments and Android Studio Profiler to identify native performance bottlenecks.
10
+
11
+ ## Quick Command
12
+
13
+ ```bash
14
+ # iOS: Open Instruments
15
+ # Xcode → Open Developer Tool → Instruments → Time Profiler
16
+
17
+ # Android: Open Profiler
18
+ # Android Studio → View → Tool Windows → Profiler
19
+ ```
20
+
21
+ ## When to Use
22
+
23
+ - App is slow but JS profiler shows no issues
24
+ - Investigating native module performance
25
+ - Startup feels slow (native init)
26
+ - Battery drain concerns
27
+ - Need CPU/memory breakdown by thread
28
+
29
+ > **Note**: This skill involves visual profiler output (Xcode Instruments, Android Studio Profiler). Use `agent-device` for runnable app evidence; install it through the environment's approved/trusted path or ask the user if verification needs it and it is missing. Profiler-specific GUI analysis may still require exported traces or human review. Record concrete thread names, stack frames, and durations in text when asking an agent to reason about them.
30
+
31
+ ## iOS Profiling with Xcode
32
+
33
+ ### Quick Check: Debug Navigator
34
+
35
+ Use Xcode's Debug Navigator for quick CPU, memory, disk, and network signals before collecting a full Instruments trace.
36
+
37
+ **CPU percentage can exceed 100%** (multi-core usage).
38
+
39
+ ### Deep Profiling: Instruments
40
+
41
+ Record a Time Profiler trace on the target device, perform the suspect interaction, and inspect the relevant threads and call stacks.
42
+
43
+ ### Analyzing Time Profiler Results
44
+
45
+ **Key views:**
46
+ - **Flame Graph**: Visual call stack over time
47
+ - **Call Tree**: Hierarchical function breakdown
48
+ - **Ranked**: Functions sorted by time (Bottom-Up)
49
+
50
+ **Useful filters:**
51
+ - Hide System Libraries
52
+ - Invert Call Tree (bottom-up view)
53
+ - Filter by thread (main, JS, etc.)
54
+
55
+ **Identifying problems:**
56
+ - **Microhang**: Brief UI unresponsiveness
57
+ - **Hang**: Full UI thread block (critical)
58
+ - Yellow = most time spent
59
+
60
+ ### Thread Breakdown
61
+
62
+ Pin threads to compare:
63
+ - **Main thread** (SampleApp): UI rendering
64
+ - **JavaScript thread**: React/JS execution
65
+ - **Background threads**: Native modules
66
+
67
+ JS thread blocking and UI thread blocking are different signals; inspect both before choosing a fix.
68
+
69
+ ## Android Profiling with Android Studio
70
+
71
+ ### Launch Profiler
72
+
73
+ Use Android Studio Profiler on the target device or emulator.
74
+
75
+ ### CPU Profiling
76
+
77
+ Record CPU hotspots while performing the suspect interaction, then inspect flame graph, bottom-up, and timeline views.
78
+
79
+ ### Analyzing Results
80
+
81
+ **Flame Graph:**
82
+ - Zoom with scroll/pinch
83
+ - Click to expand call stacks
84
+ - Filter by keyword (e.g., "hermes")
85
+
86
+ **Views:**
87
+ - **Top Down**: From entry points down
88
+ - **Bottom Up**: From slowest functions up
89
+ - **Flame Chart**: Timeline visualization
90
+
91
+ ### Reading the Call Stack
92
+
93
+ Example analysis:
94
+ ```
95
+ JS Thread activity after button press:
96
+ - Event handler on main thread
97
+ - Triggers JS work via sync JSI calls
98
+ - Hermes processes React reconciliation
99
+ - Significant time in commit/layout-related work
100
+ ```
101
+
102
+ ## Platform Tools Summary
103
+
104
+ | Tool | Platform | Use Case |
105
+ |------|----------|----------|
106
+ | Time Profiler | iOS | CPU hotspots |
107
+ | Leaks | iOS | Memory leaks |
108
+ | Hangs | iOS | UI thread blocks |
109
+ | CPU Profiler | Android | CPU hotspots |
110
+ | Memory Profiler | Android | Memory tracking |
111
+ | Perfetto | Android | Advanced trace analysis |
112
+
113
+ ## Perfetto (Advanced Android)
114
+
115
+ Export traces from Android Studio and analyze at [ui.perfetto.dev](https://ui.perfetto.dev/):
116
+
117
+ - Cross-process analysis
118
+ - Custom trace events
119
+ - Additional visualizations
120
+
121
+ ## Expo Notes
122
+
123
+ - **Expo Go**: Cannot profile native code directly; JS profiling only
124
+ - **Dev Client / Prebuild**: Full native profiling supported via Xcode/Android Studio
125
+ - Run `npx expo prebuild` to generate native projects, then profile as bare React Native
126
+
127
+ ## Common Findings
128
+
129
+ | Symptom | Likely Cause |
130
+ |---------|--------------|
131
+ | Main thread hangs | Heavy UI work, blocked operations |
132
+ | JS thread spikes | React re-renders, heavy computation |
133
+ | Background thread busy | Native module work |
134
+ | Memory climbing | Leak (see memory profiling skills) |
135
+
136
+ ## Related Skills
137
+
138
+ - [native-measure-tti.md](./native-measure-tti.md) - Profile startup specifically
139
+ - [native-memory-leaks.md](./native-memory-leaks.md) - Memory profiling
140
+ - [js-profile-react.md](./js-profile-react.md) - JS/React profiling
@@ -0,0 +1,192 @@
1
+ ---
2
+ title: Native SDKs
3
+ impact: HIGH
4
+ tags: polyfills, intl, crypto, navigation, native
5
+ ---
6
+
7
+ # Skill: Native SDKs
8
+
9
+ Replace web polyfills and JS navigators with native React Native implementations for better performance.
10
+
11
+ ## Quick Pattern
12
+
13
+ **Before (JS polyfills - 430+ KB):**
14
+
15
+ ```tsx
16
+ import '@formatjs/intl-datetimeformat/polyfill';
17
+ import CryptoJS from 'crypto-js';
18
+ import { createStackNavigator } from '@react-navigation/stack';
19
+ ```
20
+
21
+ **After (native implementations):**
22
+
23
+ ```tsx
24
+ // Keep this polyfill only if the app uses DateTimeFormat options/locales
25
+ // unsupported by the target Hermes/platform combination.
26
+ import { createHash } from 'react-native-quick-crypto';
27
+ import { createNativeStackNavigator } from '@react-navigation/native-stack';
28
+ ```
29
+
30
+ ## When to Use
31
+
32
+ - Large JS bundle from polyfills
33
+ - Navigation feels non-native
34
+ - Crypto operations are slow
35
+ - Internationalization bloating bundle
36
+
37
+ ## Step-by-Step Instructions
38
+
39
+ ### 1. Remove Unnecessary Intl Polyfills
40
+
41
+ Hermes supports many `Intl` APIs natively, but not every constructor and method combination across platforms. Audit the exact APIs and methods you use before removing polyfills:
42
+
43
+ ```tsx
44
+ // BEFORE: All these polyfills (430+ KB)
45
+ import '@formatjs/intl-getcanonicallocales/polyfill';
46
+ import '@formatjs/intl-locale/polyfill';
47
+ import '@formatjs/intl-numberformat/polyfill';
48
+ import '@formatjs/intl-numberformat/locale-data/en';
49
+ import '@formatjs/intl-datetimeformat/polyfill';
50
+ import '@formatjs/intl-datetimeformat/locale-data/en';
51
+ import '@formatjs/intl-pluralrules/polyfill';
52
+ import '@formatjs/intl-pluralrules/locale-data/en';
53
+ import '@formatjs/intl-relativetimeformat/polyfill';
54
+ import '@formatjs/intl-relativetimeformat/locale-data/en';
55
+ import '@formatjs/intl-displaynames/polyfill';
56
+ ```
57
+
58
+ **Hermes Intl support must be checked against the Hermes version in the app:**
59
+
60
+ | API | Hermes | Keep Polyfill? |
61
+ |-----|--------|----------------|
62
+ | `Intl.Collator` | ✅ | No |
63
+ | `Intl.DateTimeFormat` | ⚠️ Partial | Maybe |
64
+ | `Intl.NumberFormat` | ⚠️ Partial | Maybe |
65
+ | `Intl.getCanonicalLocales()` | ✅ | No |
66
+ | `Intl.supportedValuesOf()` | ✅ | No |
67
+ | `Intl.Locale` | ❌ | Yes |
68
+ | `Intl.PluralRules` | ❌ | Yes |
69
+ | `Intl.RelativeTimeFormat` | ❌ | Yes |
70
+ | `Intl.DisplayNames` | ❌ | Yes |
71
+ | `Intl.ListFormat` | ❌ | Yes |
72
+ | `Intl.Segmenter` | ❌ | Yes |
73
+
74
+ Constructor support does not guarantee every option or method your app uses. Keep polyfills for any API, option, locale data, or method the app depends on but Hermes does not fully support on the target platform.
75
+
76
+ ```tsx
77
+ // AFTER: Keep only the polyfills your app still needs
78
+ import '@formatjs/intl-locale/polyfill';
79
+ import '@formatjs/intl-pluralrules/polyfill';
80
+ import '@formatjs/intl-pluralrules/locale-data/en';
81
+ import '@formatjs/intl-relativetimeformat/polyfill';
82
+ import '@formatjs/intl-relativetimeformat/locale-data/en';
83
+ import '@formatjs/intl-displaynames/polyfill';
84
+ ```
85
+
86
+ If you use `Intl.NumberFormat.prototype.formatToParts()` on Hermes/iOS, also keep:
87
+
88
+ ```tsx
89
+ import '@formatjs/intl-numberformat/polyfill';
90
+ import '@formatjs/intl-numberformat/locale-data/en';
91
+ ```
92
+
93
+ ### 2. Use Native Crypto
94
+
95
+ Replace JS crypto with native C++ implementation:
96
+
97
+ ```bash
98
+ npm install react-native-quick-crypto
99
+ ```
100
+
101
+ ```tsx
102
+ // BEFORE: Slow JS implementation
103
+ import CryptoJS from 'crypto-js';
104
+
105
+ // AFTER: Native C++ implementation
106
+ import { createHash } from 'react-native-quick-crypto';
107
+ ```
108
+
109
+ Essential for:
110
+ - Web3 wallet seed generation
111
+ - CSPRNG (Cryptographically Secure Random Numbers)
112
+ - Any heavy cryptographic operations
113
+
114
+ Benchmark crypto changes on the target device class. Native implementations usually reduce JS-thread work, but the exact win depends on algorithm, payload size, and bridge/JSI overhead.
115
+
116
+ ### 3. Use Native Stack Navigator
117
+
118
+ ```bash
119
+ npm install @react-navigation/native-stack react-native-screens
120
+ ```
121
+
122
+ ```tsx
123
+ // BEFORE: JS-based stack (more flexible, less native)
124
+ import { createStackNavigator } from '@react-navigation/stack';
125
+ const Stack = createStackNavigator();
126
+
127
+ // AFTER: Native stack (native feel, better performance)
128
+ import { createNativeStackNavigator } from '@react-navigation/native-stack';
129
+ const Stack = createNativeStackNavigator();
130
+
131
+ // Usage is nearly identical
132
+ <Stack.Navigator>
133
+ <Stack.Screen name="Home" component={HomeScreen} />
134
+ <Stack.Screen name="Details" component={DetailsScreen} />
135
+ </Stack.Navigator>
136
+ ```
137
+
138
+ **Benefits:**
139
+ - Native navigation animations
140
+ - Platform-specific headers (large titles on iOS)
141
+ - Lower memory usage
142
+ - Offloads work from JS thread
143
+
144
+ ### 4. Use Native Bottom Tabs
145
+
146
+ ```bash
147
+ npm install @bottom-tabs/react-navigation react-native-bottom-tabs
148
+ ```
149
+
150
+ ```tsx
151
+ // BEFORE: JS tabs
152
+ import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
153
+ const Tabs = createBottomTabNavigator();
154
+
155
+ // AFTER: Native tabs
156
+ import { createNativeBottomTabNavigator } from '@bottom-tabs/react-navigation';
157
+ const Tabs = createNativeBottomTabNavigator();
158
+
159
+ <Tabs.Navigator>
160
+ <Tabs.Screen name="Home" component={HomeScreen} />
161
+ <Tabs.Screen name="Profile" component={ProfileScreen} />
162
+ </Tabs.Navigator>
163
+ ```
164
+
165
+ ## Recommended Native Libraries
166
+
167
+ | Category | Library | Description |
168
+ |----------|---------|-------------|
169
+ | Navigation | `react-native-screens` | Native screen containers |
170
+ | Menus | `zeego` | Native menus (Radix-like API) |
171
+ | Slider | `@react-native-community/slider` | Native slider |
172
+ | Date Picker | `react-native-date-picker` | Native date/time picker |
173
+
174
+ ## Decision Matrix
175
+
176
+ | Scenario | Use Native? | Tradeoff |
177
+ |----------|-------------|----------|
178
+ | Standard navigation | ✅ Yes | Slight API differences |
179
+ | Custom transition animations | ⚠️ Maybe | Native is more limited |
180
+ | Platform-consistent UI | ✅ Yes | Less customization |
181
+ | Unique/branded design | ⚠️ Consider JS | Native may not support |
182
+
183
+ ## Common Pitfalls
184
+
185
+ - **Assuming constructor support means full method coverage**: Check the specific Hermes API and methods you call
186
+ - **Ignoring migration effort**: Native navigators have slightly different APIs
187
+ - **Over-customizing native components**: If design requires heavy customization, JS might be better
188
+
189
+ ## Related Skills
190
+
191
+ - [bundle-analyze-js.md](./bundle-analyze-js.md) - Measure polyfill impact
192
+ - [bundle-library-size.md](./bundle-library-size.md) - Compare library sizes
@@ -0,0 +1,230 @@
1
+ ---
2
+ title: Threading Model
3
+ impact: HIGH
4
+ tags: threads, turbo-modules, fabric, async, sync
5
+ ---
6
+
7
+ # Skill: Threading Model
8
+
9
+ Understand which threads Turbo Modules and Fabric use for initialization, method calls, and view updates.
10
+
11
+ ## Quick Reference
12
+
13
+ Thread names and exact scheduling can vary by React Native version, architecture, and host app setup. Use this as a default mental model, then confirm with a profiler when the exact thread matters.
14
+
15
+ | Action | Default assumption |
16
+ |--------|--------------------|
17
+ | UI view creation/updates | Main/UI thread |
18
+ | Sync value-returning Turbo Module method | Blocks the JS caller until it returns |
19
+ | Async Turbo Module method | Does not block JS, but may run on a shared native modules executor |
20
+ | Heavy CPU/I/O work | Move to a module-owned background queue/coroutine |
21
+
22
+ **Key rule**: Sync methods should be trivial and deterministic. Move anything that can block, allocate heavily, perform I/O, or wait on locks to async/background work.
23
+
24
+ ## When to Use
25
+
26
+ - Building native modules
27
+ - Debugging threading issues
28
+ - Accessing UI from native code
29
+ - Understanding async vs sync method behavior
30
+
31
+ ## Available Threads
32
+
33
+ | Thread | Name in Debugger | Purpose |
34
+ |--------|------------------|---------|
35
+ | Main/UI | Main thread | UI rendering, UIKit/Android Views |
36
+ | JavaScript | `mqt_v_js` | JS execution, React |
37
+ | Native Modules | `mqt_v_native` | Async Turbo Module calls |
38
+ | Custom | Various | Your background threads |
39
+
40
+ ## Turbo Modules Threading
41
+
42
+ ### Initialization
43
+
44
+ | Platform | Thread | Notes |
45
+ |----------|--------|-------|
46
+ | iOS | Main thread | Assumes UIKit access needed |
47
+ | Android (lazy) | JS thread | Default behavior |
48
+ | Android (eager) | Native modules thread | When `needsEagerInit = true` |
49
+
50
+ **iOS**: React Native runs `init` on main thread assuming UIKit access.
51
+
52
+ **Android Eager Loading:**
53
+
54
+ ```kotlin
55
+ // ReactModuleInfo constructor params:
56
+ // canOverrideExistingModule, needsEagerInit, isCxxModule, isTurboModule
57
+ ReactModuleInfo(
58
+ AwesomeModule.NAME,
59
+ AwesomeModule.NAME,
60
+ false,
61
+ true, // needsEagerInit = true → runs on native modules thread
62
+ false,
63
+ true
64
+ )
65
+ ```
66
+
67
+ ### Synchronous Method Calls
68
+
69
+ Synchronous value-returning Turbo Module methods block the JS caller until they return. Treat them as JS-critical even if a platform implementation dispatches through an internal executor.
70
+
71
+ ```swift
72
+ // iOS - runs on JS thread
73
+ @objc func multiply(_ a: Double, b: Double) -> NSNumber {
74
+ // This blocks JS for entire duration!
75
+ return a * b as NSNumber
76
+ }
77
+ ```
78
+
79
+ **Danger**: Long sync operations freeze the app:
80
+
81
+ ```swift
82
+ // BAD: Blocks JS for 20 seconds
83
+ @objc func multiply(_ a: Double, b: Double) -> NSNumber {
84
+ Thread.sleep(forTimeInterval: 20) // App frozen!
85
+ return a * b as NSNumber
86
+ }
87
+ ```
88
+
89
+ ### Asynchronous Method Calls
90
+
91
+ **Usually dispatched off the JS thread** - does not block JS while the native work is pending.
92
+
93
+ The native modules thread is shared across modules. If async work is CPU-heavy or long-running, move it to a module-owned queue/coroutine scope rather than occupying the shared React Native native modules thread.
94
+
95
+ ```swift
96
+ // iOS - runs on mqt_v_native thread
97
+ @objc func asyncOperation(
98
+ _ a: Double,
99
+ resolve: @escaping RCTPromiseResolveBlock,
100
+ reject: RCTPromiseRejectBlock
101
+ ) {
102
+ // Already on background thread
103
+ resolve(a * 2)
104
+ }
105
+ ```
106
+
107
+ ```kotlin
108
+ // Android - runs on native modules thread
109
+ override fun asyncOperation(a: Double, promise: Promise?) {
110
+ // Already on background thread
111
+ promise?.resolve(a * 2)
112
+ }
113
+ ```
114
+
115
+ ### Module Invalidation
116
+
117
+ Called when React Native instance is torn down (e.g., Metro reload):
118
+
119
+ | Platform | Thread |
120
+ |----------|--------|
121
+ | iOS | Native modules thread |
122
+ | Android | ReactHost thread pool |
123
+
124
+ **iOS**: Implement `RCTInvalidating` protocol.
125
+
126
+ ## Fabric (Native Views) Threading
127
+
128
+ ### View Lifecycle
129
+
130
+ | Operation | Default assumption |
131
+ |-----------|--------------------|
132
+ | View init | Main thread |
133
+ | Prop updates | Main thread |
134
+ | Layout/shadow tree work | Architecture-dependent; profile before assuming thread ownership |
135
+
136
+ Views always manipulate UI on main thread (UIKit/Android requirement).
137
+
138
+ Do not use a hard-coded "Yoga runs on X thread" rule when diagnosing performance. React Native's renderer and scheduler details change across New Architecture releases; use Instruments, Perfetto, or Android Studio profiler to identify the actual bottleneck.
139
+
140
+ ## Moving Work to Background
141
+
142
+ ### iOS: DispatchQueue
143
+
144
+ ```swift
145
+ @objc func heavyWork(
146
+ resolve: @escaping RCTPromiseResolveBlock,
147
+ reject: RCTPromiseRejectBlock
148
+ ) {
149
+ DispatchQueue.global().async {
150
+ // Heavy computation here
151
+ let result = self.compute()
152
+ resolve(result)
153
+ }
154
+ }
155
+ ```
156
+
157
+ ### Android: Coroutines
158
+
159
+ ```kotlin
160
+ class MyModule(reactContext: ReactApplicationContext) :
161
+ NativeMyModuleSpec(reactContext) {
162
+
163
+ private val moduleScope = CoroutineScope(Dispatchers.Default + SupervisorJob())
164
+
165
+ override fun heavyWork(promise: Promise?) {
166
+ moduleScope.launch {
167
+ // Heavy computation here
168
+ val result = compute()
169
+ promise?.resolve(result)
170
+ }
171
+ }
172
+
173
+ override fun invalidate() {
174
+ super.invalidate()
175
+ moduleScope.cancel() // Important: cancel to prevent leaks
176
+ }
177
+ }
178
+ ```
179
+
180
+ ## Thread Safety Checklist
181
+
182
+ | Scenario | Safe? | Solution |
183
+ |----------|-------|----------|
184
+ | Sync method accessing shared state | ⚠️ | Use locks/synchronized |
185
+ | Async method accessing UI | ❌ | Dispatch to main thread |
186
+ | Multiple async calls to same resource | ⚠️ | Queue or mutex |
187
+ | Accessing JS from background | ❌ | Use CallInvoker |
188
+
189
+ ### Accessing UI from Background (iOS)
190
+
191
+ ```swift
192
+ DispatchQueue.global().async {
193
+ let result = self.heavyComputation()
194
+
195
+ DispatchQueue.main.async {
196
+ // Safe to update UI here
197
+ self.updateUI(with: result)
198
+ }
199
+ }
200
+ ```
201
+
202
+ ### Accessing UI from Background (Android)
203
+
204
+ ```kotlin
205
+ moduleScope.launch(Dispatchers.Default) {
206
+ val result = heavyComputation()
207
+
208
+ withContext(Dispatchers.Main) {
209
+ // Safe to update UI here
210
+ updateUI(result)
211
+ }
212
+ }
213
+ ```
214
+
215
+ ## Summary Table
216
+
217
+ | Action | iOS Thread | Android Thread |
218
+ |--------|------------|----------------|
219
+ | Module init | Version/setup dependent; avoid blocking | Version/setup dependent; avoid blocking |
220
+ | Sync method | Blocks JS caller | Blocks JS caller |
221
+ | Async method | Shared native executor or implementation-defined | Shared native executor or implementation-defined |
222
+ | View init | Main | Main |
223
+ | Prop update | Main | Main |
224
+ | Yoga/layout | Profile; do not assume fixed ownership | Profile; do not assume fixed ownership |
225
+ | Invalidate | Native modules | ReactHost pool |
226
+
227
+ ## Related Skills
228
+
229
+ - [native-turbo-modules.md](./native-turbo-modules.md) - Implement background threads
230
+ - [native-profiling.md](./native-profiling.md) - Debug thread issues