create-disposabl-app 0.0.4 → 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 (399) hide show
  1. package/dist/index.js +490 -105
  2. package/dist/templates/default/LICENSE +21 -0
  3. package/dist/templates/default/apps/blog/package.json +1 -0
  4. package/dist/templates/default/apps/changelog/package.json +1 -0
  5. package/dist/templates/default/apps/desktop/.oxfmtrc.json +5 -0
  6. package/dist/templates/default/apps/desktop/.oxlintrc.json +6 -0
  7. package/dist/templates/default/apps/desktop/README.md +58 -0
  8. package/dist/templates/default/apps/desktop/forge.config.mts +90 -0
  9. package/dist/templates/default/apps/desktop/index.html +12 -0
  10. package/dist/templates/default/apps/desktop/package.json +55 -0
  11. package/dist/templates/default/apps/desktop/src/declarations.d.ts +2 -0
  12. package/dist/templates/default/apps/desktop/src/index.css +8 -0
  13. package/dist/templates/default/apps/desktop/src/main.ts +58 -0
  14. package/dist/templates/default/apps/desktop/src/preload.ts +3 -0
  15. package/dist/templates/default/apps/desktop/src/renderer.ts +19 -0
  16. package/dist/templates/default/apps/desktop/tsconfig.json +14 -0
  17. package/dist/templates/default/apps/desktop/vite.main.config.mts +4 -0
  18. package/dist/templates/default/apps/desktop/vite.preload.config.mts +4 -0
  19. package/dist/templates/default/apps/desktop/vite.renderer.config.mts +4 -0
  20. package/dist/templates/default/apps/docs/package.json +1 -0
  21. package/dist/templates/default/apps/mobile/.agents/skills/agent-device/SKILL.md +22 -0
  22. package/dist/templates/default/apps/mobile/.agents/skills/android-emulator/SKILL.md +32 -0
  23. package/dist/templates/default/apps/mobile/.agents/skills/dogfood/SKILL.md +27 -0
  24. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/SKILL.md +176 -0
  25. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/agents/openai.yaml +4 -0
  26. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/app-store-metadata.md +497 -0
  27. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/ios-app-store.md +376 -0
  28. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/native-ios.md +167 -0
  29. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/play-store.md +244 -0
  30. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/testflight.md +62 -0
  31. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/workflows.md +120 -0
  32. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/SKILL.md +431 -0
  33. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/agents/openai.yaml +4 -0
  34. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/SKILL.md +46 -0
  35. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/agents/openai.yaml +4 -0
  36. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/metrics.md +98 -0
  37. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/queries.md +444 -0
  38. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/setup.md +529 -0
  39. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/third-party.md +136 -0
  40. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/SKILL.md +237 -0
  41. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/agents/openai.yaml +4 -0
  42. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/controllers.md +139 -0
  43. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/logs-and-crashes.md +101 -0
  44. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/run-your-app.md +256 -0
  45. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/troubleshooting.md +56 -0
  46. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/SKILL.md +146 -0
  47. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/agents/openai.yaml +4 -0
  48. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/SKILL.md +238 -0
  49. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/agents/openai.yaml +4 -0
  50. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  51. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  52. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/SKILL.md +99 -0
  53. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/agents/openai.yaml +4 -0
  54. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/fetch.js +109 -0
  55. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/package.json +6 -0
  56. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/LICENSE +21 -0
  57. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/RECIPES.md +385 -0
  58. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/SKILL.md +274 -0
  59. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/agents/openai.yaml +4 -0
  60. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/SKILL.md +290 -0
  61. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/agents/openai.yaml +4 -0
  62. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/references/native-module.md +96 -0
  63. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/SKILL.md +69 -0
  64. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/agents/openai.yaml +4 -0
  65. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-integrated.md +551 -0
  66. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-isolated.md +449 -0
  67. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/comparison.md +63 -0
  68. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/feature-integration.md +163 -0
  69. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/troubleshooting.md +88 -0
  70. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/version-compatibility.md +40 -0
  71. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/SKILL.md +478 -0
  72. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/agents/openai.yaml +4 -0
  73. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
  74. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
  75. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/SKILL.md +376 -0
  76. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/agents/openai.yaml +4 -0
  77. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/audit.md +190 -0
  78. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/native-slop.md +74 -0
  79. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/SKILL.md +184 -0
  80. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/agents/openai.yaml +4 -0
  81. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/SKILL.md +425 -0
  82. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/agents/openai.yaml +4 -0
  83. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/SKILL.md +106 -0
  84. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/agents/openai.yaml +4 -0
  85. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/references/catalog.md +105 -0
  86. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/SKILL.md +124 -0
  87. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/agents/openai.yaml +4 -0
  88. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/compatibility.md +130 -0
  89. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/example.md +212 -0
  90. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/migration-map.md +457 -0
  91. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/SKILL.md +151 -0
  92. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/agents/openai.yaml +4 -0
  93. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/config-plugin.md +90 -0
  94. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/create-expo-module.md +206 -0
  95. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/lifecycle.md +127 -0
  96. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/module-config.md +48 -0
  97. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-module.md +286 -0
  98. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-view.md +171 -0
  99. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/SKILL.md +201 -0
  100. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/agents/openai.yaml +4 -0
  101. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/controls.md +231 -0
  102. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/gradients.md +106 -0
  103. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/icons.md +232 -0
  104. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/media.md +193 -0
  105. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/storage.md +121 -0
  106. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/visual-effects.md +198 -0
  107. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/webgpu-three.md +605 -0
  108. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/SKILL.md +120 -0
  109. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/agents/openai.yaml +4 -0
  110. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/references/launch-without-dev-menu.md +24 -0
  111. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/SKILL.md +114 -0
  112. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/agents/openai.yaml +4 -0
  113. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/SKILL.md +240 -0
  114. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/agents/openai.yaml +4 -0
  115. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/form-sheet.md +253 -0
  116. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/route-structure.md +229 -0
  117. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/search.md +248 -0
  118. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/tabs.md +433 -0
  119. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/toolbar-and-headers.md +284 -0
  120. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/zoom-transitions.md +158 -0
  121. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/SKILL.md +314 -0
  122. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/agents/visual-grader.md +52 -0
  123. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/design-rubric.md +45 -0
  124. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/runtime-matrix.md +34 -0
  125. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/check-static.sh +64 -0
  126. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
  127. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
  128. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
  129. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
  130. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
  131. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
  132. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
  133. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
  134. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/SKILL.md +101 -0
  135. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/agents/openai.yaml +4 -0
  136. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/drop-in-replacements.md +27 -0
  137. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/jetpack-compose.md +73 -0
  138. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/swift-ui.md +73 -0
  139. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/universal.md +104 -0
  140. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/scripts/list-components.js +193 -0
  141. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/SKILL.md +150 -0
  142. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/agents/openai.yaml +4 -0
  143. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
  144. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-video.md +160 -0
  145. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/native-tabs.md +124 -0
  146. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/new-architecture.md +79 -0
  147. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-19.md +79 -0
  148. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-compiler.md +59 -0
  149. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
  150. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/SKILL.md +91 -0
  151. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/agents/openai.yaml +4 -0
  152. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/false-friends.md +119 -0
  153. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/native-patterns.md +39 -0
  154. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/run-as-goal.md +48 -0
  155. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/verify-on-device.md +45 -0
  156. package/dist/templates/default/apps/mobile/.agents/skills/ios-simulator/SKILL.md +32 -0
  157. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/POWER.md +172 -0
  158. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/SKILL.md +238 -0
  159. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/agents/openai.yaml +4 -0
  160. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-app.md +208 -0
  161. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-js.md +264 -0
  162. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-barrel-exports.md +250 -0
  163. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-code-splitting.md +255 -0
  164. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-hermes-mmap.md +167 -0
  165. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-library-size.md +164 -0
  166. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-native-assets.md +208 -0
  167. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-r8-android.md +231 -0
  168. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-tree-shaking.md +215 -0
  169. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/bundle-treemap-source-map-explorer.png +0 -0
  170. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/controlled-textinput-pingpong.png +0 -0
  171. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/devtools-flamegraph.png +0 -0
  172. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/emerge-xray-ios.png +0 -0
  173. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/expo-atlas-treemap.png +0 -0
  174. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/flashlight-flatlist-vs-flashlist.png +0 -0
  175. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/fps-drop-graph.png +0 -0
  176. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/memory-heap-snapshot.png +0 -0
  177. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/tti-warm-start-diagram.png +0 -0
  178. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/view-hierarchy-flattening.png +0 -0
  179. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-instruments-templates.png +0 -0
  180. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-thread-view.png +0 -0
  181. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-animations-reanimated.md +273 -0
  182. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-atomic-state.md +190 -0
  183. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-bottomsheet.md +339 -0
  184. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-concurrent-react.md +238 -0
  185. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-lists-flatlist-flashlist.md +223 -0
  186. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-measure-fps.md +178 -0
  187. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-memory-leaks.md +168 -0
  188. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-profile-react.md +138 -0
  189. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-react-compiler.md +261 -0
  190. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-uncontrolled-components.md +219 -0
  191. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-android-16kb-alignment.md +114 -0
  192. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-measure-tti.md +221 -0
  193. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-leaks.md +206 -0
  194. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-patterns.md +240 -0
  195. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-platform-setup.md +112 -0
  196. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-profiling.md +140 -0
  197. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-sdks-over-polyfills.md +192 -0
  198. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-threading-model.md +230 -0
  199. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-turbo-modules.md +210 -0
  200. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-view-flattening.md +180 -0
  201. package/dist/templates/default/apps/mobile/AGENTS.md +41 -0
  202. package/dist/templates/default/apps/mobile/app.json +38 -0
  203. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
  204. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/grid.png +0 -0
  205. package/dist/templates/default/apps/mobile/assets/expo.icon/icon.json +40 -0
  206. package/dist/templates/default/apps/mobile/assets/images/android-icon-background.png +0 -0
  207. package/dist/templates/default/apps/mobile/assets/images/android-icon-foreground.png +0 -0
  208. package/dist/templates/default/apps/mobile/assets/images/android-icon-monochrome.png +0 -0
  209. package/dist/templates/default/apps/mobile/assets/images/icon.png +0 -0
  210. package/dist/templates/default/apps/mobile/assets/images/splash-icon.png +0 -0
  211. package/dist/templates/default/apps/mobile/eslint.config.js +10 -0
  212. package/dist/templates/default/apps/mobile/package.json +43 -0
  213. package/dist/templates/default/apps/mobile/skills-lock.json +185 -0
  214. package/dist/templates/default/apps/mobile/src/app/_layout.tsx +5 -0
  215. package/dist/templates/default/apps/mobile/src/app/index.tsx +17 -0
  216. package/dist/templates/default/apps/mobile/tsconfig.json +20 -0
  217. package/dist/templates/default/apps/web/.agents/skills/frontend-design/SKILL.md +71 -0
  218. package/dist/templates/default/apps/web/.agents/skills/web-design-guidelines/SKILL.md +39 -0
  219. package/dist/templates/default/apps/web/.env.example +3 -0
  220. package/dist/templates/default/apps/web/components.json +23 -0
  221. package/dist/templates/default/apps/web/eslint.config.ts +21 -0
  222. package/dist/templates/default/apps/web/package.json +39 -0
  223. package/dist/templates/default/apps/web/public/disposabl-logo.svg +8 -0
  224. package/dist/templates/default/apps/web/public/favicon.ico +0 -0
  225. package/dist/templates/default/apps/web/public/manifest.json +25 -0
  226. package/dist/templates/default/apps/web/skills-lock.json +17 -0
  227. package/dist/templates/default/apps/web/src/index.css +92 -0
  228. package/dist/templates/default/apps/web/src/routeTree.gen.ts +282 -0
  229. package/dist/templates/default/apps/web/src/router/__root.tsx +63 -0
  230. package/dist/templates/default/apps/web/src/router/_authenticated/dashboard.tsx +9 -0
  231. package/dist/templates/default/apps/web/src/router/_authenticated/todos/$id.tsx +27 -0
  232. package/dist/templates/default/apps/web/src/router/_authenticated/todos/index.tsx +33 -0
  233. package/dist/templates/default/apps/web/src/router/index.tsx +15 -0
  234. package/dist/templates/default/apps/web/src/router.tsx +20 -0
  235. package/dist/templates/default/apps/web/tsconfig.json +33 -0
  236. package/dist/templates/default/apps/web/tsr.config.json +6 -0
  237. package/dist/templates/default/apps/web/vite.config.ts +67 -0
  238. package/dist/templates/default/bun.lock +3932 -0
  239. package/dist/templates/default/bunfig.toml +5 -0
  240. package/dist/templates/default/disposabl.json +5 -0
  241. package/dist/templates/default/gitignore +10 -0
  242. package/dist/templates/default/package.json +31 -10
  243. package/dist/templates/default/packages/backend/.agents/skills/convex/SKILL.md +69 -0
  244. package/dist/templates/default/packages/backend/.agents/skills/convex-add/SKILL.md +26 -0
  245. package/dist/templates/default/packages/backend/.agents/skills/convex-advisor/SKILL.md +32 -0
  246. package/dist/templates/default/packages/backend/.agents/skills/convex-agent/SKILL.md +25 -0
  247. package/dist/templates/default/packages/backend/.agents/skills/convex-auth/SKILL.md +29 -0
  248. package/dist/templates/default/packages/backend/.agents/skills/convex-authz/SKILL.md +36 -0
  249. package/dist/templates/default/packages/backend/.agents/skills/convex-backup/SKILL.md +33 -0
  250. package/dist/templates/default/packages/backend/.agents/skills/convex-billing/SKILL.md +69 -0
  251. package/dist/templates/default/packages/backend/.agents/skills/convex-cost/SKILL.md +29 -0
  252. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/SKILL.md +325 -0
  253. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/agents/openai.yaml +14 -0
  254. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/assets/icon.svg +3 -0
  255. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/advanced-patterns.md +146 -0
  256. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/hybrid-components.md +38 -0
  257. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/local-components.md +39 -0
  258. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/packaged-components.md +54 -0
  259. package/dist/templates/default/packages/backend/.agents/skills/convex-crons/SKILL.md +23 -0
  260. package/dist/templates/default/packages/backend/.agents/skills/convex-deploy-guard/SKILL.md +29 -0
  261. package/dist/templates/default/packages/backend/.agents/skills/convex-design/SKILL.md +30 -0
  262. package/dist/templates/default/packages/backend/.agents/skills/convex-docs/SKILL.md +31 -0
  263. package/dist/templates/default/packages/backend/.agents/skills/convex-domains/SKILL.md +26 -0
  264. package/dist/templates/default/packages/backend/.agents/skills/convex-env/SKILL.md +24 -0
  265. package/dist/templates/default/packages/backend/.agents/skills/convex-expert/SKILL.md +38 -0
  266. package/dist/templates/default/packages/backend/.agents/skills/convex-explain-app/SKILL.md +29 -0
  267. package/dist/templates/default/packages/backend/.agents/skills/convex-improve-convex-plugin/SKILL.md +24 -0
  268. package/dist/templates/default/packages/backend/.agents/skills/convex-insights/SKILL.md +32 -0
  269. package/dist/templates/default/packages/backend/.agents/skills/convex-launch-readiness/SKILL.md +35 -0
  270. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate/SKILL.md +23 -0
  271. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate-rehearse/SKILL.md +31 -0
  272. package/dist/templates/default/packages/backend/.agents/skills/convex-monitor/SKILL.md +22 -0
  273. package/dist/templates/default/packages/backend/.agents/skills/convex-optimize/SKILL.md +26 -0
  274. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/SKILL.md +29 -0
  275. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/agents/openai.yaml +14 -0
  276. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/assets/icon.svg +4 -0
  277. package/dist/templates/default/packages/backend/.agents/skills/convex-reviewer/SKILL.md +26 -0
  278. package/dist/templates/default/packages/backend/.agents/skills/convex-seed/SKILL.md +23 -0
  279. package/dist/templates/default/packages/backend/.agents/skills/convex-self-heal/SKILL.md +38 -0
  280. package/dist/templates/default/packages/backend/.agents/skills/convex-sentinel/SKILL.md +25 -0
  281. package/dist/templates/default/packages/backend/.agents/skills/convex-suggest/SKILL.md +27 -0
  282. package/dist/templates/default/packages/backend/.agents/skills/convex-test/SKILL.md +23 -0
  283. package/dist/templates/default/packages/backend/.agents/skills/convex-verify/SKILL.md +34 -0
  284. package/dist/templates/default/packages/backend/.prettierignore +4 -0
  285. package/dist/templates/default/packages/backend/AGENTS.md +18 -0
  286. package/dist/templates/default/packages/backend/CLAUDE.md +13 -0
  287. package/dist/templates/default/packages/backend/README.md +25 -0
  288. package/dist/templates/default/packages/backend/convex/_generated/ai/ai-files.state.json +6 -0
  289. package/dist/templates/default/packages/backend/convex/_generated/ai/guidelines.md +286 -0
  290. package/dist/templates/default/packages/backend/convex/_generated/api.d.ts +66 -0
  291. package/dist/templates/default/packages/backend/convex/_generated/api.js +23 -0
  292. package/dist/templates/default/packages/backend/convex/_generated/dataModel.d.ts +60 -0
  293. package/dist/templates/default/packages/backend/convex/_generated/server.d.ts +164 -0
  294. package/dist/templates/default/packages/backend/convex/_generated/server.js +101 -0
  295. package/dist/templates/default/packages/backend/convex/auth.config.ts +14 -0
  296. package/dist/templates/default/packages/backend/convex/auth.ts +15 -0
  297. package/dist/templates/default/packages/backend/convex/convex.config.ts +30 -0
  298. package/dist/templates/default/packages/backend/convex/http.ts +5 -0
  299. package/dist/templates/default/packages/backend/convex/mcp.ts +8 -0
  300. package/dist/templates/default/packages/backend/convex/schema.ts +10 -0
  301. package/dist/templates/default/packages/backend/convex/todos/index.ts +26 -0
  302. package/dist/templates/default/packages/backend/convex/todos/internal.ts +43 -0
  303. package/dist/templates/default/packages/backend/convex/tsconfig.json +27 -0
  304. package/dist/templates/default/packages/backend/convex/users.ts +20 -0
  305. package/dist/templates/default/packages/backend/eslint.config.mjs +62 -0
  306. package/dist/templates/default/packages/backend/package.json +36 -0
  307. package/dist/templates/default/packages/backend/skills-lock.json +203 -0
  308. package/dist/templates/default/packages/disposabl-kit/client/components/ui/accordion.tsx +77 -0
  309. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert-dialog.tsx +185 -0
  310. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert.tsx +75 -0
  311. package/dist/templates/default/packages/disposabl-kit/client/components/ui/aspect-ratio.tsx +22 -0
  312. package/dist/templates/default/packages/disposabl-kit/client/components/ui/attachment.tsx +207 -0
  313. package/dist/templates/default/packages/disposabl-kit/client/components/ui/avatar.tsx +106 -0
  314. package/dist/templates/default/packages/disposabl-kit/client/components/ui/badge.tsx +51 -0
  315. package/dist/templates/default/packages/disposabl-kit/client/components/ui/breadcrumb.tsx +121 -0
  316. package/dist/templates/default/packages/disposabl-kit/client/components/ui/bubble.tsx +127 -0
  317. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button-group.tsx +87 -0
  318. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button.tsx +57 -0
  319. package/dist/templates/default/packages/disposabl-kit/client/components/ui/calendar.tsx +241 -0
  320. package/dist/templates/default/packages/disposabl-kit/client/components/ui/card.tsx +102 -0
  321. package/dist/templates/default/packages/disposabl-kit/client/components/ui/carousel.tsx +239 -0
  322. package/dist/templates/default/packages/disposabl-kit/client/components/ui/chart.tsx +368 -0
  323. package/dist/templates/default/packages/disposabl-kit/client/components/ui/checkbox.tsx +27 -0
  324. package/dist/templates/default/packages/disposabl-kit/client/components/ui/code-block.tsx +243 -0
  325. package/dist/templates/default/packages/disposabl-kit/client/components/ui/collapsible.tsx +19 -0
  326. package/dist/templates/default/packages/disposabl-kit/client/components/ui/combobox.tsx +300 -0
  327. package/dist/templates/default/packages/disposabl-kit/client/components/ui/command.tsx +194 -0
  328. package/dist/templates/default/packages/disposabl-kit/client/components/ui/context-menu.tsx +271 -0
  329. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dialog.tsx +156 -0
  330. package/dist/templates/default/packages/disposabl-kit/client/components/ui/direction.tsx +4 -0
  331. package/dist/templates/default/packages/disposabl-kit/client/components/ui/drawer.tsx +224 -0
  332. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dropdown-menu.tsx +269 -0
  333. package/dist/templates/default/packages/disposabl-kit/client/components/ui/empty.tsx +103 -0
  334. package/dist/templates/default/packages/disposabl-kit/client/components/ui/field.tsx +236 -0
  335. package/dist/templates/default/packages/disposabl-kit/client/components/ui/hover-card.tsx +50 -0
  336. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-group.tsx +158 -0
  337. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-otp.tsx +83 -0
  338. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input.tsx +19 -0
  339. package/dist/templates/default/packages/disposabl-kit/client/components/ui/item.tsx +201 -0
  340. package/dist/templates/default/packages/disposabl-kit/client/components/ui/kbd.tsx +26 -0
  341. package/dist/templates/default/packages/disposabl-kit/client/components/ui/label.tsx +19 -0
  342. package/dist/templates/default/packages/disposabl-kit/client/components/ui/marker.tsx +70 -0
  343. package/dist/templates/default/packages/disposabl-kit/client/components/ui/menubar.tsx +284 -0
  344. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message-scroller.tsx +128 -0
  345. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message.tsx +91 -0
  346. package/dist/templates/default/packages/disposabl-kit/client/components/ui/native-select.tsx +64 -0
  347. package/dist/templates/default/packages/disposabl-kit/client/components/ui/navigation-menu.tsx +170 -0
  348. package/dist/templates/default/packages/disposabl-kit/client/components/ui/pagination.tsx +133 -0
  349. package/dist/templates/default/packages/disposabl-kit/client/components/ui/popover.tsx +87 -0
  350. package/dist/templates/default/packages/disposabl-kit/client/components/ui/progress.tsx +82 -0
  351. package/dist/templates/default/packages/disposabl-kit/client/components/ui/questionnaire.tsx +330 -0
  352. package/dist/templates/default/packages/disposabl-kit/client/components/ui/radio-group.tsx +35 -0
  353. package/dist/templates/default/packages/disposabl-kit/client/components/ui/resizable.tsx +49 -0
  354. package/dist/templates/default/packages/disposabl-kit/client/components/ui/scroll-area.tsx +51 -0
  355. package/dist/templates/default/packages/disposabl-kit/client/components/ui/select.tsx +201 -0
  356. package/dist/templates/default/packages/disposabl-kit/client/components/ui/separator.tsx +22 -0
  357. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sheet.tsx +132 -0
  358. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sidebar.tsx +723 -0
  359. package/dist/templates/default/packages/disposabl-kit/client/components/ui/skeleton.tsx +13 -0
  360. package/dist/templates/default/packages/disposabl-kit/client/components/ui/slider.tsx +51 -0
  361. package/dist/templates/default/packages/disposabl-kit/client/components/ui/spinner.tsx +16 -0
  362. package/dist/templates/default/packages/disposabl-kit/client/components/ui/switch.tsx +31 -0
  363. package/dist/templates/default/packages/disposabl-kit/client/components/ui/table.tsx +113 -0
  364. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tabs.tsx +81 -0
  365. package/dist/templates/default/packages/disposabl-kit/client/components/ui/textarea.tsx +17 -0
  366. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toast.tsx +229 -0
  367. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle-group.tsx +87 -0
  368. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle.tsx +42 -0
  369. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tooltip.tsx +65 -0
  370. package/dist/templates/default/packages/disposabl-kit/client/components/ui/trace.tsx +161 -0
  371. package/dist/templates/default/packages/disposabl-kit/client/hooks/use-mobile.ts +21 -0
  372. package/dist/templates/default/packages/disposabl-kit/client/lib/prerender.ts +89 -0
  373. package/dist/templates/default/packages/disposabl-kit/client/lib/return-to.ts +12 -0
  374. package/dist/templates/default/packages/disposabl-kit/client/lib/utils.ts +1 -0
  375. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/login.tsx +114 -0
  376. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/signUp.tsx +120 -0
  377. package/dist/templates/default/packages/disposabl-kit/client/routes/_authenticated/route.tsx +38 -0
  378. package/dist/templates/default/packages/disposabl-kit/client/routes/consent.tsx +137 -0
  379. package/dist/templates/default/packages/disposabl-kit/client/routes/route.tsx +30 -0
  380. package/dist/templates/default/packages/disposabl-kit/client/styles/globals.css +60 -0
  381. package/dist/templates/default/packages/disposabl-kit/client/vite.config.ts +32 -0
  382. package/dist/templates/default/packages/disposabl-kit/components.json +23 -0
  383. package/dist/templates/default/packages/disposabl-kit/eslint.config.js +21 -0
  384. package/dist/templates/default/packages/disposabl-kit/package.json +60 -0
  385. package/dist/templates/default/packages/disposabl-kit/server/http.ts +86 -0
  386. package/dist/templates/default/packages/disposabl-kit/server/lib/functions.ts +40 -0
  387. package/dist/templates/default/packages/disposabl-kit/server/lib/platforms.ts +20 -0
  388. package/dist/templates/default/packages/disposabl-kit/server/lib/static-routes.ts +56 -0
  389. package/dist/templates/default/packages/disposabl-kit/tsconfig.json +17 -0
  390. package/dist/templates/default/patches/@convex-dev%2Fauth@2.0.0-beta.0.patch +310 -0
  391. package/dist/templates/default/patches/@convex-dev%2Fstatic-hosting@0.2.1.patch +187 -0
  392. package/dist/templates/default/tsconfig.json +9 -0
  393. package/dist/templates/default/turbo.json +51 -0
  394. package/package.json +21 -5
  395. package/README.md +0 -34
  396. package/dist/templates/default/README.md +0 -12
  397. package/dist/templates/default/docs/index.html +0 -8
  398. package/dist/templates/default/eslint.config.js +0 -18
  399. package/dist/templates/default/index.ts +0 -14
@@ -0,0 +1,208 @@
1
+ ---
2
+ title: Native Assets
3
+ impact: HIGH
4
+ tags: assets, images, asset-catalog, app-thinning
5
+ ---
6
+
7
+ # Skill: Native Assets
8
+
9
+ Configure platform-specific asset delivery to reduce app download size.
10
+
11
+ ## Quick Config
12
+
13
+ **iOS Asset Catalog (Build Phase):**
14
+
15
+ ```bash
16
+ # Default RN template: the Xcode bundle script cd's to PROJECT_ROOT first.
17
+ export EXTRA_PACKAGER_ARGS="--asset-catalog-dest ios"
18
+ ```
19
+
20
+ **Android**: Automatic via AAB — Play Store delivers correct density per device.
21
+
22
+ ## When to Use
23
+
24
+ - Images bloating app size
25
+ - Different device densities need different assets
26
+ - Want to leverage App Store/Play Store optimization
27
+ - Using high-resolution images
28
+
29
+ ## Concept: Size Suffixes
30
+
31
+ React Native convention for multiple resolutions:
32
+
33
+ ```
34
+ assets/
35
+ ├── image.jpg # 1x resolution (base)
36
+ ├── image@2x.jpg # 2x resolution
37
+ └── image@3x.jpg # 3x resolution
38
+ ```
39
+
40
+ ```tsx
41
+ // React Native selects best one for device
42
+ <Image source={require('./assets/image.jpg')} />
43
+ ```
44
+
45
+ ## Android: Automatic Optimization
46
+
47
+ Android handles this automatically.
48
+
49
+ ### How It Works
50
+
51
+ 1. Build AAB:
52
+ ```bash
53
+ cd android && ./gradlew bundleRelease
54
+ ```
55
+
56
+ 2. Metro places images in density folders:
57
+ ```
58
+ android/app/build/outputs/bundle/release/
59
+ └── base/
60
+ └── res/
61
+ ├── drawable-mdpi-v4/ # 1x
62
+ ├── drawable-hdpi-v4/ # 1.5x
63
+ ├── drawable-xhdpi-v4/ # 2x
64
+ ├── drawable-xxhdpi-v4/ # 3x
65
+ └── drawable-xxxhdpi-v4/ # 4x
66
+ ```
67
+
68
+ 3. Play Store delivers only needed density per device.
69
+
70
+ **No configuration required** for Android.
71
+
72
+ ## iOS: Asset Catalog Setup
73
+
74
+ iOS requires explicit configuration.
75
+
76
+ ### Step 1: Create Asset Catalog
77
+
78
+ Create an asset catalog in the same directory you pass to `--asset-catalog-dest`:
79
+
80
+ ```
81
+ ios/RNAssets.xcassets/
82
+ ```
83
+
84
+ React Native's bundler writes image sets into `RNAssets.xcassets` under the destination directory. Keep the manual command and Xcode build phase destination consistent.
85
+
86
+ ### Step 2: Configure Build Phase
87
+
88
+ In Xcode, add this before the React Native bundle command in the **Bundle React Native code and images** build phase:
89
+
90
+ ```bash
91
+ export EXTRA_PACKAGER_ARGS="--asset-catalog-dest ios"
92
+ ```
93
+
94
+ This assumes the default React Native build script, which changes directory to `PROJECT_ROOT` before invoking Metro. If a custom build phase runs from a different working directory, set `--asset-catalog-dest` relative to that working directory and verify the generated `RNAssets.xcassets` path.
95
+
96
+ ### Step 3: Build
97
+
98
+ Run build to populate asset catalog:
99
+
100
+ ```bash
101
+ npx react-native run-ios --mode Release
102
+ ```
103
+
104
+ Or manually:
105
+
106
+ ```bash
107
+ npx react-native bundle \
108
+ --entry-file index.js \
109
+ --bundle-output ios-bundle.js \
110
+ --platform ios \
111
+ --dev false \
112
+ --asset-catalog-dest ios \
113
+ --assets-dest ios/assets
114
+ ```
115
+
116
+ ### Step 4: Verify
117
+
118
+ After build, `RNAssets.xcassets` contains:
119
+
120
+ ```
121
+ ios/RNAssets.xcassets/
122
+ └── assets_image_image.imageset/
123
+ ├── Contents.json
124
+ ├── image.jpg
125
+ ├── image@2x.jpg
126
+ └── image@3x.jpg
127
+ ```
128
+
129
+ App Store then delivers only needed resolution.
130
+
131
+ ## Before/After Comparison
132
+
133
+ ### Without Asset Catalog (All Variants)
134
+
135
+ ```
136
+ App bundle contains:
137
+ ├── image.jpg (100 KB)
138
+ ├── image@2x.jpg (300 KB)
139
+ └── image@3x.jpg (600 KB)
140
+ Total: 1 MB
141
+ ```
142
+
143
+ ### With Asset Catalog (Device-Specific)
144
+
145
+ ```
146
+ iPhone 15 Pro receives:
147
+ └── image@3x.jpg (600 KB)
148
+ Total: 600 KB (40% smaller)
149
+ ```
150
+
151
+ ## Asset Optimization Tips
152
+
153
+ ### 1. Compress Images
154
+
155
+ Use tools before adding to project:
156
+
157
+ ```bash
158
+ # ImageOptim (macOS)
159
+ # TinyPNG (web)
160
+ # sharp (programmatic)
161
+
162
+ npx sharp-cli input.jpg -o output.jpg --quality 80
163
+ ```
164
+
165
+ ### 2. Use Appropriate Formats
166
+
167
+ | Format | Best For |
168
+ |--------|----------|
169
+ | JPEG | Photos |
170
+ | PNG | Icons, transparency |
171
+ | WebP | Both (smaller) |
172
+ | SVG | Vector icons |
173
+
174
+ ### 3. Separate Bundled Assets from Remote Images
175
+
176
+ Remote image caching libraries can help runtime image performance, but they do not reduce the size of images already bundled into the app.
177
+
178
+ ## Verification
179
+
180
+ ### iOS App Thinning Report
181
+
182
+ After export, check `App Thinning Size Report.txt`:
183
+
184
+ ```
185
+ Variant: MyApp-<UUID>.ipa
186
+ Supported variant descriptors: iPhone15,2 ...
187
+ App size: 3.5 MB compressed, 10.6 MB uncompressed
188
+ ```
189
+
190
+ ### Use Emerge Tools
191
+
192
+ Upload IPA to see asset breakdown.
193
+
194
+ ## Common Pitfalls
195
+
196
+ - **Inconsistent destination paths**: The build phase and manual bundle command should point at the same asset catalog parent directory
197
+ - **Missing build phase config**: Assets not processed
198
+ - **Not using size suffixes**: All variants included anyway
199
+ - **Forgetting to rebuild**: Changes need fresh build
200
+
201
+ ## Future Note
202
+
203
+ As of the March 2026 book export, iOS asset catalog generation is not described as default. Verify current React Native release notes before applying this manually.
204
+
205
+ ## Related Skills
206
+
207
+ - [bundle-analyze-app.md](./bundle-analyze-app.md) - Verify asset impact
208
+ - [bundle-r8-android.md](./bundle-r8-android.md) - Android code optimization
@@ -0,0 +1,231 @@
1
+ ---
2
+ title: R8 Code Shrinking
3
+ impact: HIGH
4
+ tags: android, r8, proguard, minify, shrink
5
+ ---
6
+
7
+ # Skill: R8 Code Shrinking
8
+
9
+ Enable R8 for Android to shrink, optimize, and obfuscate native code.
10
+
11
+ ## Quick Config
12
+
13
+ ```groovy
14
+ // android/app/build.gradle
15
+ def enableProguardInReleaseBuilds = true
16
+
17
+ android {
18
+ buildTypes {
19
+ release {
20
+ minifyEnabled true
21
+ shrinkResources true
22
+ }
23
+ }
24
+ }
25
+ ```
26
+
27
+ ## When to Use
28
+
29
+ - Android app size too large
30
+ - Want basic obfuscation to raise reverse-engineering effort, not as a security boundary
31
+ - Building release APK/AAB
32
+
33
+ ## What is R8?
34
+
35
+ R8 replaces ProGuard in Android:
36
+ - **Shrinks**: Removes unused code
37
+ - **Optimizes**: Improves bytecode
38
+ - **Obfuscates**: Renames classes/methods
39
+
40
+ **Compatibility**: Uses ProGuard configuration format.
41
+
42
+ ## Step-by-Step Instructions
43
+
44
+ ### 1. Enable R8
45
+
46
+ Edit `android/app/build.gradle`:
47
+
48
+ ```groovy
49
+ def enableProguardInReleaseBuilds = true
50
+ ```
51
+
52
+ This sets `minifyEnabled = true` for release builds.
53
+
54
+ ### 2. Enable Resource Shrinking (Optional)
55
+
56
+ Further reduces size by removing unused resources:
57
+
58
+ ```groovy
59
+ android {
60
+ buildTypes {
61
+ release {
62
+ minifyEnabled true
63
+ shrinkResources true // Requires minifyEnabled
64
+
65
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ For Expo projects, wire release minification through `android.enableMinifyInReleaseBuilds` and resource shrinking through `android.enableShrinkResourcesInReleaseBuilds`. In managed/prebuild projects, set these through `expo-build-properties` so they survive `expo prebuild`.
72
+
73
+ ### 3. Configure ProGuard Rules (If Needed)
74
+
75
+ Edit `android/app/proguard-rules.pro`. React Native defaults are usually sufficient—only add rules when specific libraries break after enabling R8.
76
+
77
+ **Only add if using Firebase (`@react-native-firebase/*`):**
78
+
79
+ ```proguard
80
+ -keep class io.invertase.firebase.** { *; }
81
+ -dontwarn io.invertase.firebase.**
82
+ ```
83
+
84
+ **Only add if using Retrofit:**
85
+
86
+ ```proguard
87
+ -keepattributes Signature
88
+ -keepattributes *Annotation*
89
+ -keep class retrofit2.** { *; }
90
+ -dontwarn retrofit2.**
91
+ ```
92
+
93
+ See [Common Library Rules](#common-library-rules) and [Troubleshooting](#troubleshooting) for more examples.
94
+
95
+ ### 4. Build and Test
96
+
97
+ ```bash
98
+ cd android
99
+ ./gradlew assembleRelease
100
+ # or
101
+ ./gradlew bundleRelease
102
+ ```
103
+
104
+ **Critical**: Test thoroughly! R8 can remove code it thinks is unused.
105
+
106
+ ## ProGuard Rules Reference
107
+
108
+ | Rule | Effect |
109
+ |------|--------|
110
+ | `-keep class X` | Don't remove class X |
111
+ | `-keepclassmembers` | Keep members but allow rename |
112
+ | `-keepnames` | Keep names but allow removal if unused |
113
+ | `-dontwarn X` | Suppress warnings for X |
114
+ | `-dontobfuscate` | Disable obfuscation |
115
+
116
+ ### Keep Entire Package
117
+
118
+ ```proguard
119
+ -keep class com.mypackage.** { *; }
120
+ ```
121
+
122
+ ### Keep Classes with Annotation
123
+
124
+ ```proguard
125
+ -keep @interface com.facebook.proguard.annotations.DoNotStrip
126
+ -keep @com.facebook.proguard.annotations.DoNotStrip class *
127
+ -keepclassmembers class * {
128
+ @com.facebook.proguard.annotations.DoNotStrip *;
129
+ }
130
+ ```
131
+
132
+ ## Disable Obfuscation (If Needed)
133
+
134
+ ```proguard
135
+ # proguard-rules.pro
136
+ -dontobfuscate
137
+ ```
138
+
139
+ Use when:
140
+ - Debugging crashes (stack traces more readable)
141
+ - Library requires class names
142
+
143
+ ## Size Impact
144
+
145
+ Example from guide:
146
+ - **Without R8**: 9.5 MB
147
+ - **With R8**: 6.3 MB
148
+ - **Savings**: 33%
149
+
150
+ Larger apps may see 20-30% reduction.
151
+
152
+ ## Troubleshooting
153
+
154
+ ### App Crashes After R8
155
+
156
+ Usually means needed class was removed.
157
+
158
+ **Debug steps**:
159
+
160
+ 1. Check crash log for class name
161
+ 2. Add keep rule:
162
+ ```proguard
163
+ -keep class com.example.CrashedClass { *; }
164
+ ```
165
+ 3. Rebuild and test
166
+
167
+ ### Library Specific Rules
168
+
169
+ Many libraries provide ProGuard rules. Check:
170
+ - Library README
171
+ - Library's `consumer-proguard-rules.pro`
172
+ - Stack Overflow for library + proguard
173
+
174
+ ### Common Library Rules
175
+
176
+ ```proguard
177
+ # Hermes (usually auto-included)
178
+ -keep class com.facebook.hermes.unicode.** { *; }
179
+
180
+ # React Native
181
+ -keep class com.facebook.react.** { *; }
182
+
183
+ # Gson
184
+ -keepattributes Signature
185
+ -keep class com.google.gson.** { *; }
186
+
187
+ # OkHttp
188
+ -dontwarn okhttp3.**
189
+ -dontwarn okio.**
190
+ ```
191
+
192
+ ## Verification
193
+
194
+ ### Check APK Size
195
+
196
+ ```bash
197
+ # Build
198
+ ./gradlew assembleRelease
199
+
200
+ # Check size
201
+ ls -la android/app/build/outputs/apk/release/
202
+ ```
203
+
204
+ ### Use Ruler for Detailed Analysis
205
+
206
+ See [bundle-analyze-app.md](./bundle-analyze-app.md).
207
+
208
+ ### Verify Obfuscation
209
+
210
+ Decompile APK to check class names are obfuscated:
211
+
212
+ ```bash
213
+ # Using jadx or similar
214
+ jadx android/app/build/outputs/apk/release/app-release.apk
215
+ ```
216
+
217
+ ### Verify Runtime Behavior
218
+
219
+ Use `agent-device` to install or open the release build, navigate critical flows, capture snapshots/screenshots, and collect logs. If it is missing and release verification is needed, install it through the environment's approved/trusted path or ask the user to install or enable it. Read the `agent-device` skill or CLI help when available before writing exact commands.
220
+
221
+ ## Common Pitfalls
222
+
223
+ - **Not testing release build**: Always QA with R8 enabled
224
+ - **Missing library rules**: Check library docs
225
+ - **Over-keeping**: Too many keep rules negates benefits
226
+ - **Reflection**: Code using reflection may break
227
+
228
+ ## Related Skills
229
+
230
+ - [bundle-analyze-app.md](./bundle-analyze-app.md) - Measure size impact
231
+ - [bundle-native-assets.md](./bundle-native-assets.md) - Further size reduction
@@ -0,0 +1,215 @@
1
+ ---
2
+ title: Tree Shaking
3
+ impact: HIGH
4
+ tags: bundle, tree-shaking, dead-code, metro, repack
5
+ ---
6
+
7
+ # Skill: Tree Shaking
8
+
9
+ Enable dead code elimination to remove unused exports from your JavaScript bundle.
10
+
11
+ ## Quick Config
12
+
13
+ ```bash
14
+ # .env (Expo SDK 52+)
15
+ EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=1
16
+ EXPO_UNSTABLE_TREE_SHAKING=1
17
+ ```
18
+
19
+ ```javascript
20
+ // metro.config.js
21
+ config.transformer.getTransformOptions = async () => ({
22
+ transform: { experimentalImportSupport: true },
23
+ });
24
+ ```
25
+
26
+ ```javascript
27
+ // babel.config.js (non-Expo projects must set `disableImportExportTransform`)
28
+ module.exports = {
29
+ presets: [
30
+ [
31
+ 'module:@react-native/babel-preset',
32
+ { disableImportExportTransform: true },
33
+ ],
34
+ ],
35
+ };
36
+ ```
37
+
38
+ ## When to Use
39
+
40
+ - Bundle includes unused library code
41
+ - Want automatic barrel export optimization
42
+ - Using Expo SDK 52+ (recommended approach)
43
+ - Project already uses Re.Pack (`@callstack/repack`)
44
+
45
+ ## Platform Support
46
+
47
+ | Bundler | Tree Shaking | Notes |
48
+ |---------|--------------|-------|
49
+ | Metro | No general tree shaking | Platform/dev-only shaking exists; use specialized tooling for unused exports |
50
+ | Expo SDK 52+ | Experimental unused import/export removal | Production only; requires ESM and side-effect-safe modules |
51
+ | Expo SDK 54+ | Verify defaults | Import support is documented as default; tree-shaking env toggles may still be required |
52
+ | Re.Pack | Yes | Via Webpack/Rspack optimizations and minification |
53
+
54
+ ## Setup: Expo SDK 52+
55
+
56
+ ### 1. Enable Import Support
57
+
58
+ ```javascript
59
+ // metro.config.js
60
+ const { getDefaultConfig } = require('expo/metro-config');
61
+
62
+ const config = getDefaultConfig(__dirname);
63
+
64
+ config.transformer.getTransformOptions = async () => ({
65
+ transform: {
66
+ experimentalImportSupport: true,
67
+ },
68
+ });
69
+
70
+ module.exports = config;
71
+ ```
72
+
73
+ ### 2. Enable Tree Shaking
74
+
75
+ Create/edit `.env`:
76
+
77
+ ```bash
78
+ EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=1
79
+ EXPO_UNSTABLE_TREE_SHAKING=1
80
+ ```
81
+
82
+ **Note**: Only applies in production builds.
83
+
84
+ ## Setup: Metro with ESBuild
85
+
86
+ ```bash
87
+ npm install @rnx-kit/metro-serializer-esbuild
88
+ ```
89
+
90
+ Configure in metro.config.js.
91
+
92
+ ## Setup: Re.Pack (Only If Already Installed)
93
+
94
+ > **Important**: Re.Pack (`@callstack/repack`) is a custom bundler using Rspack/Webpack. Only apply these instructions if the project already has Re.Pack configured. Do not suggest migrating a codebase to Re.Pack—it's rarely necessary and requires significant setup.
95
+
96
+ **If project has `@callstack/repack` in dependencies:**
97
+
98
+ Tree shaking is enabled by default with Rspack. Verify in config:
99
+
100
+ ```javascript
101
+ // rspack.config.js or webpack.config.js
102
+ module.exports = {
103
+ optimization: {
104
+ usedExports: true, // Mark unused exports
105
+ minimize: true, // Remove during minification
106
+ },
107
+ };
108
+ ```
109
+
110
+ ## Platform Shaking
111
+
112
+ Code inside `Platform.OS` and `Platform.select` checks is removed for other platforms:
113
+
114
+ ```tsx
115
+ // IMPORTANT: import Platform directly from 'react-native'
116
+ import { Platform } from 'react-native';
117
+
118
+ if (Platform.OS === 'ios') {
119
+ // Removed from Android bundle
120
+ }
121
+
122
+ if (Platform.select({ ios: true, android: false }) === 'ios') {
123
+ // Removed from Android bundle
124
+ }
125
+ ```
126
+
127
+ **Critical**: Must use direct import. This does NOT work:
128
+
129
+ ```tsx
130
+ import * as RN from 'react-native';
131
+ if (RN.Platform.OS === 'ios') {
132
+ // NOT removed - optimization fails
133
+ }
134
+ ```
135
+
136
+ For non-Expo projects, requires both `experimentalImportSupport: true` in Metro config and `disableImportExportTransform: true` in Babel config.
137
+
138
+ Impact: Savings from enabling platform shaking on a bare React Native Community CLI project are:
139
+ - 5% smaller Hermes bytecode (2.79 MB → 2.64 MB)
140
+ - 15% smaller minified JS bundle (1 MB → 0.85 MB)
141
+
142
+ ## Requirements for Tree Shaking
143
+
144
+ ### ESM Imports Required
145
+
146
+ ```tsx
147
+ // ✅ ESM - Tree shakeable
148
+ import { foo } from './module';
149
+
150
+ // ❌ CommonJS - Not tree shakeable
151
+ const { foo } = require('./module');
152
+ ```
153
+
154
+ ### Side Effects Declaration
155
+
156
+ Libraries must declare side-effect-free in `package.json`:
157
+
158
+ ```json
159
+ {
160
+ "sideEffects": false
161
+ }
162
+ ```
163
+
164
+ Or specify files with side effects:
165
+
166
+ ```json
167
+ {
168
+ "sideEffects": ["*.css", "./src/polyfills.js"]
169
+ }
170
+ ```
171
+
172
+ ## Size Impact
173
+
174
+ | Bundle Type | Metro (MB) | Re.Pack (MB) | Change |
175
+ | ----------------- | ---------- | ------------ | -------- |
176
+ | Production | 35.63 | 38.48 | +8% |
177
+ | Prod Minified | 15.54 | 13.36 | **-14%** |
178
+ | Prod HBC | 21.79 | 19.35 | **-11%** |
179
+ | Prod Minified HBC | 21.62 | 19.05 | **-12%** |
180
+
181
+ **Expected improvement**: 10-15% bundle size reduction.
182
+
183
+ ## Verification
184
+
185
+ 1. Build production bundle (see [bundle-analyze-js.md](./bundle-analyze-js.md))
186
+ 2. Analyze with source-map-explorer (see [bundle-analyze-js.md](./bundle-analyze-js.md))
187
+ 3. Search for functions you know are unused
188
+ 4. If found → tree shaking not working
189
+
190
+ ### Test Example
191
+
192
+ ```tsx
193
+ // test-treeshake.js
194
+ export const usedFunction = () => 'used';
195
+ export const unusedFunction = () => 'unused'; // Should be removed
196
+
197
+ // app.js
198
+ import { usedFunction } from './test-treeshake';
199
+ ```
200
+
201
+ After building, search bundle for `unusedFunction`. Should not exist.
202
+
203
+ ## Common Pitfalls
204
+
205
+ - **Not using production build**: Tree shaking only in prod
206
+ - **CommonJS modules**: Need ESM for full effectiveness
207
+ - **Side effects not declared**: Library may not be shakeable
208
+ - **Dynamic imports**: `require(variable)` prevents analysis
209
+ - **Babel/Metro config mismatch**: `disableImportExportTransform` must match `experimentalImportSupport`
210
+
211
+ ## Related Skills
212
+
213
+ - [bundle-analyze-js.md](./bundle-analyze-js.md) - Verify tree shaking effect
214
+ - [bundle-barrel-exports.md](./bundle-barrel-exports.md) - Manual alternative
215
+ - [bundle-code-splitting.md](./bundle-code-splitting.md) - Remote chunk loading safeguards