novahiz 0.2.2 → 0.2.5

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 (565) hide show
  1. package/NOTICE.md +25 -15
  2. package/README.md +353 -355
  3. package/adapters/README.md +1 -1
  4. package/adapters/opencode/agent/novahiz.md +1 -2
  5. package/adapters/opencode/commands/novahiz-init.md +10 -0
  6. package/adapters/opencode/instructions.md +1 -1
  7. package/adapters/opencode/novahiz.ts +182 -4
  8. package/bin/novahiz.cmd +2 -2
  9. package/catalog/categories.json +1085 -1093
  10. package/catalog/overrides.json +12 -13
  11. package/catalog/providers.json +18 -34
  12. package/catalog/rules.json +15 -22
  13. package/docs/ARCHITECTURE.md +2 -2
  14. package/docs/CATALOG.md +7 -6
  15. package/docs/CONFIGURATION.md +5 -5
  16. package/docs/CONSTITUTION.md +4 -4
  17. package/docs/GATE.md +7 -11
  18. package/docs/HARNESSES.md +11 -0
  19. package/docs/INSTALL.md +7 -5
  20. package/docs/PLUGIN.md +24 -6
  21. package/docs/PROVIDERS.md +12 -10
  22. package/docs/ROADMAPS.md +4 -3
  23. package/docs/RULES.md +11 -10
  24. package/install/bootstrap.mjs +9 -19
  25. package/install/install.mjs +23 -41
  26. package/mcp/novahiz-tools/index.mjs +35 -6
  27. package/novahiz.config.example.json +1 -5
  28. package/package.json +6 -7
  29. package/skills/apple-ui-audit/SKILL.md +95 -0
  30. package/skills/apple-ui-audit/references/screen-walkthrough.md +29 -0
  31. package/skills/browser-session/SKILL.md +61 -0
  32. package/skills/browser-session/references/session-run-sheet.md +30 -0
  33. package/skills/browser-session/scripts/browser_session_preflight.mjs +74 -0
  34. package/skills/browser-session/scripts/sample-run.json +5 -0
  35. package/skills/code-standards/SKILL.md +85 -0
  36. package/skills/code-standards/references/pr-review-worksheet.md +35 -0
  37. package/skills/design-token-pipeline/SKILL.md +85 -0
  38. package/skills/design-token-pipeline/references/dtcg-sample.json +37 -0
  39. package/skills/llm-threat-review/SKILL.md +99 -0
  40. package/skills/llm-threat-review/references/review-worksheet.md +34 -0
  41. package/skills/llm-threat-review/scripts/llm_risk_lint.mjs +105 -0
  42. package/skills/novahiz-audit/SKILL.md +1 -1
  43. package/skills/novahiz-gate/SKILL.md +7 -6
  44. package/skills/novahiz-humanizer/SKILL.md +1 -1
  45. package/skills/novahiz-implement/SKILL.md +1 -1
  46. package/skills/novahiz-init/SKILL.md +112 -0
  47. package/skills/novahiz-planner/SKILL.md +1 -2
  48. package/skills/openapi-mcp-server/SKILL.md +76 -0
  49. package/skills/openapi-mcp-server/references/mcp-ship-checklist.md +30 -0
  50. package/skills/openapi-mcp-server/references/tool-worksheet.md +30 -0
  51. package/skills/openapi-mcp-server/scripts/openapi_mcp_lint.mjs +133 -0
  52. package/skills/package-risk-audit/SKILL.md +83 -0
  53. package/skills/package-risk-audit/references/intake-worksheet.md +19 -0
  54. package/skills/package-risk-audit/scripts/dep_risk_lint.mjs +131 -0
  55. package/skills/secrets-hygiene/SKILL.md +62 -0
  56. package/skills/secrets-hygiene/references/rotation-playbook.md +27 -0
  57. package/skills/secrets-hygiene/scripts/secret_scan.mjs +120 -0
  58. package/skills/skill-authoring/SKILL.md +93 -0
  59. package/skills/skill-authoring/references/skill-template.md +59 -0
  60. package/skills/skill-authoring/scripts/skill_frontmatter_lint.mjs +65 -0
  61. package/skills/skill-eval-loop/SKILL.md +103 -0
  62. package/skills/skill-eval-loop/references/negative-patterns.md +12 -0
  63. package/skills/skill-eval-loop/references/run-sheet.md +40 -0
  64. package/skills/skill-eval-loop/scripts/skill_structure_check.mjs +100 -0
  65. package/skills/ui-craft-rules/SKILL.md +96 -0
  66. package/skills/ui-slop-remover/SKILL.md +110 -0
  67. package/skills/ui-slop-remover/references/tell-catalogue.md +58 -0
  68. package/skills/ui-slop-remover/scripts/slop_lint.mjs +119 -0
  69. package/src/autodocs.ts +192 -0
  70. package/src/cli.ts +8 -1
  71. package/src/commands/autodocs.ts +250 -0
  72. package/src/commands/doctor.ts +226 -217
  73. package/src/commands/gate.ts +16 -5
  74. package/src/commands/init.ts +356 -0
  75. package/src/commands/task.ts +20 -7
  76. package/src/gate.ts +401 -401
  77. package/src/ledger.ts +39 -0
  78. package/src/targets.ts +43 -7
  79. package/bundled-skills/ab-testing/SKILL.md +0 -353
  80. package/bundled-skills/ab-testing/evals/evals.json +0 -105
  81. package/bundled-skills/ab-testing/references/sample-size-guide.md +0 -263
  82. package/bundled-skills/ab-testing/references/test-templates.md +0 -277
  83. package/bundled-skills/ad-creative/SKILL.md +0 -425
  84. package/bundled-skills/ad-creative/assets/creative-review-template.html +0 -400
  85. package/bundled-skills/ad-creative/evals/evals.json +0 -217
  86. package/bundled-skills/ad-creative/references/creative-review-page.md +0 -106
  87. package/bundled-skills/ad-creative/references/creative-roadmap.md +0 -118
  88. package/bundled-skills/ad-creative/references/generative-tools.md +0 -637
  89. package/bundled-skills/ad-creative/references/hook-system.md +0 -115
  90. package/bundled-skills/ad-creative/references/imessage-video-ads.md +0 -201
  91. package/bundled-skills/ad-creative/references/meta-creative-formats.md +0 -114
  92. package/bundled-skills/ad-creative/references/motion-video-ads.md +0 -126
  93. package/bundled-skills/ad-creative/references/platform-specs.md +0 -213
  94. package/bundled-skills/ad-creative/references/short-form-video-specs.md +0 -213
  95. package/bundled-skills/ad-creative/references/static-ad-templates.md +0 -308
  96. package/bundled-skills/ads/SKILL.md +0 -499
  97. package/bundled-skills/ads/evals/evals.json +0 -157
  98. package/bundled-skills/ads/references/abm-playbook.md +0 -93
  99. package/bundled-skills/ads/references/ad-copy-templates.md +0 -207
  100. package/bundled-skills/ads/references/audience-targeting.md +0 -243
  101. package/bundled-skills/ads/references/audit-guardrails.md +0 -83
  102. package/bundled-skills/ads/references/b2b-paid-playbook.md +0 -115
  103. package/bundled-skills/ads/references/conversion-tracking.md +0 -361
  104. package/bundled-skills/ads/references/creative-research-automation.md +0 -103
  105. package/bundled-skills/ads/references/google-ads-audit-checklist.md +0 -84
  106. package/bundled-skills/ads/references/google-search-playbook.md +0 -120
  107. package/bundled-skills/ads/references/linkedin-b2b-playbook.md +0 -107
  108. package/bundled-skills/ads/references/meta-decision-system.md +0 -176
  109. package/bundled-skills/ads/references/payback-period.md +0 -69
  110. package/bundled-skills/ads/references/platform-setup-checklists.md +0 -277
  111. package/bundled-skills/ads/references/rsa-output-spec.md +0 -88
  112. package/bundled-skills/agent-device/SKILL.md +0 -20
  113. package/bundled-skills/ai-seo/SKILL.md +0 -488
  114. package/bundled-skills/ai-seo/evals/evals.json +0 -135
  115. package/bundled-skills/ai-seo/references/agent-readiness.md +0 -57
  116. package/bundled-skills/ai-seo/references/citations-vs-recommendations.md +0 -85
  117. package/bundled-skills/ai-seo/references/content-patterns.md +0 -287
  118. package/bundled-skills/ai-seo/references/content-types.md +0 -71
  119. package/bundled-skills/ai-seo/references/format-volatility.md +0 -98
  120. package/bundled-skills/ai-seo/references/okf.md +0 -104
  121. package/bundled-skills/ai-seo/references/platform-ranking-factors.md +0 -154
  122. package/bundled-skills/ai-seo/references/youtube-ai-citations.md +0 -60
  123. package/bundled-skills/analytics/SKILL.md +0 -310
  124. package/bundled-skills/analytics/evals/evals.json +0 -90
  125. package/bundled-skills/analytics/references/event-library.md +0 -260
  126. package/bundled-skills/analytics/references/ga4-implementation.md +0 -300
  127. package/bundled-skills/analytics/references/gtm-implementation.md +0 -390
  128. package/bundled-skills/android-emulator/SKILL.md +0 -32
  129. package/bundled-skills/android-reverse-engineering/LICENSE +0 -190
  130. package/bundled-skills/android-reverse-engineering/SKILL.md +0 -313
  131. package/bundled-skills/android-reverse-engineering/references/api-extraction-patterns.md +0 -197
  132. package/bundled-skills/android-reverse-engineering/references/call-flow-analysis.md +0 -210
  133. package/bundled-skills/android-reverse-engineering/references/fernflower-usage.md +0 -115
  134. package/bundled-skills/android-reverse-engineering/references/jadx-usage.md +0 -116
  135. package/bundled-skills/android-reverse-engineering/references/kotlin-name-recovery.md +0 -108
  136. package/bundled-skills/android-reverse-engineering/references/setup-guide.md +0 -221
  137. package/bundled-skills/android-reverse-engineering/references/third_party_hosts.txt +0 -122
  138. package/bundled-skills/android-reverse-engineering/scripts/check-deps.ps1 +0 -165
  139. package/bundled-skills/android-reverse-engineering/scripts/check-deps.sh +0 -129
  140. package/bundled-skills/android-reverse-engineering/scripts/decompile.ps1 +0 -400
  141. package/bundled-skills/android-reverse-engineering/scripts/decompile.sh +0 -578
  142. package/bundled-skills/android-reverse-engineering/scripts/find-api-calls.ps1 +0 -121
  143. package/bundled-skills/android-reverse-engineering/scripts/find-api-calls.sh +0 -339
  144. package/bundled-skills/android-reverse-engineering/scripts/fingerprint.sh +0 -241
  145. package/bundled-skills/android-reverse-engineering/scripts/install-dep.ps1 +0 -345
  146. package/bundled-skills/android-reverse-engineering/scripts/install-dep.sh +0 -448
  147. package/bundled-skills/android-reverse-engineering/scripts/lookup-name.sh +0 -85
  148. package/bundled-skills/android-reverse-engineering/scripts/recover-kotlin-names.sh +0 -140
  149. package/bundled-skills/build-graph/SKILL.md +0 -38
  150. package/bundled-skills/claude-history-ingest/SKILL.md +0 -463
  151. package/bundled-skills/claude-history-ingest/references/claude-data-format.md +0 -118
  152. package/bundled-skills/codex-history-ingest/SKILL.md +0 -248
  153. package/bundled-skills/codex-history-ingest/references/codex-data-format.md +0 -82
  154. package/bundled-skills/cold-email/SKILL.md +0 -159
  155. package/bundled-skills/cold-email/evals/evals.json +0 -94
  156. package/bundled-skills/cold-email/references/benchmarks.md +0 -83
  157. package/bundled-skills/cold-email/references/follow-up-sequences.md +0 -81
  158. package/bundled-skills/cold-email/references/frameworks.md +0 -90
  159. package/bundled-skills/cold-email/references/personalization.md +0 -79
  160. package/bundled-skills/cold-email/references/subject-lines.md +0 -53
  161. package/bundled-skills/competitor-profiling/SKILL.md +0 -415
  162. package/bundled-skills/competitor-profiling/evals/evals.json +0 -85
  163. package/bundled-skills/competitor-profiling/references/templates.md +0 -167
  164. package/bundled-skills/competitor-profiling/references/tool-reference.md +0 -179
  165. package/bundled-skills/computer-use/SKILL.md +0 -41
  166. package/bundled-skills/content-strategy/SKILL.md +0 -439
  167. package/bundled-skills/content-strategy/evals/evals.json +0 -116
  168. package/bundled-skills/content-strategy/references/content-distribution.md +0 -83
  169. package/bundled-skills/content-strategy/references/headless-cms.md +0 -194
  170. package/bundled-skills/copilot-history-ingest/SKILL.md +0 -376
  171. package/bundled-skills/copilot-history-ingest/references/copilot-data-format.md +0 -321
  172. package/bundled-skills/copy-editing/SKILL.md +0 -457
  173. package/bundled-skills/copy-editing/evals/evals.json +0 -89
  174. package/bundled-skills/copy-editing/references/checklist.md +0 -66
  175. package/bundled-skills/copy-editing/references/content-refresh.md +0 -38
  176. package/bundled-skills/copy-editing/references/plain-english-alternatives.md +0 -394
  177. package/bundled-skills/copywriting/SKILL.md +0 -256
  178. package/bundled-skills/copywriting/evals/evals.json +0 -126
  179. package/bundled-skills/copywriting/references/copy-frameworks.md +0 -433
  180. package/bundled-skills/copywriting/references/natural-transitions.md +0 -272
  181. package/bundled-skills/cro/SKILL.md +0 -187
  182. package/bundled-skills/cro/evals/evals.json +0 -111
  183. package/bundled-skills/cro/references/experiments.md +0 -248
  184. package/bundled-skills/cro/references/form.md +0 -422
  185. package/bundled-skills/cross-linker/SKILL.md +0 -309
  186. package/bundled-skills/customer-research/SKILL.md +0 -305
  187. package/bundled-skills/customer-research/evals/evals.json +0 -176
  188. package/bundled-skills/customer-research/references/interviews-and-surveys.md +0 -155
  189. package/bundled-skills/customer-research/references/source-guides.md +0 -401
  190. package/bundled-skills/daily-update/SKILL.md +0 -223
  191. package/bundled-skills/dart-add-unit-test/SKILL.md +0 -122
  192. package/bundled-skills/dart-build-cli-app/SKILL.md +0 -185
  193. package/bundled-skills/dart-collect-coverage/SKILL.md +0 -141
  194. package/bundled-skills/dart-fix-runtime-errors/SKILL.md +0 -166
  195. package/bundled-skills/dart-generate-test-mocks/SKILL.md +0 -155
  196. package/bundled-skills/dart-migrate-to-checks-package/SKILL.md +0 -528
  197. package/bundled-skills/dart-resolve-package-conflicts/SKILL.md +0 -116
  198. package/bundled-skills/dart-run-static-analysis/SKILL.md +0 -104
  199. package/bundled-skills/dart-setup-ffi-assets/SKILL.md +0 -419
  200. package/bundled-skills/dart-use-doc-examples/SKILL.md +0 -96
  201. package/bundled-skills/dart-use-ffigen/SKILL.md +0 -218
  202. package/bundled-skills/dart-use-pattern-matching/SKILL.md +0 -146
  203. package/bundled-skills/dart-use-primary-constructors/SKILL.md +0 -262
  204. package/bundled-skills/dart-write-documentation/SKILL.md +0 -136
  205. package/bundled-skills/debug-issue/SKILL.md +0 -28
  206. package/bundled-skills/dogfood/SKILL.md +0 -27
  207. package/bundled-skills/eas-app-stores/SKILL.md +0 -176
  208. package/bundled-skills/eas-app-stores/agents/openai.yaml +0 -4
  209. package/bundled-skills/eas-app-stores/references/app-store-metadata.md +0 -497
  210. package/bundled-skills/eas-app-stores/references/ios-app-store.md +0 -376
  211. package/bundled-skills/eas-app-stores/references/native-ios.md +0 -167
  212. package/bundled-skills/eas-app-stores/references/play-store.md +0 -244
  213. package/bundled-skills/eas-app-stores/references/testflight.md +0 -62
  214. package/bundled-skills/eas-app-stores/references/workflows.md +0 -120
  215. package/bundled-skills/eas-hosting/SKILL.md +0 -431
  216. package/bundled-skills/eas-hosting/agents/openai.yaml +0 -4
  217. package/bundled-skills/eas-observe/SKILL.md +0 -54
  218. package/bundled-skills/eas-observe/agents/openai.yaml +0 -4
  219. package/bundled-skills/eas-observe/references/metrics.md +0 -98
  220. package/bundled-skills/eas-observe/references/queries.md +0 -403
  221. package/bundled-skills/eas-observe/references/setup.md +0 -476
  222. package/bundled-skills/eas-observe/references/third-party.md +0 -136
  223. package/bundled-skills/eas-simulator/SKILL.md +0 -208
  224. package/bundled-skills/eas-simulator/agents/openai.yaml +0 -4
  225. package/bundled-skills/eas-simulator/references/controllers.md +0 -106
  226. package/bundled-skills/eas-simulator/references/run-your-app.md +0 -224
  227. package/bundled-skills/eas-simulator/references/troubleshooting.md +0 -44
  228. package/bundled-skills/eas-update/SKILL.md +0 -146
  229. package/bundled-skills/eas-update/agents/openai.yaml +0 -4
  230. package/bundled-skills/eas-update-insights/SKILL.md +0 -238
  231. package/bundled-skills/eas-update-insights/agents/openai.yaml +0 -4
  232. package/bundled-skills/eas-update-insights/references/channel-insights-schema.md +0 -47
  233. package/bundled-skills/eas-update-insights/references/update-insights-schema.md +0 -69
  234. package/bundled-skills/eas-workflows/SKILL.md +0 -99
  235. package/bundled-skills/eas-workflows/agents/openai.yaml +0 -4
  236. package/bundled-skills/eas-workflows/scripts/fetch.js +0 -109
  237. package/bundled-skills/eas-workflows/scripts/package.json +0 -6
  238. package/bundled-skills/emails/SKILL.md +0 -311
  239. package/bundled-skills/emails/evals/evals.json +0 -93
  240. package/bundled-skills/emails/references/copy-guidelines.md +0 -113
  241. package/bundled-skills/emails/references/email-types.md +0 -515
  242. package/bundled-skills/emails/references/sequence-templates.md +0 -168
  243. package/bundled-skills/explore-codebase/SKILL.md +0 -29
  244. package/bundled-skills/expo-animation/LICENSE +0 -21
  245. package/bundled-skills/expo-animation/RECIPES.md +0 -385
  246. package/bundled-skills/expo-animation/SKILL.md +0 -267
  247. package/bundled-skills/expo-animation/agents/openai.yaml +0 -4
  248. package/bundled-skills/expo-app-clip/SKILL.md +0 -290
  249. package/bundled-skills/expo-app-clip/agents/openai.yaml +0 -4
  250. package/bundled-skills/expo-app-clip/references/native-module.md +0 -96
  251. package/bundled-skills/expo-brownfield/SKILL.md +0 -62
  252. package/bundled-skills/expo-brownfield/agents/openai.yaml +0 -4
  253. package/bundled-skills/expo-brownfield/references/brownfield-integrated.md +0 -526
  254. package/bundled-skills/expo-brownfield/references/brownfield-isolated.md +0 -451
  255. package/bundled-skills/expo-brownfield/references/comparison.md +0 -63
  256. package/bundled-skills/expo-brownfield/references/troubleshooting.md +0 -88
  257. package/bundled-skills/expo-data-fetching/SKILL.md +0 -478
  258. package/bundled-skills/expo-data-fetching/agents/openai.yaml +0 -4
  259. package/bundled-skills/expo-data-fetching/references/expo-router-loaders.md +0 -341
  260. package/bundled-skills/expo-data-fetching/references/offline-and-cancellation.md +0 -68
  261. package/bundled-skills/expo-design-system/SKILL.md +0 -376
  262. package/bundled-skills/expo-design-system/agents/openai.yaml +0 -4
  263. package/bundled-skills/expo-design-system/references/audit.md +0 -190
  264. package/bundled-skills/expo-design-system/references/native-slop.md +0 -74
  265. package/bundled-skills/expo-dev-client/SKILL.md +0 -182
  266. package/bundled-skills/expo-dev-client/agents/openai.yaml +0 -4
  267. package/bundled-skills/expo-dom/SKILL.md +0 -425
  268. package/bundled-skills/expo-dom/agents/openai.yaml +0 -4
  269. package/bundled-skills/expo-examples/SKILL.md +0 -106
  270. package/bundled-skills/expo-examples/agents/openai.yaml +0 -4
  271. package/bundled-skills/expo-examples/references/catalog.md +0 -105
  272. package/bundled-skills/expo-migrate-module/SKILL.md +0 -113
  273. package/bundled-skills/expo-migrate-module/agents/openai.yaml +0 -4
  274. package/bundled-skills/expo-migrate-module/references/compatibility.md +0 -73
  275. package/bundled-skills/expo-migrate-module/references/example.md +0 -212
  276. package/bundled-skills/expo-migrate-module/references/migration-map.md +0 -306
  277. package/bundled-skills/expo-module/SKILL.md +0 -151
  278. package/bundled-skills/expo-module/agents/openai.yaml +0 -4
  279. package/bundled-skills/expo-module/references/config-plugin.md +0 -90
  280. package/bundled-skills/expo-module/references/create-expo-module.md +0 -206
  281. package/bundled-skills/expo-module/references/lifecycle.md +0 -127
  282. package/bundled-skills/expo-module/references/module-config.md +0 -48
  283. package/bundled-skills/expo-module/references/native-module.md +0 -286
  284. package/bundled-skills/expo-module/references/native-view.md +0 -171
  285. package/bundled-skills/expo-native-ui/SKILL.md +0 -201
  286. package/bundled-skills/expo-native-ui/agents/openai.yaml +0 -4
  287. package/bundled-skills/expo-native-ui/references/controls.md +0 -231
  288. package/bundled-skills/expo-native-ui/references/gradients.md +0 -106
  289. package/bundled-skills/expo-native-ui/references/icons.md +0 -232
  290. package/bundled-skills/expo-native-ui/references/media.md +0 -193
  291. package/bundled-skills/expo-native-ui/references/storage.md +0 -121
  292. package/bundled-skills/expo-native-ui/references/visual-effects.md +0 -198
  293. package/bundled-skills/expo-native-ui/references/webgpu-three.md +0 -605
  294. package/bundled-skills/expo-overview/SKILL.md +0 -115
  295. package/bundled-skills/expo-overview/agents/openai.yaml +0 -4
  296. package/bundled-skills/expo-project-structure/SKILL.md +0 -114
  297. package/bundled-skills/expo-project-structure/agents/openai.yaml +0 -4
  298. package/bundled-skills/expo-router/SKILL.md +0 -240
  299. package/bundled-skills/expo-router/agents/openai.yaml +0 -4
  300. package/bundled-skills/expo-router/references/form-sheet.md +0 -253
  301. package/bundled-skills/expo-router/references/route-structure.md +0 -229
  302. package/bundled-skills/expo-router/references/search.md +0 -248
  303. package/bundled-skills/expo-router/references/tabs.md +0 -433
  304. package/bundled-skills/expo-router/references/toolbar-and-headers.md +0 -284
  305. package/bundled-skills/expo-router/references/zoom-transitions.md +0 -158
  306. package/bundled-skills/expo-skill-eval/SKILL.md +0 -314
  307. package/bundled-skills/expo-skill-eval/agents/visual-grader.md +0 -52
  308. package/bundled-skills/expo-skill-eval/references/design-rubric.md +0 -45
  309. package/bundled-skills/expo-skill-eval/references/runtime-matrix.md +0 -34
  310. package/bundled-skills/expo-skill-eval/scripts/check-static.sh +0 -64
  311. package/bundled-skills/expo-skill-eval/scripts/clean-fixture.sh +0 -56
  312. package/bundled-skills/expo-skill-eval/scripts/generate_viewer.py +0 -450
  313. package/bundled-skills/expo-skill-eval/scripts/latest-sdk.sh +0 -46
  314. package/bundled-skills/expo-skill-eval/scripts/make-fixture.sh +0 -95
  315. package/bundled-skills/expo-skill-eval/scripts/make-workspace.sh +0 -31
  316. package/bundled-skills/expo-skill-eval/scripts/snapshot-android.sh +0 -284
  317. package/bundled-skills/expo-skill-eval/scripts/snapshot-ios.sh +0 -132
  318. package/bundled-skills/expo-skill-eval/scripts/snapshot-web.sh +0 -61
  319. package/bundled-skills/expo-skill-feedback/SKILL.md +0 -87
  320. package/bundled-skills/expo-skill-feedback/agents/openai.yaml +0 -4
  321. package/bundled-skills/expo-skill-feedback/scripts/skill-event.cjs +0 -180
  322. package/bundled-skills/expo-skill-feedback/scripts/telemetry.cjs +0 -65
  323. package/bundled-skills/expo-skill-feedback/scripts/telemetry_common.cjs +0 -171
  324. package/bundled-skills/expo-ui/SKILL.md +0 -101
  325. package/bundled-skills/expo-ui/agents/openai.yaml +0 -4
  326. package/bundled-skills/expo-ui/references/drop-in-replacements.md +0 -27
  327. package/bundled-skills/expo-ui/references/jetpack-compose.md +0 -73
  328. package/bundled-skills/expo-ui/references/swift-ui.md +0 -73
  329. package/bundled-skills/expo-ui/references/universal.md +0 -104
  330. package/bundled-skills/expo-ui/scripts/list-components.js +0 -193
  331. package/bundled-skills/expo-upgrade/SKILL.md +0 -150
  332. package/bundled-skills/expo-upgrade/agents/openai.yaml +0 -4
  333. package/bundled-skills/expo-upgrade/references/expo-av-to-audio.md +0 -132
  334. package/bundled-skills/expo-upgrade/references/expo-av-to-video.md +0 -160
  335. package/bundled-skills/expo-upgrade/references/native-tabs.md +0 -124
  336. package/bundled-skills/expo-upgrade/references/new-architecture.md +0 -79
  337. package/bundled-skills/expo-upgrade/references/react-19.md +0 -79
  338. package/bundled-skills/expo-upgrade/references/react-compiler.md +0 -59
  339. package/bundled-skills/expo-upgrade/references/react-navigation-to-expo-router.md +0 -61
  340. package/bundled-skills/expo-web-to-native/SKILL.md +0 -91
  341. package/bundled-skills/expo-web-to-native/agents/openai.yaml +0 -4
  342. package/bundled-skills/expo-web-to-native/references/false-friends.md +0 -119
  343. package/bundled-skills/expo-web-to-native/references/native-patterns.md +0 -39
  344. package/bundled-skills/expo-web-to-native/references/run-as-goal.md +0 -48
  345. package/bundled-skills/expo-web-to-native/references/verify-on-device.md +0 -45
  346. package/bundled-skills/find-skills/SKILL.md +0 -141
  347. package/bundled-skills/flutter-add-integration-test/SKILL.md +0 -163
  348. package/bundled-skills/flutter-add-widget-preview/SKILL.md +0 -145
  349. package/bundled-skills/flutter-add-widget-test/SKILL.md +0 -154
  350. package/bundled-skills/flutter-apply-architecture-best-practices/SKILL.md +0 -162
  351. package/bundled-skills/flutter-build-responsive-layout/SKILL.md +0 -139
  352. package/bundled-skills/flutter-fix-layout-issues/SKILL.md +0 -130
  353. package/bundled-skills/flutter-implement-json-serialization/SKILL.md +0 -153
  354. package/bundled-skills/flutter-setup-declarative-routing/SKILL.md +0 -255
  355. package/bundled-skills/flutter-setup-localization/SKILL.md +0 -210
  356. package/bundled-skills/flutter-use-http-package/SKILL.md +0 -174
  357. package/bundled-skills/graph-colorize/SKILL.md +0 -180
  358. package/bundled-skills/hermes-history-ingest/SKILL.md +0 -239
  359. package/bundled-skills/hermes-history-ingest/references/hermes-data-format.md +0 -131
  360. package/bundled-skills/impl-validator/SKILL.md +0 -118
  361. package/bundled-skills/ios-simulator/SKILL.md +0 -32
  362. package/bundled-skills/json-canvas/SKILL.md +0 -244
  363. package/bundled-skills/json-canvas/references/EXAMPLES.md +0 -329
  364. package/bundled-skills/launch/SKILL.md +0 -381
  365. package/bundled-skills/launch/evals/evals.json +0 -106
  366. package/bundled-skills/llm-wiki/SKILL.md +0 -661
  367. package/bundled-skills/llm-wiki/references/WRITING.md +0 -28
  368. package/bundled-skills/llm-wiki/references/karpathy-pattern.md +0 -45
  369. package/bundled-skills/marketing-plan/SKILL.md +0 -300
  370. package/bundled-skills/marketing-plan/evals/evals.json +0 -112
  371. package/bundled-skills/marketing-plan/references/aarrr-framework.md +0 -180
  372. package/bundled-skills/marketing-plan/references/budget-planning.md +0 -168
  373. package/bundled-skills/marketing-plan/references/client-types.md +0 -373
  374. package/bundled-skills/marketing-plan/references/current-state-rubric.md +0 -255
  375. package/bundled-skills/marketing-plan/references/example-quietude.md +0 -972
  376. package/bundled-skills/marketing-plan/references/funding-stage-unlocks.md +0 -230
  377. package/bundled-skills/marketing-plan/references/growth-patterns.md +0 -190
  378. package/bundled-skills/marketing-plan/references/idea-cross-reference.md +0 -265
  379. package/bundled-skills/marketing-plan/references/measurement-framework.md +0 -213
  380. package/bundled-skills/marketing-plan/references/methodology.md +0 -363
  381. package/bundled-skills/marketing-plan/references/ops-stack-mapping.md +0 -197
  382. package/bundled-skills/marketing-plan/references/plan-template.md +0 -494
  383. package/bundled-skills/marketing-plan/references/team-and-agency-model.md +0 -278
  384. package/bundled-skills/marketing-psychology/SKILL.md +0 -455
  385. package/bundled-skills/marketing-psychology/evals/evals.json +0 -88
  386. package/bundled-skills/memory-bridge/SKILL.md +0 -163
  387. package/bundled-skills/memory-save/SKILL.md +0 -88
  388. package/bundled-skills/obsidian-bases/SKILL.md +0 -499
  389. package/bundled-skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -173
  390. package/bundled-skills/obsidian-cli/SKILL.md +0 -106
  391. package/bundled-skills/obsidian-layout-adjustment/SKILL.md +0 -226
  392. package/bundled-skills/obsidian-layout-adjustment/evals/evals.json +0 -53
  393. package/bundled-skills/obsidian-layout-adjustment/references/workflow-reference.md +0 -212
  394. package/bundled-skills/obsidian-markdown/SKILL.md +0 -196
  395. package/bundled-skills/obsidian-markdown/references/CALLOUTS.md +0 -58
  396. package/bundled-skills/obsidian-markdown/references/EMBEDS.md +0 -70
  397. package/bundled-skills/obsidian-markdown/references/PROPERTIES.md +0 -61
  398. package/bundled-skills/offers/SKILL.md +0 -155
  399. package/bundled-skills/offers/evals/evals.json +0 -21
  400. package/bundled-skills/offers/references/bonus-stacking.md +0 -150
  401. package/bundled-skills/offers/references/examples.md +0 -215
  402. package/bundled-skills/offers/references/guarantee-design.md +0 -172
  403. package/bundled-skills/offers/references/offer-anatomy.md +0 -203
  404. package/bundled-skills/offers/references/offer-formats.md +0 -240
  405. package/bundled-skills/offers/references/saas-offers.md +0 -116
  406. package/bundled-skills/offers/references/scarcity-urgency.md +0 -175
  407. package/bundled-skills/offers/references/value-equation.md +0 -134
  408. package/bundled-skills/onboarding/SKILL.md +0 -261
  409. package/bundled-skills/onboarding/evals/evals.json +0 -108
  410. package/bundled-skills/onboarding/references/activation-models.md +0 -57
  411. package/bundled-skills/onboarding/references/experiments.md +0 -258
  412. package/bundled-skills/onboarding/references/minimum-path-to-value.md +0 -49
  413. package/bundled-skills/openclaw-history-ingest/SKILL.md +0 -257
  414. package/bundled-skills/openclaw-history-ingest/references/openclaw-data-format.md +0 -154
  415. package/bundled-skills/orchestration/SKILL.md +0 -69
  416. package/bundled-skills/pi-history-ingest/SKILL.md +0 -312
  417. package/bundled-skills/pricing/SKILL.md +0 -295
  418. package/bundled-skills/pricing/evals/evals.json +0 -119
  419. package/bundled-skills/pricing/references/pricing-models.md +0 -66
  420. package/bundled-skills/pricing/references/pricing-page-teardown.md +0 -85
  421. package/bundled-skills/pricing/references/research-methods.md +0 -152
  422. package/bundled-skills/pricing/references/tier-structure.md +0 -232
  423. package/bundled-skills/product-marketing/SKILL.md +0 -255
  424. package/bundled-skills/product-marketing/evals/evals.json +0 -98
  425. package/bundled-skills/prospecting/SKILL.md +0 -262
  426. package/bundled-skills/prospecting/evals/evals.json +0 -122
  427. package/bundled-skills/prospecting/references/b2b-prospecting.md +0 -106
  428. package/bundled-skills/prospecting/references/compliance.md +0 -123
  429. package/bundled-skills/prospecting/references/data-sources.md +0 -287
  430. package/bundled-skills/prospecting/references/demand-signals.md +0 -129
  431. package/bundled-skills/prospecting/references/local-prospecting.md +0 -165
  432. package/bundled-skills/prospecting/references/saas-prospecting.md +0 -123
  433. package/bundled-skills/refactor-safely/SKILL.md +0 -29
  434. package/bundled-skills/review-delta/SKILL.md +0 -46
  435. package/bundled-skills/review-pr/SKILL.md +0 -66
  436. package/bundled-skills/sales-enablement/SKILL.md +0 -359
  437. package/bundled-skills/sales-enablement/evals/evals.json +0 -91
  438. package/bundled-skills/sales-enablement/references/deck-frameworks.md +0 -263
  439. package/bundled-skills/sales-enablement/references/demo-scripts.md +0 -355
  440. package/bundled-skills/sales-enablement/references/objection-library.md +0 -270
  441. package/bundled-skills/sales-enablement/references/one-pager-templates.md +0 -208
  442. package/bundled-skills/seo-audit/SKILL.md +0 -499
  443. package/bundled-skills/seo-audit/evals/evals.json +0 -136
  444. package/bundled-skills/seo-audit/references/ai-writing-detection.md +0 -200
  445. package/bundled-skills/seo-audit/references/international-seo.md +0 -230
  446. package/bundled-skills/session-brain/SKILL.md +0 -101
  447. package/bundled-skills/session-search/SKILL.md +0 -97
  448. package/bundled-skills/social/SKILL.md +0 -413
  449. package/bundled-skills/social/evals/evals.json +0 -107
  450. package/bundled-skills/social/references/carousel-frameworks.md +0 -141
  451. package/bundled-skills/social/references/listening-sources-template.md +0 -123
  452. package/bundled-skills/social/references/listening.md +0 -283
  453. package/bundled-skills/social/references/platform-limits.md +0 -110
  454. package/bundled-skills/social/references/platforms.md +0 -170
  455. package/bundled-skills/social/references/post-templates.md +0 -179
  456. package/bundled-skills/social/references/reverse-engineering.md +0 -195
  457. package/bundled-skills/social/references/short-form-video.md +0 -237
  458. package/bundled-skills/tag-taxonomy/SKILL.md +0 -218
  459. package/bundled-skills/vault-skill-factory/SKILL.md +0 -143
  460. package/bundled-skills/video/SKILL.md +0 -346
  461. package/bundled-skills/video/evals/evals.json +0 -103
  462. package/bundled-skills/video/references/ai-video-prompting.md +0 -175
  463. package/bundled-skills/video/references/edit-anatomy.md +0 -84
  464. package/bundled-skills/wiki-agent/SKILL.md +0 -322
  465. package/bundled-skills/wiki-capture/SKILL.md +0 -337
  466. package/bundled-skills/wiki-capture/references/RAW-FORMAT.md +0 -115
  467. package/bundled-skills/wiki-context-pack/SKILL.md +0 -89
  468. package/bundled-skills/wiki-dashboard/SKILL.md +0 -472
  469. package/bundled-skills/wiki-dedup/SKILL.md +0 -320
  470. package/bundled-skills/wiki-digest/SKILL.md +0 -243
  471. package/bundled-skills/wiki-export/SKILL.md +0 -445
  472. package/bundled-skills/wiki-history-ingest/SKILL.md +0 -61
  473. package/bundled-skills/wiki-import/SKILL.md +0 -276
  474. package/bundled-skills/wiki-ingest/SKILL.md +0 -563
  475. package/bundled-skills/wiki-ingest/references/ingest-prompts.md +0 -54
  476. package/bundled-skills/wiki-ingest/references/pageindex.md +0 -72
  477. package/bundled-skills/wiki-ingest/references/url-sources.md +0 -295
  478. package/bundled-skills/wiki-lint/SKILL.md +0 -643
  479. package/bundled-skills/wiki-narrate/SKILL.md +0 -120
  480. package/bundled-skills/wiki-narrate/references/voices.md +0 -29
  481. package/bundled-skills/wiki-query/SKILL.md +0 -307
  482. package/bundled-skills/wiki-rebuild/SKILL.md +0 -212
  483. package/bundled-skills/wiki-research/SKILL.md +0 -319
  484. package/bundled-skills/wiki-setup/SKILL.md +0 -359
  485. package/bundled-skills/wiki-stage-commit/SKILL.md +0 -164
  486. package/bundled-skills/wiki-status/SKILL.md +0 -556
  487. package/bundled-skills/wiki-switch/SKILL.md +0 -115
  488. package/bundled-skills/wiki-synthesize/SKILL.md +0 -212
  489. package/bundled-skills/wiki-update/SKILL.md +0 -271
  490. package/skills/ai-security/SKILL.md +0 -132
  491. package/skills/ai-security/references/atlas-coverage.md +0 -60
  492. package/skills/ai-security/scripts/ai_threat_scanner.py +0 -373
  493. package/skills/anti-AI-design/SKILL.md +0 -72
  494. package/skills/apple-hig-audit/SKILL.md +0 -64
  495. package/skills/apple-hig-audit/references/accessibility.md +0 -78
  496. package/skills/apple-hig-audit/references/platform-specifics.md +0 -57
  497. package/skills/apple-hig-audit/references/visual-design.md +0 -68
  498. package/skills/apple-hig-audit/scripts/hig_checker.py +0 -115
  499. package/skills/apple-hig-audit/templates/hig-audit-template.md +0 -114
  500. package/skills/dependency-auditor/README.md +0 -98
  501. package/skills/dependency-auditor/SKILL.md +0 -114
  502. package/skills/dependency-auditor/assets/sample_go.mod +0 -53
  503. package/skills/dependency-auditor/assets/sample_package.json +0 -72
  504. package/skills/dependency-auditor/assets/sample_requirements.txt +0 -71
  505. package/skills/dependency-auditor/expected_outputs/sample_license_report.txt +0 -37
  506. package/skills/dependency-auditor/expected_outputs/sample_upgrade_plan.txt +0 -59
  507. package/skills/dependency-auditor/expected_outputs/sample_vulnerability_report.json +0 -71
  508. package/skills/dependency-auditor/references/dependency_management_best_practices.md +0 -46
  509. package/skills/dependency-auditor/references/license_compatibility_matrix.md +0 -57
  510. package/skills/dependency-auditor/references/vulnerability_assessment_guide.md +0 -62
  511. package/skills/dependency-auditor/scripts/dep_scanner.py +0 -595
  512. package/skills/dependency-auditor/scripts/license_checker.py +0 -442
  513. package/skills/dependency-auditor/scripts/upgrade_planner.py +0 -490
  514. package/skills/dependency-auditor/test-inventory.json +0 -421
  515. package/skills/dependency-auditor/test-project/package.json +0 -72
  516. package/skills/design-system-tokens/SKILL.md +0 -90
  517. package/skills/design-system-tokens/assets/design_system_doc_template.md +0 -129
  518. package/skills/design-system-tokens/references/component-architecture.md +0 -88
  519. package/skills/design-system-tokens/references/developer-handoff.md +0 -61
  520. package/skills/design-system-tokens/references/responsive-calculations.md +0 -72
  521. package/skills/design-system-tokens/references/token-generation.md +0 -62
  522. package/skills/design-system-tokens/scripts/design_token_generator.py +0 -315
  523. package/skills/engineering-code-standards/SKILL.md +0 -174
  524. package/skills/env-secrets-manager/SKILL.md +0 -102
  525. package/skills/env-secrets-manager/references/secret-patterns.md +0 -56
  526. package/skills/env-secrets-manager/references/validation-detection-rotation.md +0 -76
  527. package/skills/env-secrets-manager/scripts/env_auditor.py +0 -340
  528. package/skills/frontend-design-taste/SKILL.md +0 -62
  529. package/skills/mcp-server-builder/README.md +0 -42
  530. package/skills/mcp-server-builder/SKILL.md +0 -144
  531. package/skills/mcp-server-builder/references/openapi-extraction-guide.md +0 -34
  532. package/skills/mcp-server-builder/references/production-hardening-guide.md +0 -80
  533. package/skills/mcp-server-builder/references/python-server-template.md +0 -22
  534. package/skills/mcp-server-builder/references/spec-compatibility.md +0 -129
  535. package/skills/mcp-server-builder/references/typescript-server-template.md +0 -19
  536. package/skills/mcp-server-builder/references/validation-checklist.md +0 -30
  537. package/skills/mcp-server-builder/scripts/mcp_validator.py +0 -180
  538. package/skills/mcp-server-builder/scripts/openapi_to_mcp.py +0 -279
  539. package/skills/playwright-agent/SKILL.md +0 -147
  540. package/skills/skill-creator/LICENSE.txt +0 -14
  541. package/skills/skill-creator/SKILL.md +0 -471
  542. package/skills/skill-creator/agents/analyzer.md +0 -274
  543. package/skills/skill-creator/agents/comparator.md +0 -202
  544. package/skills/skill-creator/agents/grader.md +0 -223
  545. package/skills/skill-creator/assets/eval_review.html +0 -143
  546. package/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  547. package/skills/skill-creator/eval-viewer/viewer.html +0 -1321
  548. package/skills/skill-creator/references/schemas.md +0 -430
  549. package/skills/skill-creator/scripts/__init__.py +0 -0
  550. package/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  551. package/skills/skill-creator/scripts/generate_report.py +0 -322
  552. package/skills/skill-creator/scripts/improve_description.py +0 -247
  553. package/skills/skill-creator/scripts/package_skill.py +0 -136
  554. package/skills/skill-creator/scripts/quick_validate.py +0 -103
  555. package/skills/skill-creator/scripts/run_eval.py +0 -310
  556. package/skills/skill-creator/scripts/run_loop.py +0 -328
  557. package/skills/skill-creator/scripts/utils.py +0 -47
  558. package/skills/write-a-skill/SKILL.md +0 -111
  559. package/skills/write-a-skill/references/companion_tooling.md +0 -61
  560. package/skills/write-a-skill/references/description_design_patterns.md +0 -136
  561. package/skills/write-a-skill/references/progressive_disclosure_principles.md +0 -87
  562. package/skills/write-a-skill/references/quality_gates_for_skills.md +0 -158
  563. package/skills/write-a-skill/scripts/skill_description_validator.py +0 -241
  564. package/skills/write-a-skill/scripts/skill_review_checklist_runner.py +0 -257
  565. package/skills/write-a-skill/scripts/skill_structure_validator.py +0 -265
@@ -1,451 +0,0 @@
1
- # Brownfield: Isolated Approach
2
-
3
- Build the React Native + Expo code as a prebuilt native library, **AAR** on Android and **XCFramework** on iOS, and consume it from the existing native app like any other dependency.
4
-
5
- ## When to use
6
-
7
- - Native and React Native are owned by different teams or release on different cadences.
8
- - The native team must not be required to install Node.js, Yarn, or React Native tooling.
9
- - React Native code lives in a separate repo or monorepo from the native app.
10
- - You want the smallest possible footprint on the existing native build pipeline.
11
-
12
- If a single team owns both layers, is comfortable with React Native tooling and needs deep integration, see [./brownfield-integrated.md](./brownfield-integrated.md).
13
-
14
- ## What you produce
15
-
16
- | Platform | Artifact | Default location |
17
- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
18
- | Android | `{group}:{libraryName}:{version}` AAR | Local Maven (`~/.m2`) by default; remote Maven also supported |
19
- | iOS | Set of `.xcframework`s — see [the iOS section below](#ios) for how `ios.buildReactNativeFromSource` (default `false` on SDK 56+) controls whether you get 5 frameworks or 2 — or a single Swift Package via `--package` | `./artifacts` |
20
-
21
- The JavaScript bundle is **embedded inside the artifact** in release builds, so the native app does not need Metro at runtime in production.
22
-
23
- ## Prerequisites
24
-
25
- - **Expo SDK 55 or later** — brownfield support, `expo-brownfield`, and the required runtime classes are only available on SDK 55+. Earlier SDKs will not work.
26
- - **Node.js (LTS)** — runs JavaScript and the Expo CLI.
27
- - **Yarn** — manages JavaScript dependencies.
28
-
29
- Node and Yarn are only needed in the environment that _builds_ the artifact. The consuming native app does not need them.
30
-
31
- ---
32
-
33
- ## 1) Set up the Expo project
34
-
35
- ### Create a new Expo project
36
-
37
- ```sh
38
- npx create-expo-app@latest my-project --template default@sdk-55
39
- ```
40
-
41
- **Pin to SDK 55 or later — earlier SDKs do not support brownfield.** The project can live in a separate repo or alongside the native app in a monorepo; it does not need to be inside the native project.
42
-
43
- ### Install expo-brownfield
44
-
45
- ```sh
46
- cd my-project
47
- npx expo install expo-brownfield
48
- ```
49
-
50
- The plugin self-registers in `app.json` with defaults derived from your app config.
51
-
52
- ### Check what the host app already ships
53
-
54
- Before picking Expo modules, audit the host app's dependencies. The artifact's libraries meet the host's at build time, and version clashes surface as duplicate-class errors or forced upgrades.
55
-
56
- - **Jetpack Compose** — `@expo/ui` re-declares recent Compose and Material3 versions, and is pulled transitively by `expo-router`. A host pinned to older Compose gets force-upgraded. Exclude it with `expo.autolinking.android.exclude` if the RN screens don't need it.
57
- - **OkHttp, Kotlin stdlib, Material Components** — arrive as ordinary Maven dependencies of the artifact; Gradle resolves the highest version, which can bump the host's copies.
58
-
59
- When a shared library must stay at the host's version, exclude the Expo module that brings it, or (with fused publishing, below) mark the group as host-provided.
60
-
61
- ### Configure the plugin (optional)
62
-
63
- To override the auto-generated names, expand the plugin entry in `app.json`:
64
-
65
- ```json
66
- {
67
- "expo": {
68
- "plugins": [
69
- [
70
- "expo-brownfield",
71
- {
72
- "ios": {
73
- "targetName": "MyBrownfield",
74
- "bundleIdentifier": "com.example.mybrownfield"
75
- },
76
- "android": {
77
- "libraryName": "mybrownfield",
78
- "group": "com.example",
79
- "package": "com.example.mybrownfield",
80
- "version": "1.0.0"
81
- }
82
- }
83
- ]
84
- ]
85
- }
86
- }
87
- ```
88
-
89
- **iOS options** — `targetName` (XCFramework target name), `bundleIdentifier` (framework bundle ID).
90
-
91
- **Android options** — `libraryName` (AAR name), `group` (Maven group ID), `package` (Android package), `version` (library version), `publishing` (Maven publication targets — see [Publishing the Android AAR](#publishing-the-android-aar)).
92
-
93
- ### Speed up iOS builds with prebuilt Expo modules
94
-
95
- Enable `expo-build-properties`'s `ios.usePrecompiledModules` so `pod install` downloads each Expo module as a prebuilt `.xcframework` instead of compiling it from source. `build:ios` detects those xcframeworks under `ios/Pods/` and bundles them into the Swift Package output alongside the brownfield framework, React, Hermes, and `ReactNativeDependencies`.
96
-
97
- ```json
98
- {
99
- "expo": {
100
- "plugins": [
101
- ["expo-build-properties", { "ios": { "usePrecompiledModules": true } }],
102
- "expo-brownfield"
103
- ]
104
- }
105
- }
106
- ```
107
-
108
- When precompiled modules are detected, `build:ios` is pinned to a single flavor (`--debug` or `--release`) per package — Swift Package Manager has no per-configuration overload for `.binaryTarget(path:)`. Build once per flavor and distribute the two packages side by side.
109
-
110
- ---
111
-
112
- ## 2) Build the native libraries
113
-
114
- ### Android
115
-
116
- ```sh
117
- npx expo-brownfield build:android
118
- ```
119
-
120
- Produces an AAR and publishes it to the local Maven repository at `~/.m2`. The Maven coordinates come from the plugin config — e.g. `com.example:mybrownfield:1.0.0`.
121
-
122
- #### Publishing the Android AAR
123
-
124
- The plugin's `publishing` option controls where the AAR is published. When unset, it defaults to local Maven. To push to other targets (e.g. a shared CI Maven, an internal Artifactory/Nexus, or a folder pulled into another build), declare the publications explicitly:
125
-
126
- ```json
127
- {
128
- "expo": {
129
- "plugins": [
130
- [
131
- "expo-brownfield",
132
- {
133
- "android": {
134
- "libraryName": "mybrownfield",
135
- "group": "com.example",
136
- "version": "1.0.0",
137
- "publishing": [
138
- { "type": "localMaven" },
139
- {
140
- "type": "localDirectory",
141
- "name": "build",
142
- "path": "./out/maven"
143
- },
144
- {
145
- "type": "remotePublic",
146
- "name": "company",
147
- "url": "https://maven.example.com/releases"
148
- },
149
- {
150
- "type": "remotePrivate",
151
- "name": "artifactory",
152
- "url": { "variable": "ARTIFACTORY_URL" },
153
- "username": { "variable": "ARTIFACTORY_USER" },
154
- "password": { "variable": "ARTIFACTORY_TOKEN" }
155
- }
156
- ]
157
- }
158
- }
159
- ]
160
- ]
161
- }
162
- }
163
- ```
164
-
165
- Supported `type` values: `localMaven`, `localDirectory`, `remotePublic`, `remotePrivate`. For private repos, credentials and URL accept either inline strings or `{ "variable": "ENV_VAR_NAME" }` to read from the environment at publish time.
166
-
167
- By default, `build:android` runs every declared publication. To pick specific publications or repositories from the command line, use the CLI flags:
168
-
169
- ```sh
170
- npx expo-brownfield build:android --task publishReleasePublicationToCompanyRepository
171
- npx expo-brownfield tasks:android # list available publish tasks and repositories
172
- ```
173
-
174
- #### Fused publishing (single fat AAR)
175
-
176
- > **Version note:** requires minimum SDK 56. Earlier versions only support the per-module publishing above.
177
-
178
- The default publish flow emits one Maven coordinate per autolinked Expo module. For remote distribution, `--fused` collapses everything into one fat AAR per build variant:
179
-
180
- ```sh
181
- npx expo-brownfield build:android --fused --repo MavenLocal
182
- ```
183
-
184
- This publishes two coordinates — `{group}:{libraryName}-fused-release` and `{group}:{libraryName}-fused-debug`, which the host wires per build type:
185
-
186
- ```kotlin
187
- dependencies {
188
- releaseImplementation("com.example:mybrownfield-fused-release:1.0.0")
189
- debugImplementation("com.example:mybrownfield-fused-debug:1.0.0")
190
- }
191
- ```
192
-
193
- The debug AAR contains debug-compiled modules (dev menu, Metro reload); the release AAR embeds the JS bundle. Published metadata pins the matching React Native variant, so a debug host consuming only the release AAR still resolves release RN correctly.
194
-
195
- Not everything is fused: the React Native runtime, Kotlin stdlib, host-common libraries (Material, Guava, OkHttp, Fresco), `androidx.*`, and detected KMP umbrella modules stay external and are declared as ordinary POM dependencies. Gradle properties tune the behavior for unusual dependency graphs:
196
-
197
- | Property | Effect |
198
- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
199
- | `brownfield.fused.skip` | Gradle project names to leave out of the AAR (pair with `strip-packages`). |
200
- | `brownfield.fused.strip-packages` | Package prefixes to remove from `ExpoModulesPackageList` — avoids `NoClassDefFoundError` for skipped modules. |
201
- | `brownfield.fused.androidx-fuse` | Extra `androidx.*` groups to fuse instead of keeping external. |
202
- | `brownfield.fused.exclude-transitive` | Extra groups to keep external (still declared in the POM). |
203
- | `brownfield.fused.host-provided` | Groups the host already ships (e.g. Glide, Compose): excluded from the AAR **and** from the POM, so the host's version is untouched. |
204
-
205
- ### iOS
206
-
207
- ```sh
208
- npx expo-brownfield build:ios
209
- ```
210
-
211
- Outputs to `./artifacts`. The set depends on the `ios.buildReactNativeFromSource` flag (set via `expo-build-properties`):
212
-
213
- - **`buildReactNativeFromSource: false`** (default on SDK 56+) — React Native is consumed as a prebuilt binary, so `build:ios` emits five xcframeworks side-by-side: `{TargetName}.xcframework`, `React.xcframework`, `ReactNativeDependencies.xcframework`, `ExpoModulesJSI.xcframework`, and `hermesvm.xcframework`.
214
- - **`buildReactNativeFromSource: true`** (default on SDK 55, opt-in on SDK 56+) — React Native is compiled from source and statically linked into the brownfield framework, leaving two xcframeworks: `{TargetName}.xcframework` and `hermesvm.xcframework`.
215
-
216
- To force source builds on SDK 56+, add `expo-build-properties` to `app.json`:
217
-
218
- ```json
219
- {
220
- "expo": {
221
- "plugins": [
222
- [
223
- "expo-build-properties",
224
- { "ios": { "buildReactNativeFromSource": true } }
225
- ],
226
- "expo-brownfield"
227
- ]
228
- }
229
- }
230
- ```
231
-
232
- **Every xcframework in the produced set must be embedded in the consuming app** (Embed & Sign). The Swift Package output below (`--package`) wires this for you automatically.
233
-
234
- > **iOS deployment target:** the brownfield artifact inherits the Expo project's iOS deployment target (16.4 on SDK 56+). The consuming app's deployment target must be set to 16.4 or higher; otherwise Xcode will refuse to link the embedded frameworks. If the host app is on an older floor (e.g. iOS 14.0), bump its `IPHONEOS_DEPLOYMENT_TARGET` before adding the artifact.
235
-
236
- #### Ship as a Swift Package (recommended)
237
-
238
- Pass `--package [name]` to bundle the output as a self-contained Swift Package instead of separate `.xcframework` directories. The host iOS app then consumes it via **Add Package Dependencies → Add Local** in Xcode and links every bundled framework automatically — no manual drag-and-drop, no per-framework "Embed & Sign" toggles.
239
-
240
- ```sh
241
- npx expo-brownfield build:ios --release --package MyAppPackage
242
- ```
243
-
244
- The flag accepts an optional name. If omitted, the package is named `{TargetName}Artifacts`. The resulting directory is a complete Swift Package:
245
-
246
- ```
247
- artifacts/MyAppPackage/
248
- ├── Package.swift
249
- └── xcframeworks/
250
- ├── MyAppPackage.xcframework
251
- ├── hermesvm.xcframework
252
- ├── React.xcframework
253
- └── ReactNativeDependencies.xcframework
254
- ```
255
-
256
- When `usePrecompiledModules` is enabled, the package directory is suffixed with the build flavor (e.g. `MyAppPackage-release/`) and includes every prebuilt Expo module xcframework. Run `build:ios --debug --package …` and `build:ios --release --package …` separately, and point your host app at the matching package for each build configuration.
257
-
258
- ### Generate native projects for debugging
259
-
260
- To inspect or debug the generated native code, run prebuild:
261
-
262
- ```sh
263
- npx expo prebuild
264
- ```
265
-
266
- This creates `android/` and `ios/` directories containing the brownfield wrappers:
267
-
268
- **Android (Kotlin):** `ReactNativeHostManager`, `BrownfieldActivity`, `ReactNativeFragment`, `ReactNativeViewFactory`, `BrownfieldMessaging`.
269
-
270
- **iOS (Swift):** `ReactNativeHostManager`, `ReactNativeViewController`, `ReactNativeView` (SwiftUI), `BrownfieldMessaging`, `ReactNativeDelegate`.
271
-
272
- ---
273
-
274
- ## 3) Consume from the native app
275
-
276
- ### Android
277
-
278
- #### Add the Maven dependency
279
-
280
- In `app/build.gradle.kts`:
281
-
282
- ```kotlin
283
- dependencies {
284
- implementation("com.example:mybrownfield:1.0.0")
285
- }
286
- ```
287
-
288
- If consuming from the local Maven repo, register `mavenLocal()` in `settings.gradle.kts`:
289
-
290
- ```kotlin
291
- dependencyResolutionManagement {
292
- repositories {
293
- google()
294
- mavenCentral()
295
- mavenLocal()
296
- }
297
- }
298
- ```
299
-
300
- > **Note:** `mavenLocal()` must be added under `dependencyResolutionManagement`, not the deprecated top-level `allprojects { repositories { ... } }` block.
301
-
302
- If the artifact is published to a remote Maven, declare that repository in the same `dependencyResolutionManagement` block instead — credentials follow Gradle's standard `maven { url = uri(...); credentials { username = ...; password = ... } }` form.
303
-
304
- #### Host app requirements
305
-
306
- - **`minSdk` 24 or higher** — React Native's floor. Hosts below it fail at manifest merge with `uses-sdk:minSdkVersion XX cannot be smaller than version 24`.
307
- - **Permissions merge in from the Expo modules** (e.g. storage permissions from media modules). Hosts that enforce a permission allowlist can strip unwanted entries in their manifest with `tools:node="remove"` or reconcile attribute conflicts with `tools:replace`.
308
- - **Native libraries ship for every ABI enabled at publish time.** Left unfiltered, this can multiply the host APK size. Constrain ABIs when publishing (`reactNativeArchitectures=arm64-v8a` in the Expo project's `gradle.properties`) or filter in the host with `ndk.abiFilters` / APK splits.
309
-
310
- #### Show a React Native screen
311
-
312
- Extend `BrownfieldActivity` and call `showReactNativeFragment()`:
313
-
314
- ```kotlin
315
- import android.os.Bundle
316
- import com.example.mybrownfield.BrownfieldActivity
317
- import com.example.mybrownfield.showReactNativeFragment
318
-
319
- class ExpoActivity : BrownfieldActivity() {
320
- override fun onCreate(savedInstanceState: Bundle?) {
321
- super.onCreate(savedInstanceState)
322
- showReactNativeFragment()
323
- }
324
- }
325
- ```
326
-
327
- `BrownfieldActivity` extends `AppCompatActivity` and forwards configuration changes. `showReactNativeFragment()` registers the React Native root fragment and wires native back-button handling automatically.
328
-
329
- Register the activity in `AndroidManifest.xml`:
330
-
331
- ```xml
332
- <activity
333
- android:name=".ExpoActivity"
334
- android:theme="@style/Theme.AppCompat.Light.NoActionBar"
335
- android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
336
- />
337
- ```
338
-
339
- Launch it from native code:
340
-
341
- ```kotlin
342
- startActivity(Intent(this, ExpoActivity::class.java))
343
- ```
344
-
345
- ### iOS
346
-
347
- #### Add the artifacts to the Xcode project
348
-
349
- If you built a **Swift Package** (`build:ios --package …`):
350
-
351
- - In Xcode, **File → Add Package Dependencies… → Add Local…**, then select the generated package directory (e.g. `artifacts/MyAppPackage/`).
352
- - Add the package's product to your app target. Xcode links every bundled XCFramework through the aggregate library product — no manual "Embed & Sign" step.
353
- - If you produced both debug and release packages (because `usePrecompiledModules` is enabled), point the host app at the matching package per build configuration.
354
-
355
- If you built **standalone XCFrameworks** (default output):
356
-
357
- - Drag **every** `.xcframework` produced under `./artifacts` into the Xcode project navigator.
358
- - In the import dialog, check **Copy items if needed** and add them to your app target.
359
- - Under the app target's **General** tab → **Frameworks, Libraries, and Embedded Content**, set **every** framework to **Embed & Sign**. Forgetting one (commonly `hermesvm.xcframework`) is a leading cause of runtime "Library not loaded" crashes — see [./troubleshooting.md](./troubleshooting.md#ios-xcframework-signing-isolated-approach).
360
-
361
- #### Initialize React Native at app launch
362
-
363
- Call `ReactNativeHostManager.shared.initialize()` from `AppDelegate` **before any React Native view is created**. Initialization is asynchronous-friendly but must precede the first `ReactNativeViewController`/`ReactNativeView` instantiation.
364
-
365
- ```swift
366
- import UIKit
367
- import MyAppBrownfield // Replace with your target name
368
-
369
- @main
370
- class AppDelegate: UIResponder, UIApplicationDelegate {
371
- func application(
372
- _ application: UIApplication,
373
- didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
374
- ) -> Bool {
375
- ReactNativeHostManager.shared.initialize()
376
- return true
377
- }
378
- }
379
- ```
380
-
381
- #### Present a React Native view (UIKit)
382
-
383
- ```swift
384
- import UIKit
385
- import MyAppBrownfield
386
-
387
- class ViewController: UIViewController {
388
- @IBAction func openReactNative(_ sender: Any) {
389
- let rnViewController = ReactNativeViewController(moduleName: "main")
390
- navigationController?.pushViewController(rnViewController, animated: true)
391
- }
392
- }
393
- ```
394
-
395
- Pass props and launch options if needed:
396
-
397
- ```swift
398
- let rnViewController = ReactNativeViewController(
399
- moduleName: "main",
400
- initialProps: ["userId": "123"],
401
- launchOptions: [:]
402
- )
403
- ```
404
-
405
- > **Note:** `moduleName` must match the name registered via `AppRegistry.registerComponent(...)` in the Expo project's JS entry point. The default Expo template registers `"main"`.
406
-
407
- #### Present a React Native view (SwiftUI)
408
-
409
- ```swift
410
- import SwiftUI
411
- import MyAppBrownfield
412
-
413
- struct ContentView: View {
414
- @State private var showReactNative = false
415
-
416
- var body: some View {
417
- Button("Open React Native") {
418
- showReactNative = true
419
- }
420
- .fullScreenCover(isPresented: $showReactNative) {
421
- ReactNativeView(moduleName: "main")
422
- }
423
- }
424
- }
425
- ```
426
-
427
- ---
428
-
429
- ## Development vs. production
430
-
431
- ### Development (debug builds)
432
-
433
- Start Metro in the Expo project:
434
-
435
- ```sh
436
- npx expo start
437
- ```
438
-
439
- Build and run the native app in debug. React Native screens load JS from the Metro dev server over HTTP with full hot reloading. The device or emulator must be able to reach the dev machine — see [./troubleshooting.md](./troubleshooting.md) if Metro connections fail.
440
-
441
- ### Production (release builds)
442
-
443
- The JS bundle is embedded inside the AAR/XCFramework. Metro is not used. Build the native app in Release configuration and confirm the React Native screen loads.
444
-
445
- ---
446
-
447
- ## Related references
448
-
449
- - [./brownfield-integrated.md](./brownfield-integrated.md) — Alternative: add RN directly to the native build.
450
- - [./comparison.md](./comparison.md) — Decide between isolated and integrated.
451
- - [./troubleshooting.md](./troubleshooting.md) — Common Metro, build, and integration issues.
@@ -1,63 +0,0 @@
1
- # Brownfield: Isolated vs. Integrated
2
-
3
- Use this reference to choose between the two ways of adding React Native + Expo to an existing native app. If the team and constraints are already known, jump to one of:
4
-
5
- - [./brownfield-isolated.md](./brownfield-isolated.md) — RN as a prebuilt AAR / XCFramework.
6
- - [./brownfield-integrated.md](./brownfield-integrated.md) — RN added directly to existing Gradle / CocoaPods.
7
-
8
- ## Quick decision rules
9
-
10
- - **Choose isolated** if the native team must consume React Native as a regular library (AAR or XCFramework) without installing Node, Yarn, or RN tooling.
11
- - **Choose isolated** if React Native and the native app live in **separate repositories**, or release on **different cadences**.
12
- - **Choose isolated** if the existing native build is heavily customized (Tuist, Bazel, Buck, custom Gradle plugins) and adding the React Native Gradle plugin or CocoaPods autolinking would be disruptive.
13
- - **Choose integrated** if a **single team** owns the native and React Native code and is willing to maintain the RN build chain inside the native project.
14
- - **Choose integrated** if you want **hot reload, JS source maps, and devtools** to "just work" inside the existing native build with no extra orchestration.
15
- - **Choose integrated** if you expect to add many Expo modules and want them autolinked by the standard Expo tooling rather than rebuilt into a fresh artifact each time.
16
-
17
- When in doubt — and especially when the question is "can the native team avoid React Native tooling?" — pick **isolated**.
18
-
19
- ## Comparison
20
-
21
- | Dimension | Isolated | Integrated |
22
- | ---------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
23
- | What ships to the native app | Prebuilt AAR + XCFramework | React Native + Expo sources, autolinked into the existing build |
24
- | Native team needs Node / Yarn / RN CLI | **No** | **Yes** |
25
- | Build-system footprint | Minimal — one Maven dependency, two embedded XCFrameworks | Pervasive — React Native Gradle plugin, Podfile, autolinking, codegen |
26
- | Iteration speed for RN devs | Fast in isolation; native rebuild needed to pick up new artifact | Fast end-to-end; one combined build |
27
- | Dev-time hot reload | Yes (via Metro, when running the consumer app in debug) | Yes (native build embeds Metro detection) |
28
- | Production JS bundle location | Embedded in the AAR/XCFramework | Embedded in the APK/IPA by the RN Gradle plugin / Xcode build phase |
29
- | Maintenance ownership | RN team owns the artifact pipeline; native team owns the consumer build | One team owns the unified build |
30
- | Suitability for incremental adoption | High — easy to slot into one screen of an existing app | High, but with more setup before the first screen renders |
31
- | Suitability for multi-repo / multi-team setups | High | Low — tends to require a monorepo |
32
- | Risk of build-system conflicts with existing tooling | Low | Higher (RN Gradle plugin, codegen, Podfile assumptions) |
33
- | Re-publish workflow for RN changes | `npx expo-brownfield build:*` then bump the dependency | Rebuild the native app |
34
-
35
- ## Common scenarios
36
-
37
- **"React Native code is in `xyz-react` and the native apps are in `xyz-ios` and `xyz-android`. Each ships independently."**
38
- → **Isolated.** Build versioned artifacts (`com.xyz:onboarding:1.4.0`, `Onboarding.xcframework`). Native apps pin a version like any other dependency.
39
-
40
- **"Our app uses a heavily customized Gradle setup with multiple variants and flavors."**
41
- → **Isolated.** The RN Gradle plugin is opinionated about variant naming and bundle output paths; integrating cleanly with non-standard variants is non-trivial.
42
-
43
- **"We don't know yet whether RN will stay — we want to be able to remove it cheaply."**
44
- → **Isolated.** Removing the dependency removes the framework; the native build is barely touched.
45
-
46
- **"Our iOS team uses Tuist and refuses to add Node to the iOS build."**
47
- → **Isolated.** Ship an XCFramework. The iOS team adds two `.xcframework` files and one call to `ReactNativeHostManager.shared.initialize()` in `AppDelegate`. No Node, no CocoaPods changes to Expo.
48
-
49
- **"We have one repo, one team, and we want to deeply integrate React Native with the onboarding flow to an existing Android app."**
50
- → **Integrated.** Move the existing `android-project` into `my-project/android/`, add the React Native Gradle plugin to `settings.gradle`, register `MainApplication`, and host the flow in a `ReactActivity`. One build pipeline.
51
-
52
- **"We want to use CNG on the RN code and not worry about manual RN upgrades."**
53
- → **Isolated.** The AAR/XCFramework approach decouples the Expo RN version from the native app's build, so you can upgrade Expo and React Native independently of the native app's release cycle. The integrated approach requires more coordination between the RN version and the native app's build.
54
-
55
- ## What is identical between the approaches
56
-
57
- - The React Native + Expo source code itself — the same Expo project, the same `app.json`, the same modules — only differs in **how** it is shipped.
58
- - The JavaScript module registered with `AppRegistry.registerComponent("main", () => App)` is the same; the native side passes the same `moduleName` string in both flows.
59
-
60
- ## What is different at runtime
61
-
62
- - **Isolated** uses Expo's brownfield runtime wrappers — `ReactNativeHostManager`, `BrownfieldActivity`, `ReactNativeViewController`, `ReactNativeView`. These are generated by `npx expo-brownfield build:*` and bundled into the artifact.
63
- - **Integrated** uses the standard React Native runtime — `ReactActivity`, `ReactActivityDelegate`, `RCTReactNativeFactory`, `ExpoReactNativeFactory` — exposed by `react-native` and `expo` directly.
@@ -1,88 +0,0 @@
1
- # Brownfield Troubleshooting
2
-
3
- Cross-cutting issues that apply to both the isolated and integrated approaches. For approach-specific setup, see [./brownfield-isolated.md](./brownfield-isolated.md) or [./brownfield-integrated.md](./brownfield-integrated.md).
4
-
5
- ## Build failures
6
-
7
- **Symptom:** Gradle or Xcode build fails after a config change, dependency upgrade, or Expo SDK bump.
8
-
9
- - **Integrated approach** — regenerate native projects from scratch:
10
- ```sh
11
- npx expo prebuild --clean
12
- ```
13
- Then `cd ios && pod install` and re-open the `.xcworkspace`.
14
- - **Isolated approach** — clear the local Maven cache and rebuild the artifact:
15
- ```sh
16
- rm -rf ~/.m2/repository/<group>/<libraryName>
17
- npx expo-brownfield build:android
18
- npx expo-brownfield build:ios
19
- ```
20
- - For stubborn iOS issues, also delete `ios/build/`, `ios/Pods/`, and `ios/Podfile.lock`, then re-run `pod install`.
21
- - For stubborn Android issues, `./gradlew clean` and delete the project's `.gradle/` and `build/` directories.
22
-
23
- ## Missing autolinked Expo modules
24
-
25
- **Symptom:** Compilation succeeds but a module throws "Native module cannot be null" / "Cannot find native module 'X'" at runtime.
26
-
27
- - Install with `npx expo install <package>` rather than plain `yarn add` — `expo install` picks the version compatible with the current SDK.
28
- - After installing a new module, rebuild the native app. Autolinking runs at native build time, not at JS bundle time.
29
- - For the **isolated approach**, you must re-run `npx expo-brownfield build:android|ios` after adding a module, and republish/re-embed the new artifact.
30
-
31
- ## Metro connection
32
-
33
- **Symptom:** "Could not connect to development server" / red screen on launch in debug.
34
-
35
- - Ensure the device or emulator can reach the dev machine. The Android emulator can talk to the host via `10.0.2.2`; physical devices need a reachable LAN IP.
36
- - For physical Android devices on USB: `adb reverse tcp:8081 tcp:8081`.
37
- - Confirm Metro is actually running: `npx expo start` from the Expo project (or `yarn start` from the workspace root).
38
- - Verify the debug `AndroidManifest.xml` enables cleartext traffic — Android 9+ blocks HTTP by default. The debug variant should include `android:usesCleartextTraffic="true"` on `<application>`, or a `network_security_config` allowing the dev server.
39
- - iOS simulator: Metro should be reachable at `localhost:8081`. If it is not, check that ATS exceptions are still in place in `Info.plist` for `localhost` (the Expo template ships this by default).
40
-
41
- ## iOS XCFramework signing (isolated approach)
42
-
43
- **Symptom:** App launches but immediately crashes with "Library not loaded" or codesign errors during archive.
44
-
45
- - **Every** xcframework produced by `build:ios` must be set to **Embed & Sign** in the app target's **Frameworks, Libraries, and Embedded Content** section. On SDK 56+ this is five frameworks: `{TargetName}.xcframework`, `React.xcframework`, `ReactNativeDependencies.xcframework`, `ExpoModulesJSI.xcframework`, and `hermesvm.xcframework`. On SDK 55 it's two: `{TargetName}.xcframework` and `hermesvm.xcframework`. Missing any of them is a common cause of runtime crashes.
46
- - The frameworks must be added to the _app target_, not a framework or extension target.
47
- - Prefer the Swift Package output (`build:ios --package`) — it links every bundled xcframework through one aggregate product, so you cannot forget one.
48
-
49
- ## iOS architecture / simulator mismatch
50
-
51
- **Symptom:** "Building for iOS Simulator, but the linked library was built for iOS" or "Undefined symbols for architecture arm64".
52
-
53
- - The XCFramework includes both device and simulator slices. If a slice is missing, rebuild on the missing platform. The `expo-brownfield build:ios` command produces both by default.
54
- - On Apple Silicon simulators, do **not** set `EXCLUDED_ARCHS = arm64` for the simulator configuration — Apple Silicon simulators require `arm64`. The classic Rosetta-only exclusion is no longer correct.
55
-
56
- ## Android `mavenLocal()` not found (isolated approach)
57
-
58
- **Symptom:** Gradle reports "Could not find com.example:mybrownfield:1.0.0" even after a successful `expo-brownfield build:android`.
59
-
60
- - `mavenLocal()` must be declared under `dependencyResolutionManagement { repositories { ... } }` in `settings.gradle.kts`, not the deprecated top-level `allprojects { repositories { ... } }` block. The deprecated form is silently ignored when `dependencyResolutionManagement` is present.
61
- - Confirm the artifact actually landed in `~/.m2`:
62
- ```sh
63
- find ~/.m2/repository -name "mybrownfield*"
64
- ```
65
- - Verify the `group` and `libraryName` in the consumer's dependency line match what the plugin config emitted.
66
-
67
- ## Module name mismatch
68
-
69
- **Symptom:** The native view loads but renders a blank screen, with "Application 'X' has not been registered" in the JS logs.
70
-
71
- - The `moduleName` passed to `ReactNativeViewController(moduleName: "main")` (iOS) or returned from `getMainComponentName()` (Android) must equal the name passed to `AppRegistry.registerComponent("main", () => App)` in the JS entry point.
72
- - The default Expo template registers `"main"`. If you changed the registration, update every native call site.
73
-
74
- ## Monorepo: autolinking can't find the Expo project
75
-
76
- **Symptom:** Gradle or CocoaPods fails resolving Expo modules even though they are installed.
77
-
78
- - **Android (integrated):** set `root = file("../../my-project")` (or the correct relative path) inside the `react { ... }` block in `app/build.gradle`, and explicitly set the project root in `settings.gradle` before `expoAutolinking.useExpoModules()`.
79
- - **iOS (integrated):** set `:app_path` in `use_react_native!` to the absolute path of the Expo project root. Optionally pass `EXPO_PROJECT_ROOT=/abs/path` to `pod install`.
80
- - Confirm `node_modules/` is installed at the workspace root (`yarn install` from the monorepo root, not from the Expo project subdirectory).
81
-
82
- ## After upgrading Expo SDK
83
-
84
- If the brownfield setup stops building after an SDK upgrade:
85
-
86
- - Re-run `npx expo install --fix` in the Expo project to align native module versions.
87
- - Rebuild the artifact (isolated) or run `npx expo prebuild --clean` (integrated).
88
- - Compare the new `templates/expo-template-bare-minimum` for the target SDK against your customized native files — Expo occasionally changes Gradle plugin names, Podfile helpers, or AppDelegate entry points across SDKs.