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,255 @@
1
+ ---
2
+ title: Remote Chunk Loading
3
+ impact: MEDIUM
4
+ tags: code-splitting, lazy-loading, chunks, release-artifacts, remote-code
5
+ ---
6
+
7
+ # Skill: Remote Chunk Loading
8
+
9
+ Harden remote JavaScript chunk loading when a React Native app already uses Re.Pack or has an explicit remote-code-loading requirement.
10
+
11
+ ## Quick Pattern
12
+
13
+ **Before (static import):**
14
+
15
+ ```jsx
16
+ import SettingsScreen from './screens/SettingsScreen';
17
+ ```
18
+
19
+ **After (lazy loaded chunk):**
20
+
21
+ ```jsx
22
+ const SettingsScreen = React.lazy(() =>
23
+ import(/* webpackChunkName: "settings" */ './screens/SettingsScreen')
24
+ );
25
+
26
+ <Suspense fallback={<Loading />}>
27
+ <SettingsScreen />
28
+ </Suspense>
29
+ ```
30
+
31
+ ## When to Use
32
+
33
+ Consider code splitting when:
34
+ - **Not using Hermes** (JSC/V8 benefits more)
35
+ - App size approaches app-store or base-module limits
36
+ - The app already has a micro-frontend architecture
37
+ - Loading features based on user permissions
38
+ - Other bundle-size optimizations are exhausted
39
+ - Remote delivery is an explicit product or release requirement
40
+
41
+ Do not recommend adopting Re.Pack for ordinary bundle-size work. Keep the default path on Metro/Expo unless remote chunk loading is already present or specifically required.
42
+
43
+ **Note**: Hermes already uses memory mapping for efficient bundle reading. Benefits of code splitting are minimal with Hermes or even counterproductive in some cases.
44
+
45
+ ## Security Model
46
+
47
+ Chunks are executable application code. Prefer chunks packaged with the app or resolved from a release manifest produced by your CI. Hosted chunks are acceptable only when they are first-party release artifacts, not arbitrary runtime URLs.
48
+
49
+ Keep these guardrails in place:
50
+ - Serve chunks only from a first-party, HTTPS-only origin you control
51
+ - Resolve `scriptId` through a fixed allowlist or signed release manifest
52
+ - If using Re.Pack, enable code signing for remotely hosted chunks and use strict signature verification in production
53
+ - Fail closed if a chunk is missing or unexpected
54
+ - Do not load chunks from user-controlled input, query params, or third-party domains
55
+
56
+ ## Prerequisites
57
+
58
+ - Project already uses Re.Pack, or remote chunk loading is an explicit requirement approved after measuring simpler alternatives
59
+ - Remote chunks are produced by the same release pipeline as the app
60
+ - Chunk locations come from a fixed allowlist or signed release manifest
61
+
62
+ If the project does not already use Re.Pack, do not start here. First confirm Metro/Expo bundle analysis, import cleanup, asset cleanup, native app-size work, and store delivery constraints.
63
+
64
+ ## Step-by-Step Instructions
65
+
66
+ ### 1. Create Split Point with React.lazy
67
+
68
+ ```tsx
69
+ // BEFORE: Static import
70
+ import SettingsScreen from './screens/SettingsScreen';
71
+
72
+ // AFTER: Dynamic import (creates split point)
73
+ const SettingsScreen = React.lazy(() =>
74
+ import(/* webpackChunkName: "settings" */ './screens/SettingsScreen')
75
+ );
76
+ ```
77
+
78
+ ### 2. Wrap with Suspense
79
+
80
+ ```tsx
81
+ import React, { Suspense } from 'react';
82
+
83
+ const App = () => {
84
+ return (
85
+ <Suspense fallback={<LoadingSpinner />}>
86
+ <SettingsScreen />
87
+ </Suspense>
88
+ );
89
+ };
90
+ ```
91
+
92
+ ### 3. Configure Chunk Loading
93
+
94
+ ```jsx
95
+ // index.js (before AppRegistry)
96
+ import { ScriptManager, Script } from '@callstack/repack/client';
97
+
98
+ const RELEASE_CHUNKS = Object.freeze({
99
+ settings: {
100
+ release: '42',
101
+ },
102
+ });
103
+
104
+ ScriptManager.shared.addResolver(async (scriptId) => {
105
+ if (__DEV__) {
106
+ return {
107
+ url: Script.getDevServerURL(scriptId),
108
+ cache: false,
109
+ };
110
+ }
111
+
112
+ const chunk = RELEASE_CHUNKS[scriptId];
113
+
114
+ if (!chunk) {
115
+ throw new Error(`Unknown chunk: ${scriptId}`);
116
+ }
117
+
118
+ return {
119
+ url: Script.getRemoteURL(
120
+ getFirstPartyChunkBaseURL(scriptId, chunk.release)
121
+ ),
122
+ verifyScriptSignature: 'strict',
123
+ };
124
+ });
125
+
126
+ function getFirstPartyChunkBaseURL(scriptId, release) {
127
+ // App-owned helper: read a signed CI manifest and return the first-party
128
+ // base URL without ".chunk.bundle"; Script.getRemoteURL appends it.
129
+ // Do not accept hostnames, paths, or script IDs from runtime input.
130
+ return ReleaseManifest.getChunkBaseURL({ scriptId, release });
131
+ }
132
+
133
+ AppRegistry.registerComponent(appName, () => App);
134
+ ```
135
+
136
+ For app-bundled chunks in a Re.Pack project, configure `extraChunks` with `type: 'local'` and resolve those script IDs from the filesystem:
137
+
138
+ ```jsx
139
+ if (LOCAL_CHUNKS.has(scriptId)) {
140
+ return {
141
+ url: Script.getFileSystemURL(scriptId),
142
+ absolute: true,
143
+ };
144
+ }
145
+ ```
146
+
147
+ ### 4. Build and Deploy Chunks
148
+
149
+ Build generates:
150
+ - `index.bundle` - Main bundle
151
+ - `settings.chunk.bundle` - Lazy-loaded chunk
152
+
153
+ Remote chunks are written to `build/output/<platform>/remotes` by default. Deploy chunks as first-party release artifacts. Prefer app-bundled assets; if hosted, publish them through CI to an app-owned HTTPS origin and keep the allowlist or signed manifest in sync with the app release.
154
+
155
+ ## Complete Example
156
+
157
+ ```tsx
158
+ // App.tsx
159
+ import React, { Suspense, useState } from 'react';
160
+ import { Button, View, ActivityIndicator } from 'react-native';
161
+
162
+ // Lazy load heavy feature
163
+ const HeavyFeature = React.lazy(() =>
164
+ import(/* webpackChunkName: "heavy-feature" */ './HeavyFeature')
165
+ );
166
+
167
+ const App = () => {
168
+ const [showFeature, setShowFeature] = useState(false);
169
+
170
+ return (
171
+ <View>
172
+ <Button
173
+ title="Load Feature"
174
+ onPress={() => setShowFeature(true)}
175
+ />
176
+
177
+ {showFeature && (
178
+ <Suspense fallback={<ActivityIndicator />}>
179
+ <HeavyFeature />
180
+ </Suspense>
181
+ )}
182
+ </View>
183
+ );
184
+ };
185
+ ```
186
+
187
+ ## Module Federation
188
+
189
+ Only use Module Federation when the app already has a micro-frontend architecture and the organizational boundary is worth the runtime trust boundary:
190
+
191
+ ```tsx
192
+ // Host app loads remote module
193
+ const RemoteModule = React.lazy(() =>
194
+ import('remote-app/Module')
195
+ );
196
+ ```
197
+
198
+ Federation increases the trust boundary. Keep the same first-party origin, release-manifest, code-signing, and allowlist rules as above.
199
+
200
+ ## Caching Strategy
201
+
202
+ ```tsx
203
+ import AsyncStorage from '@react-native-async-storage/async-storage';
204
+
205
+ ScriptManager.shared.setStorage(AsyncStorage);
206
+ ```
207
+
208
+ Set storage before adding resolvers so Re.Pack can cache resolved script locator data. Return `cache: false` for dev server chunks or any script that should bypass caching.
209
+
210
+ ## When NOT to Use
211
+
212
+ | Scenario | Why Not |
213
+ |----------|---------|
214
+ | Using Hermes | mmap already efficient |
215
+ | Small app | Overhead not worth it |
216
+ | Simple navigation | Native navigation better |
217
+ | Quick iteration needed | Added complexity |
218
+
219
+ ## Hermes Memory Mapping
220
+
221
+ Hermes reads bytecode lazily via mmap:
222
+ - Only loads executed code into memory
223
+ - No parse step needed
224
+ - Code splitting provides marginal benefit
225
+
226
+ ## Verification
227
+
228
+ ```tsx
229
+ // Check if chunk loaded correctly
230
+ ScriptManager.shared.on('loading', (script) => {
231
+ console.log(`Loading: ${script.scriptId}`);
232
+ });
233
+
234
+ ScriptManager.shared.on('loaded', (script) => {
235
+ console.log(`Loaded: ${script.scriptId}`);
236
+ });
237
+
238
+ ScriptManager.shared.on('error', (error) => {
239
+ console.error('Script loading failed:', error);
240
+ });
241
+ ```
242
+
243
+ ## Common Pitfalls
244
+
245
+ - **Forgetting Suspense**: Lazy components need fallback
246
+ - **Wrong CDN path**: Chunks 404 in production
247
+ - **No caching**: Re-downloads on every load
248
+ - **Too many chunks**: Network overhead exceeds savings
249
+ - **Untrusted chunk source**: JS chunks from third-party or user-controlled origins are equivalent to remote code execution
250
+
251
+ ## Related Skills
252
+
253
+ - [bundle-tree-shaking.md](./bundle-tree-shaking.md) - Tree-shaking caveats
254
+ - [bundle-analyze-js.md](./bundle-analyze-js.md) - Measure chunk sizes
255
+ - [native-measure-tti.md](./native-measure-tti.md) - Verify TTI impact
@@ -0,0 +1,167 @@
1
+ ---
2
+ title: Disable JS Bundle Compression
3
+ impact: HIGH
4
+ tags: android, hermes, mmap, tti, startup
5
+ ---
6
+
7
+ # Skill: Disable JS Bundle Compression
8
+
9
+ Disable Android JS bundle compression to enable Hermes memory mapping for faster startup on React Native 0.78 and earlier.
10
+
11
+ ## Quick Config
12
+
13
+ ```groovy
14
+ // android/app/build.gradle, React Native 0.78 and earlier fallback
15
+ android {
16
+ androidResources {
17
+ noCompress += ["bundle"]
18
+ }
19
+ }
20
+ ```
21
+
22
+ **Note**: React Native 0.79+ defaults to uncompressed Android JS bundles. Prefer checking/toggling `react { enableBundleCompression = false }` there instead of adding `androidResources.noCompress` manually.
23
+
24
+ ## When to Use
25
+
26
+ - Android app using Hermes
27
+ - Want faster TTI (Time to Interactive)
28
+ - Willing to trade install size for startup speed
29
+ - React Native version is 0.78 or earlier, skip otherwise (see applicability)
30
+
31
+ ## Background
32
+
33
+ Android compresses most files in APK/AAB by default, including `index.android.bundle`.
34
+
35
+ **Problem**: Compressed files can't be memory-mapped (mmap).
36
+
37
+ **Impact**: Hermes must decompress before reading, losing one of its key optimizations.
38
+
39
+ ## How Hermes Memory Mapping Works
40
+
41
+ Without compression:
42
+ 1. Hermes opens bytecode file
43
+ 2. OS memory-maps directly to disk
44
+ 3. Only pages actually accessed are loaded
45
+ 4. **Result**: Fast startup, low memory
46
+
47
+ With compression:
48
+ 1. Android decompresses entire bundle
49
+ 2. Loaded into memory
50
+ 3. Then Hermes processes
51
+ 4. **Result**: Slower startup, higher memory
52
+
53
+ ## Step-by-Step Implementation
54
+
55
+ ### Edit build.gradle
56
+
57
+ For React Native 0.78 and earlier, edit `android/app/build.gradle`:
58
+
59
+ ```groovy
60
+ android {
61
+ androidResources {
62
+ noCompress += ["bundle"]
63
+ }
64
+ }
65
+ ```
66
+
67
+ ### Full Context
68
+
69
+ ```groovy
70
+ android {
71
+ namespace "com.myapp"
72
+ defaultConfig {
73
+ applicationId "com.myapp"
74
+ // ...
75
+ }
76
+
77
+ androidResources {
78
+ noCompress += ["bundle"]
79
+ }
80
+
81
+ buildTypes {
82
+ release {
83
+ minifyEnabled true
84
+ // ...
85
+ }
86
+ }
87
+ }
88
+ ```
89
+
90
+ ### Rebuild
91
+
92
+ ```bash
93
+ cd android
94
+ ./gradlew clean
95
+ ./gradlew bundleRelease
96
+ # or
97
+ ./gradlew assembleRelease
98
+ ```
99
+
100
+ ## Trade-offs
101
+
102
+ | Metric | Without Change | With Change |
103
+ |--------|----------------|-------------|
104
+ | Download size | Same | Same |
105
+ | Install size | Smaller | **+8% larger** |
106
+ | TTI | Slower | **-16% faster** |
107
+
108
+ **Real example**: 75.9 MB install → 82 MB install, but 450ms faster startup.
109
+
110
+ ## Applicability
111
+
112
+ **React Native 0.78 and earlier**: Apply this optimization manually.
113
+
114
+ **React Native 0.79+**: Skip this unless the project explicitly enabled bundle compression.
115
+
116
+ ## Verification
117
+
118
+ ### Check APK Contents
119
+
120
+ ```bash
121
+ # Unzip APK
122
+ unzip app-release.apk -d apk-contents
123
+
124
+ # Check if bundle is compressed
125
+ file apk-contents/assets/index.android.bundle
126
+ # Should show: "data" (not "gzip compressed")
127
+ ```
128
+
129
+ ### Measure TTI Impact
130
+
131
+ Use performance markers (see [native-measure-tti.md](./native-measure-tti.md)) to compare before/after.
132
+
133
+ ## Multiple File Types
134
+
135
+ If you have other files that benefit from mmap:
136
+
137
+ ```groovy
138
+ androidResources {
139
+ noCompress += ["bundle", "hbc", "data"]
140
+ }
141
+ ```
142
+
143
+ ## Common Pitfalls
144
+
145
+ - **Not rebuilding**: Change requires clean build
146
+ - **Wrong config location**: Must be in `android` block
147
+ - **Ignoring size increase**: Monitor user feedback on install size
148
+ - **Already default**: Check if React Native version includes this
149
+
150
+ ## Expo Notes
151
+
152
+ For Expo projects, run `npx expo prebuild` first to generate `android/` folder, then apply the `build.gradle` changes. Add `android/` to version control or use a [config plugin](https://docs.expo.dev/config-plugins/introduction/) for persistent changes.
153
+
154
+ ## Should You Enable This?
155
+
156
+ | Scenario | Recommendation |
157
+ |----------|---------------|
158
+ | RN 0.78 or earlier startup-critical app | ✅ Enable |
159
+ | Storage-sensitive users | ⚠️ Test impact |
160
+ | Already fast TTI | Maybe not worth it |
161
+ | RN 0.79+ default config | Skip |
162
+
163
+ ## Related Skills
164
+
165
+ - [native-measure-tti.md](./native-measure-tti.md) - Measure TTI improvement
166
+ - [bundle-analyze-app.md](./bundle-analyze-app.md) - Check size impact
167
+ - [bundle-r8-android.md](./bundle-r8-android.md) - Offset size increase
@@ -0,0 +1,164 @@
1
+ ---
2
+ title: Determine Library Size
3
+ impact: MEDIUM
4
+ tags: dependencies, bundlephobia, library-size
5
+ ---
6
+
7
+ # Skill: Determine Library Size
8
+
9
+ Evaluate third-party library size impact before adding to your project.
10
+
11
+ ## Quick Command
12
+
13
+ ```bash
14
+ # Check size before installing
15
+ # Visit: https://bundlephobia.com/package/[package-name]
16
+
17
+ # Or use CLI
18
+ npx bundle-phobia-cli <package-name>
19
+ ```
20
+
21
+ ## When to Use
22
+
23
+ - Evaluating new dependencies
24
+ - Comparing alternative libraries
25
+ - Auditing existing dependencies
26
+ - Investigating bundle bloat
27
+
28
+ ## Tools Overview
29
+
30
+ | Tool | Type | Best For |
31
+ |------|------|----------|
32
+ | bundlephobia.com | Web | Quick size check |
33
+ | pkg-size.dev | Web | Backup/alternative |
34
+ | Import Cost (VS Code) | IDE extension | Rough JS import feedback |
35
+
36
+ ## bundlephobia.com
37
+
38
+ ### Usage
39
+
40
+ Visit [bundlephobia.com](https://bundlephobia.com) and enter package name.
41
+
42
+ ### Shows
43
+
44
+ - **Minified size**: Raw JS size
45
+ - **Minified + Gzipped**: Network transfer size
46
+ - **Download time**: Estimated on various connections
47
+ - **Dependencies**: What else gets pulled in
48
+ - **Composition**: Breakdown by dependency
49
+
50
+ ### Example Analysis
51
+
52
+ ```
53
+ react-native-paper
54
+ ├── Minified: 312 kB
55
+ ├── Gzipped: 78 kB
56
+ └── Dependencies: 12 packages
57
+ ├── @callstack/react-theme-provider
58
+ ├── color
59
+ └── ...
60
+ ```
61
+
62
+ ## pkg-size.dev
63
+
64
+ Backup when bundlephobia fails.
65
+
66
+ Visit [pkg-size.dev](https://pkg-size.dev) with package name.
67
+
68
+ **Difference**: Actually installs package in web container, may be more accurate for edge cases.
69
+
70
+ ## Import Cost (VS Code Extension)
71
+
72
+ ### Install
73
+
74
+ Search "Import Cost" in VS Code extensions or:
75
+
76
+ ```bash
77
+ code --install-extension wix.vscode-import-cost
78
+ ```
79
+
80
+ ### Usage
81
+
82
+ Shows inline size next to imports:
83
+
84
+ ```tsx
85
+ import React from 'react'; // 6.5K (gzipped)
86
+ import lodash from 'lodash'; // 71.5K (gzipped: 24.7K)
87
+ import get from 'lodash/get'; // 8K (gzipped: 2.9K)
88
+ ```
89
+
90
+ ### Limitations
91
+
92
+ - Uses Webpack internally (not Metro)
93
+ - May fail on React Native-specific packages
94
+ - Doesn't account for tree shaking
95
+
96
+ Bundlephobia, pkg-size.dev, and Import Cost measure JavaScript package cost. They do not capture native code added by React Native libraries such as maps, Reanimated, Firebase, camera, video, or analytics SDKs. For native dependencies, always verify the actual IPA/AAB/APK size after installation.
97
+
98
+ ## Comparison Workflow
99
+
100
+ ### Before Adding Dependency
101
+
102
+ 1. Check on bundlephobia:
103
+ ```
104
+ https://bundlephobia.com/package/[package-name]
105
+ ```
106
+
107
+ 2. Compare alternatives:
108
+ ```
109
+ moment (289 kB) vs date-fns (75 kB) vs dayjs (6 kB)
110
+ ```
111
+
112
+ 3. Check what you actually need:
113
+ - Full library import vs specific functions
114
+ - Native alternative available?
115
+
116
+ ### After Adding
117
+
118
+ 1. Analyze bundle (see [bundle-analyze-js.md](./bundle-analyze-js.md))
119
+ 2. Verify actual impact matches expected
120
+ 3. Check for duplicate dependencies
121
+
122
+ ## Common Large Dependencies
123
+
124
+ | Library | Size (gzipped) | Alternative |
125
+ |---------|----------------|-------------|
126
+ | moment | ~70 KB | dayjs (~3 KB) |
127
+ | lodash (full) | ~25 KB | Built-ins or direct imports |
128
+ | aws-sdk (full) | 200+ KB | @aws-sdk/client-* |
129
+ | crypto-js | ~15 KB | react-native-quick-crypto |
130
+
131
+ ## Quick Size Check Script
132
+
133
+ ```bash
134
+ # Check size before installing
135
+ npx bundle-phobia-cli <package-name>
136
+
137
+ # Or use npm directly (less accurate)
138
+ npm pack <package-name> --dry-run 2>&1 | grep "total files"
139
+ ```
140
+
141
+ ## Decision Rule
142
+
143
+ Prefer the smallest option that satisfies correctness and platform requirements, then verify the real app artifact. JS package size alone is not enough for React Native dependencies with native code.
144
+
145
+ ## Code Example: Optimizing Imports
146
+
147
+ ```tsx
148
+ // BAD: Full library
149
+ import _ from 'lodash';
150
+ _.get(obj, 'path.to.value');
151
+
152
+ // BETTER: Specific import
153
+ import get from 'lodash/get';
154
+ get(obj, 'path.to.value');
155
+
156
+ // BEST: Native JS
157
+ obj?.path?.to?.value;
158
+ ```
159
+
160
+ ## Related Skills
161
+
162
+ - [bundle-analyze-js.md](./bundle-analyze-js.md) - Verify actual bundle impact
163
+ - [bundle-barrel-exports.md](./bundle-barrel-exports.md) - Optimize how you import
164
+ - [native-sdks-over-polyfills.md](./native-sdks-over-polyfills.md) - Native alternatives to JS libs