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,73 +0,0 @@
1
- # Platform-specific iOS UI: `@expo/ui/swift-ui`
2
-
3
- > **iOS only.** Code that imports from `@expo/ui/swift-ui` will crash on Android with "Unable to get view config" errors. Always place this code in an `.ios.tsx` component file or guard it with `Platform.OS === 'ios'`. `Host` must be imported from `@expo/ui` (the universal root), not from `@expo/ui/swift-ui`.
4
-
5
- Use this layer only when the universal `@expo/ui` components don't cover what you need on iOS (see `./universal.md` first). This requires a platform-specific tree.
6
-
7
- ### File placement with Expo Router
8
-
9
- **Do not put `.ios.tsx` files inside `app/` or `src/app/`.** Expo Router does not support platform-extension suffixes for route files and will throw a "no fallback sibling" Render Error.
10
-
11
- Place platform-specific component files in `components/` (or any directory outside the route tree), then import them from a regular route file:
12
-
13
- ```
14
- src/components/ProfileEditor.ios.tsx ← SwiftUI tree lives here
15
- src/app/profile-editor.tsx ← regular Expo Router route, imports the component
16
- ```
17
-
18
- `src/app/profile-editor.tsx`:
19
- ```tsx
20
- import ProfileEditor from '../components/ProfileEditor';
21
- export default ProfileEditor;
22
- ```
23
-
24
- Alternatively, keep everything in one regular route file and branch on `Platform.OS`:
25
-
26
- ```tsx
27
- // src/app/profile-editor.tsx
28
- import { Platform } from 'react-native';
29
- // import SwiftUI components only when on iOS to avoid Android crash
30
- const SwiftUIForm = Platform.OS === 'ios' ? require('../components/ProfileEditor.ios').default : null;
31
- ```
32
-
33
- Or more simply, put the `Platform.OS` guard and the SwiftUI import in the same route file (safe because Metro only bundles `.ios.tsx` imports on iOS builds when using platform extensions in `components/`).
34
-
35
- ## Instructions
36
-
37
- - Expo UI's API mirrors SwiftUI's API. Use SwiftUI knowledge to decide which components or modifiers to use.
38
- - Components are imported from `@expo/ui/swift-ui`, modifiers from `@expo/ui/swift-ui/modifiers`.
39
- - **Before writing any code, run the list-components script** to get the exact components and modifiers available in the installed version:
40
- ```bash
41
- node <skill-root>/scripts/list-components.js <project-path> # names only (compact)
42
- node <skill-root>/scripts/list-components.js <project-path> --docs # with one-line descriptions
43
- ```
44
- (`<skill-root>` is the directory containing this `references/` folder.)
45
- - **The installed package's TypeScript types (`.d.ts`) are the most reliable source of truth** for prop shapes and signatures — read the relevant `{Component}/index.d.ts` from the installed `@expo/ui/swift-ui` package in `node_modules`. Use the docs below as the human-readable reference.
46
- - When about to use a component, fetch its docs to confirm the API — https://docs.expo.dev/versions/latest/sdk/ui/swift-ui/{component-name}/index.md
47
- - When unsure about a modifier's API, refer to the docs — https://docs.expo.dev/versions/latest/sdk/ui/swift-ui/modifiers/index.md
48
- - Every SwiftUI tree must be wrapped in `Host`.
49
- - `RNHostView` is specifically for embedding RN components inside a SwiftUI tree. Example:
50
-
51
- ```jsx
52
- import { Host } from "@expo/ui"; // Host always from universal root
53
- import { VStack, RNHostView } from "@expo/ui/swift-ui"; // platform components from swift-ui
54
- import { Pressable } from "react-native";
55
-
56
- <Host matchContents>
57
- <VStack>
58
- <RNHostView matchContents>
59
- // Here, `Pressable` is an RN component so it is wrapped in `RNHostView`.
60
- <Pressable />
61
- </RNHostView>
62
- </VStack>
63
- </Host>;
64
- ```
65
-
66
- - If a required modifier or View is missing in Expo UI, it can be extended via a local Expo module. See: https://docs.expo.dev/guides/expo-ui-swift-ui/extending/index.md. Confirm with the user before extending.
67
-
68
- ## useNativeState
69
-
70
- `useNativeState` creates observable state that updates synchronously on the UI thread via worklets, enabling immediate native state changes without waiting for a React render cycle. Requires `react-native-worklets` — without it updates still go through React and flickering remains. Best for real-time interactions where synchronous updates matter, e.g. a text field that masks or formats input as the user types.
71
-
72
- - `ObservableState.value` is readable/writable from worklets; `onChange` fires a worklet listener on state change.
73
- - Docs — https://docs.expo.dev/versions/latest/sdk/ui/swift-ui/usenativestate/index.md
@@ -1,104 +0,0 @@
1
- # Universal `@expo/ui` components
2
-
3
- > Requires Expo SDK 56+.
4
-
5
- Universal components are a single-API layer over the platform-native UI toolkits: Jetpack Compose on Android, SwiftUI on iOS, and `react-native-web` / `react-dom` on web. You write one component tree that runs unmodified on all three platforms while keeping a native look and feel — no `.ios.tsx` / `.android.tsx` split.
6
-
7
- ## Usage
8
-
9
- Import everything, including `Host`, from the package root (`@expo/ui`). Every tree must be wrapped in `Host`.
10
-
11
- ```tsx
12
- import { Host, Column, Button, Text } from '@expo/ui';
13
-
14
- <Host matchContents>
15
- <Column>
16
- <Text>Hello</Text>
17
- <Button onPress={() => alert('Pressed!')}>Press me</Button>
18
- </Column>
19
- </Host>;
20
- ```
21
-
22
- ## Components
23
-
24
- | Category | Components |
25
- |----------|------------|
26
- | Container | `Host` (required root wrapper) |
27
- | Layout | `Column`, `Row`, `Spacer`, `ScrollView` |
28
- | Display | `Text`, `Icon` |
29
- | Controls | `Button`, `Switch`, `Checkbox`, `Slider`, `TextInput`, `Picker` |
30
- | Disclosure & presentation | `BottomSheet`, `Collapsible` |
31
- | Collections & forms | `List` (with `ListItem`), `FieldGroup` |
32
-
33
- > **`List` is not suitable for large lists.** Each `ListItem` is a JSX node processed on the JS thread — for large datasets this causes noticeable slowdowns.
34
-
35
- ## TextInput and useNativeState
36
-
37
- `TextInput` from `@expo/ui` is **not like React Native's TextInput** — its `value` and `selection` props take an `ObservableState` object (from `useNativeState`), not a plain string. This is what enables synchronous, flicker-free updates: when the user types, `onChangeText` runs as a worklet on the UI thread and writes directly to `value` without a React render cycle.
38
-
39
- Requires `react-native-worklets`. Without it the worklet directive has no effect and flickering remains.
40
-
41
- ```tsx
42
- import { Host, TextInput, useNativeState } from '@expo/ui';
43
- import { useCallback } from 'react';
44
-
45
- export default function MyInput() {
46
- const text = useNativeState('');
47
-
48
- const handleChangeText = useCallback((value: string) => {
49
- 'worklet';
50
- // transform synchronously on the UI thread — no React re-render
51
- text.value = value === 'Hello' ? 'World' : value;
52
- }, [text]);
53
-
54
- return (
55
- <Host matchContents>
56
- <TextInput value={text} onChangeText={handleChangeText} placeholder="Type here" />
57
- </Host>
58
- );
59
- }
60
- ```
61
-
62
- Docs — https://docs.expo.dev/versions/latest/sdk/ui/universal/textinput/index.md
63
-
64
- ## BottomSheet
65
-
66
- `BottomSheet` is a universal slide-up sheet. Control it with `isPresented` / `onDismiss` — **not** `isOpen`, `isOpened`, `onIsOpenedChange`, or `onChange` (those belong to other sheet APIs; the universal `BottomSheet` does not accept them). `snapPoints` is optional and accepts `'half'`, `'full'`, `{ fraction }`, or `{ height }`; when omitted the sheet auto-sizes to its content.
67
-
68
- ```tsx
69
- import { Host, BottomSheet, Column, Button, Text } from '@expo/ui';
70
- import { useState } from 'react';
71
-
72
- export default function MapScreen() {
73
- const [isOpen, setIsOpen] = useState(false);
74
-
75
- return (
76
- <Host>
77
- <Button onPress={() => setIsOpen(true)}>Show details</Button>
78
- <BottomSheet
79
- isPresented={isOpen}
80
- onDismiss={() => setIsOpen(false)}
81
- snapPoints={['half', 'full']}
82
- >
83
- <Column>
84
- <Text>Sheet content</Text>
85
- <Button onPress={() => setIsOpen(false)}>Close</Button>
86
- </Column>
87
- </BottomSheet>
88
- </Host>
89
- );
90
- }
91
- ```
92
-
93
- > **Don't confuse the universal `BottomSheet` with the drop-in `@gorhom/bottom-sheet` replacement** (`@expo/ui/community/bottom-sheet`). They are different components with different APIs. Use the universal one when building new UI; use the drop-in only when migrating an existing `@gorhom/bottom-sheet` integration. See `./drop-in-replacements.md`.
94
-
95
- ## Confirming the API
96
-
97
- `@expo/ui` is versioned with the Expo SDK (e.g. `56.0.x` for SDK 56) and its API can change between SDK versions, so the **installed package's TypeScript types (`.d.ts`) are the most reliable source of truth** — they match the version in your project, while the docs track latest. Read the relevant component's `.d.ts` from the installed `@expo/ui` package in `node_modules`. Use the docs as the human-readable reference:
98
-
99
- - Overview — https://docs.expo.dev/versions/latest/sdk/ui/universal/index.md
100
- - Per component — https://docs.expo.dev/versions/latest/sdk/ui/universal/{component-name}/index.md
101
-
102
- ## When to drop down to a platform-specific layer
103
-
104
- Choose universal components whenever they cover the requirement. Drop down to `@expo/ui/swift-ui` or `@expo/ui/jetpack-compose` only when the universal API doesn't expose the component, modifier, or platform-specific behavior you need — accepting the per-platform file split that requires. See `./swift-ui.md` and `./jetpack-compose.md`.
@@ -1,193 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * List available @expo/ui components and modifiers installed in a project.
4
- *
5
- * Usage:
6
- * node list-components.js <project-path> [--docs]
7
- *
8
- * --docs Include a one-line JSDoc description per modifier.
9
- * Omit (default) for a compact names-only list that consumes fewer tokens.
10
- *
11
- * Output goes to stdout. Redirect or capture it to inject into an agent prompt.
12
- */
13
-
14
- 'use strict';
15
-
16
- const fs = require('fs');
17
- const path = require('path');
18
-
19
- const projectPath = process.argv[2];
20
- const withDocs = process.argv.includes('--docs');
21
-
22
- if (!projectPath) {
23
- console.error('Usage: node list-components.js <project-path> [--docs]');
24
- process.exit(1);
25
- }
26
-
27
- const pkgRoot = path.join(projectPath, 'node_modules', '@expo', 'ui');
28
- if (!fs.existsSync(pkgRoot)) {
29
- console.error(`@expo/ui not found in ${projectPath}/node_modules`);
30
- process.exit(1);
31
- }
32
-
33
- // Read installed version from package.json
34
- let version = 'unknown';
35
- try {
36
- const pkg = JSON.parse(fs.readFileSync(path.join(pkgRoot, 'package.json'), 'utf8'));
37
- version = pkg.version || 'unknown';
38
- } catch (_) {}
39
-
40
- // ---------------------------------------------------------------------------
41
- // Component extraction — parse `export * from './Name'` in an index.d.ts
42
- // ---------------------------------------------------------------------------
43
- // TypeScript type names that are not components — skip anything matching these suffixes
44
- const TYPE_SUFFIX = /(?:Props|Ref|Handle|Params|Config|Options|Type|Types|Value|Values|Colors|Style|Styles|Event|Events|Alignment|Animation|Spec)$/;
45
-
46
- function extractComponents(indexFile) {
47
- if (!fs.existsSync(indexFile)) return [];
48
- const src = fs.readFileSync(indexFile, 'utf8');
49
- const names = [];
50
- for (const line of src.split('\n')) {
51
- // export * from './ComponentName' or export * from './ComponentName/index'
52
- const m = line.match(/^export \* from ['"]\.\/([^/'"]+)/);
53
- if (m) {
54
- const name = m[1];
55
- // Skip non-component re-exports (types, utils, state internals)
56
- if (/^(types|utils|index|State|hooks|colors|layout-types|MaterialSymbols)/.test(name)) continue;
57
- if (TYPE_SUFFIX.test(name)) continue;
58
- names.push(name);
59
- }
60
- // export { Name, ... } from './Something' — pick up named re-exports too
61
- const n = line.match(/^export \{([^}]+)\}/);
62
- if (n) {
63
- for (const part of n[1].split(',')) {
64
- // Skip `type Foo` re-exports
65
- if (/^\s*type\s/.test(part)) continue;
66
- const id = part.trim().split(/\s+as\s+/)[0].trim();
67
- if (id && /^[A-Z]/.test(id) && !TYPE_SUFFIX.test(id)) names.push(id);
68
- }
69
- }
70
- }
71
- return [...new Set(names)].sort();
72
- }
73
-
74
- // ---------------------------------------------------------------------------
75
- // Modifier extraction — parse `export declare const/function <name>` in
76
- // a flat modifiers/index.d.ts, optionally with the preceding JSDoc summary.
77
- // ---------------------------------------------------------------------------
78
- function extractModifiers(modifiersFile) {
79
- if (!fs.existsSync(modifiersFile)) return [];
80
- const src = fs.readFileSync(modifiersFile, 'utf8');
81
- const lines = src.split('\n');
82
- const results = [];
83
- const seen = new Set();
84
-
85
- for (let i = 0; i < lines.length; i++) {
86
- const line = lines[i];
87
- const m = line.match(/^export declare (?:const|function) ([a-zA-Z_][a-zA-Z0-9_]*)/);
88
- if (!m) continue;
89
- const name = m[1];
90
- // Skip type-only helpers and internal symbols
91
- if (/^(is|filter|create|type|export)/.test(name) && name !== 'frame') continue;
92
- if (seen.has(name)) continue;
93
- seen.add(name);
94
-
95
- if (!withDocs) {
96
- results.push({ name });
97
- continue;
98
- }
99
-
100
- // Find /** that opens the JSDoc block immediately preceding this export,
101
- // then scan forward through the block for the first plain-prose summary.
102
- let jsdocStart = -1;
103
- for (let j = i - 1; j >= 0; j--) {
104
- const jl = lines[j].trim();
105
- if (jl === '/**') { jsdocStart = j; break; }
106
- if (jl !== '' && jl !== '*/' && !jl.startsWith('*')) break;
107
- }
108
-
109
- let summary = '';
110
- let deprecated = false;
111
- if (jsdocStart >= 0) {
112
- let inCodeBlock = false;
113
- for (let k = jsdocStart + 1; k < i; k++) {
114
- const kl = lines[k].trim();
115
- if (kl.startsWith('* ```')) { inCodeBlock = !inCodeBlock; continue; }
116
- if (inCodeBlock) continue;
117
- // Check @deprecated anywhere in the block (may appear after @param)
118
- if (kl.startsWith('* @deprecated')) { deprecated = true; continue; }
119
- // Extract summary from opening prose only — stop at first non-deprecated tag
120
- if (!summary) {
121
- if (kl.startsWith('* @')) continue; // skip tags while looking for prose
122
- if (kl === '*/' || kl === '/**' || kl === '*') continue;
123
- if (kl.startsWith('* ')) {
124
- const text = kl.slice(2).trim();
125
- if (!text.startsWith('-') && !text.startsWith('<')) {
126
- summary = text.replace(/\.$/, '');
127
- }
128
- }
129
- }
130
- }
131
- }
132
- results.push({ name, summary, deprecated });
133
- }
134
-
135
- return results;
136
- }
137
-
138
- // ---------------------------------------------------------------------------
139
- // Format helpers
140
- // ---------------------------------------------------------------------------
141
- function formatNames(names) {
142
- return names.join(', ');
143
- }
144
-
145
- function formatModifiers(mods) {
146
- if (!withDocs) return mods.map(m => m.name).join(', ');
147
- const lines = [];
148
- for (const m of mods) {
149
- const dep = m.deprecated ? ' [deprecated]' : '';
150
- const desc = m.summary ? ` — ${m.summary}` : '';
151
- lines.push(` ${m.name}${dep}${desc}`);
152
- }
153
- return lines.join('\n');
154
- }
155
-
156
- // ---------------------------------------------------------------------------
157
- // Main
158
- // ---------------------------------------------------------------------------
159
- const buildRoot = path.join(pkgRoot, 'build');
160
-
161
- // Universal
162
- const universalComponents = extractComponents(path.join(buildRoot, 'universal', 'index.d.ts'));
163
-
164
- // Swift-UI (iOS only)
165
- const swiftuiComponents = extractComponents(path.join(buildRoot, 'swift-ui', 'index.d.ts'));
166
- const swiftuiModifiers = extractModifiers(path.join(buildRoot, 'swift-ui', 'modifiers', 'index.d.ts'));
167
-
168
- // Jetpack Compose (Android only)
169
- const composeComponents = extractComponents(path.join(buildRoot, 'jetpack-compose', 'index.d.ts'));
170
- const composeModifiers = extractModifiers(path.join(buildRoot, 'jetpack-compose', 'modifiers', 'index.d.ts'));
171
-
172
- const docsNote = withDocs ? ' (with descriptions)' : ' (names only — run with --docs for descriptions)';
173
- console.log(`@expo/ui ${version}${docsNote}\n`);
174
-
175
- console.log(`@expo/ui — universal (iOS + Android + web)`);
176
- console.log(` Components: ${formatNames(universalComponents)}\n`);
177
-
178
- console.log(`@expo/ui/swift-ui — iOS ONLY (crashes on Android)`);
179
- console.log(` Components: ${formatNames(swiftuiComponents)}`);
180
- if (withDocs) {
181
- console.log(` Modifiers:\n${formatModifiers(swiftuiModifiers)}`);
182
- } else {
183
- console.log(` Modifiers: ${formatModifiers(swiftuiModifiers)}`);
184
- }
185
- console.log();
186
-
187
- console.log(`@expo/ui/jetpack-compose — Android ONLY (crashes on iOS)`);
188
- console.log(` Components: ${formatNames(composeComponents)}`);
189
- if (withDocs) {
190
- console.log(` Modifiers:\n${formatModifiers(composeModifiers)}`);
191
- } else {
192
- console.log(` Modifiers: ${formatModifiers(composeModifiers)}`);
193
- }
@@ -1,150 +0,0 @@
1
- ---
2
- name: expo-upgrade
3
- description: Framework (OSS). Guidelines for upgrading Expo SDK versions and fixing dependency issues
4
- version: 1.0.0
5
- license: MIT
6
- ---
7
-
8
- ## References
9
-
10
- - ./references/react-19.md -- SDK +54: React 19 changes (useContext → use, Context.Provider → Context, forwardRef removal)
11
- - ./references/new-architecture.md -- SDK +53: New Architecture migration guide
12
- - ./references/react-compiler.md -- SDK +54: React Compiler setup and migration guide
13
- - ./references/native-tabs.md -- SDK +55: Native tabs changes (Icon/Label/Badge now accessed via NativeTabs.Trigger.\*)
14
- - ./references/expo-av-to-audio.md -- SDK +55: Migrate audio playback and recording from expo-av to expo-audio
15
- - ./references/expo-av-to-video.md -- SDK +55: Migrate video playback from expo-av to expo-video
16
- - ./references/react-navigation-to-expo-router.md -- SDK +56: Migrate `@react-navigation/*` imports to `expo-router` entry points (codemod + manual mapping)
17
-
18
- ## Beta/Preview Releases
19
-
20
- Beta versions use `.preview` suffix (e.g., `55.0.0-preview.2`), published under `@next` tag.
21
-
22
- Check if latest is beta: https://exp.host/--/api/v2/versions (look for `-preview` in `expoVersion`)
23
-
24
- ```bash
25
- npx expo install expo@next --fix # install beta
26
- ```
27
-
28
- ## Step-by-Step Upgrade Process
29
-
30
- > If upgrading from SDK 55 or earlier, skip SDK 56 and upgrade directly to SDK 57. Don't use `expo@57.0.8` or below. SDK 55 with Hermes V1 enabled, SDK 56, and older SDK 57 releases contain a Hermes V1 memory regression that can drastically increase memory usage when using `react-native-worklets` or `react-native-reanimated`.
31
-
32
- 1. Upgrade Expo and dependencies
33
-
34
- ```bash
35
- npx expo install expo@latest
36
- npx expo install --fix
37
- ```
38
-
39
- 2. Run diagnostics: `npx expo-doctor`
40
-
41
- 3. Clear caches and reinstall
42
-
43
- ```bash
44
- npx expo export -p ios --clear
45
- rm -rf node_modules .expo
46
- watchman watch-del-all
47
- ```
48
-
49
- ## Breaking Changes Checklist
50
-
51
- - Check for removed APIs in release notes
52
- - Update import paths for moved modules
53
- - Review native module changes requiring prebuild
54
- - Test all camera, audio, and video features
55
- - Verify navigation still works correctly
56
-
57
- ## Prebuild for Native Changes
58
-
59
- **First check if `ios/` and `android/` directories exist in the project.** If neither directory exists, the project uses Continuous Native Generation (CNG) and native projects are regenerated at build time — skip this section and "Clear caches for bare workflow" entirely.
60
-
61
- If upgrading requires native changes:
62
-
63
- ```bash
64
- npx expo prebuild --clean
65
- ```
66
-
67
- This regenerates the `ios` and `android` directories. Ensure the project is not a bare workflow app before running this command.
68
-
69
- ## Clear caches for bare workflow
70
-
71
- These steps only apply when `ios/` and/or `android/` directories exist in the project:
72
-
73
- - Clear the cocoapods cache for iOS: `cd ios && pod install --repo-update`
74
- - Clear derived data for Xcode: `npx expo run:ios --no-build-cache`
75
- - Clear the Gradle cache for Android: `cd android && ./gradlew clean`
76
-
77
- ## Housekeeping
78
-
79
- - Review release notes for the target SDK version at https://expo.dev/changelog
80
- - Update versioned docs links in agent instruction files (`AGENTS.md`). The default template links to `https://docs.expo.dev/versions/v<version>/`. Search for `docs.expo.dev/versions/` and bump each link to the new SDK version.
81
- - If using Expo SDK 54 or later, ensure react-native-worklets is installed — this is required for react-native-reanimated to work.
82
- - Enable React Compiler in SDK 54+ by adding `"experiments": { "reactCompiler": true }` to app.json — it's stable and recommended
83
- - Delete sdkVersion from `app.json` to let Expo manage it automatically
84
- - Review formerly implicit packages such as `@babel/core`, `babel-preset-expo`, and `expo-constants` individually instead of removing them wholesale. Keep any package that an installed dependency declares as a required peer.
85
- - Keep `expo-constants` as a direct dependency whenever `expo-router` is installed. Expo Router imports it and declares it as a required peer; relying on a transitive copy can break native autolinking outside Expo Go.
86
- - After removing any dependency, immediately run `npx expo-doctor` and restore anything it reports as a missing required peer.
87
- - If the babel.config.js only contains 'babel-preset-expo', delete the file
88
- - If the metro.config.js only contains expo defaults, delete the file
89
-
90
- ## Deprecated Packages
91
-
92
- | Old Package | Replacement |
93
- | -------------------- | ---------------------------------------------------- |
94
- | `expo-av` | `expo-audio` and `expo-video` |
95
- | `expo-permissions` | Individual package permission APIs |
96
- | `@expo/vector-icons` | `expo-symbols` (for SF Symbols) |
97
- | `AsyncStorage` | `expo-sqlite/localStorage/install` |
98
- | `expo-app-loading` | `expo-splash-screen` |
99
- | expo-linear-gradient | experimental_backgroundImage + CSS gradients in View |
100
-
101
- When migrating deprecated packages, update all code usage before removing the old package. For expo-av, consult the migration references to convert Audio.Sound to useAudioPlayer, Audio.Recording to useAudioRecorder, and Video components to VideoView with useVideoPlayer.
102
-
103
- ## expo.install.exclude
104
-
105
- Check if package.json has excluded packages:
106
-
107
- ```json
108
- {
109
- "expo": { "install": { "exclude": ["react-native-reanimated"] } }
110
- }
111
- ```
112
-
113
- Exclusions are often workarounds that may no longer be needed after upgrading. Review each one.
114
-
115
- ## Removing patches
116
-
117
- Check if there are any outdated patches in the `patches/` directory. Remove them if they are no longer needed.
118
-
119
- ## Postcss
120
-
121
- - `autoprefixer` isn't needed in SDK +53. Remove it from dependencies and check `postcss.config.js` or `postcss.config.mjs` to remove it from the plugins list.
122
- - Use `postcss.config.mjs` in SDK +53.
123
-
124
- ## Metro
125
-
126
- Remove redundant metro config options:
127
-
128
- - resolver.unstable_enablePackageExports is enabled by default in SDK +53.
129
- - `experimentalImportSupport` is enabled by default in SDK +54.
130
- - `EXPO_USE_FAST_RESOLVER=1` is removed in SDK +54.
131
- - cjs and mjs extensions are supported by default in SDK +50.
132
- - Expo webpack is deprecated, migrate to [Expo Router and Metro web](https://docs.expo.dev/router/migrate/from-expo-webpack/).
133
-
134
- ## Hermes engine v1
135
-
136
- Hermes V1 is the default on SDK 56 and later. SDK 55 apps using Hermes V1, all SDK 56 apps, and SDK 57 apps before `expo@57.0.9` may encounter a memory regression when importing `react-native-worklets` or `react-native-reanimated`. Upgrade directly to SDK 57 and `expo@57.0.9` or later. Do not recommend Worklets Bundle Mode as a production workaround; it is unsupported and experimental and may not work as expected.
137
-
138
- Do not guide users to opt in to or out of Hermes V1. Changing the Hermes version from the SDK default is unsupported and has significant build and dependency-management caveats.
139
-
140
- ## New Architecture
141
-
142
- The new architecture is enabled by default, the app.json field `"newArchEnabled": true` is no longer needed as it's the default. Expo Go only supports the new architecture as of SDK +53.
143
-
144
- ## Submitting Feedback
145
- If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
146
- ```bash
147
- npx --yes submit-expo-feedback@latest --category skills --subject "expo-upgrade" "<actionable feedback>"
148
- ```
149
- Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
150
- If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
@@ -1,4 +0,0 @@
1
- interface:
2
- display_name: "Expo Upgrade"
3
- short_description: "Upgrade Expo SDKs, fix dependencies, adopt React 19 / React Compiler, and migrate deprecated Expo packages"
4
- default_prompt: "Use $expo-upgrade to upgrade an Expo SDK, run diagnostics, fix dependency conflicts, decide whether prebuild/cache clearing applies, and migrate away from deprecated Expo packages."
@@ -1,132 +0,0 @@
1
- # Migrating from expo-av to expo-audio
2
-
3
- ## Imports
4
-
5
- ```tsx
6
- // Before
7
- import { Audio } from 'expo-av';
8
-
9
- // After
10
- import { useAudioPlayer, useAudioRecorder, RecordingPresets, AudioModule, setAudioModeAsync } from 'expo-audio';
11
- ```
12
-
13
- ## Audio Playback
14
-
15
- ### Before (expo-av)
16
-
17
- ```tsx
18
- const [sound, setSound] = useState<Audio.Sound>();
19
-
20
- async function playSound() {
21
- const { sound } = await Audio.Sound.createAsync(require('./audio.mp3'));
22
- setSound(sound);
23
- await sound.playAsync();
24
- }
25
-
26
- useEffect(() => {
27
- return sound ? () => { sound.unloadAsync(); } : undefined;
28
- }, [sound]);
29
- ```
30
-
31
- ### After (expo-audio)
32
-
33
- ```tsx
34
- const player = useAudioPlayer(require('./audio.mp3'));
35
-
36
- // Play
37
- player.play();
38
- ```
39
-
40
- ## Audio Recording
41
-
42
- ### Before (expo-av)
43
-
44
- ```tsx
45
- const [recording, setRecording] = useState<Audio.Recording>();
46
-
47
- async function startRecording() {
48
- await Audio.requestPermissionsAsync();
49
- await Audio.setAudioModeAsync({ allowsRecordingIOS: true, playsInSilentModeIOS: true });
50
- const { recording } = await Audio.Recording.createAsync(Audio.RecordingOptionsPresets.HIGH_QUALITY);
51
- setRecording(recording);
52
- }
53
-
54
- async function stopRecording() {
55
- await recording?.stopAndUnloadAsync();
56
- const uri = recording?.getURI();
57
- }
58
- ```
59
-
60
- ### After (expo-audio)
61
-
62
- ```tsx
63
- const recorder = useAudioRecorder(RecordingPresets.HIGH_QUALITY);
64
-
65
- async function startRecording() {
66
- await AudioModule.requestRecordingPermissionsAsync();
67
- await recorder.prepareToRecordAsync();
68
- recorder.record();
69
- }
70
-
71
- async function stopRecording() {
72
- await recorder.stop();
73
- const uri = recorder.uri;
74
- }
75
- ```
76
-
77
- ## Audio Mode
78
-
79
- ### Before (expo-av)
80
-
81
- ```tsx
82
- await Audio.setAudioModeAsync({
83
- allowsRecordingIOS: true,
84
- playsInSilentModeIOS: true,
85
- staysActiveInBackground: true,
86
- interruptionModeIOS: InterruptionModeIOS.DoNotMix,
87
- });
88
- ```
89
-
90
- ### After (expo-audio)
91
-
92
- ```tsx
93
- await setAudioModeAsync({
94
- playsInSilentMode: true,
95
- shouldPlayInBackground: true,
96
- interruptionMode: 'doNotMix',
97
- });
98
- ```
99
-
100
- ## API Mapping
101
-
102
- | expo-av | expo-audio |
103
- |---------|------------|
104
- | `Audio.Sound.createAsync()` | `useAudioPlayer(source)` |
105
- | `sound.playAsync()` | `player.play()` |
106
- | `sound.pauseAsync()` | `player.pause()` |
107
- | `sound.setPositionAsync(ms)` | `player.seekTo(seconds)` |
108
- | `sound.setVolumeAsync(vol)` | `player.volume = vol` |
109
- | `sound.setRateAsync(rate)` | `player.playbackRate = rate` |
110
- | `sound.setIsLoopingAsync(loop)` | `player.loop = loop` |
111
- | `sound.unloadAsync()` | Automatic via hook |
112
- | `playbackStatus.positionMillis` | `player.currentTime` (seconds) |
113
- | `playbackStatus.durationMillis` | `player.duration` (seconds) |
114
- | `playbackStatus.isPlaying` | `player.playing` |
115
- | `Audio.Recording.createAsync()` | `useAudioRecorder(preset)` |
116
- | `Audio.RecordingOptionsPresets.*` | `RecordingPresets.*` |
117
- | `recording.stopAndUnloadAsync()` | `recorder.stop()` |
118
- | `recording.getURI()` | `recorder.uri` |
119
- | `Audio.requestPermissionsAsync()` | `AudioModule.requestRecordingPermissionsAsync()` |
120
-
121
- ## Key Differences
122
-
123
- - **No auto-reset on finish**: After `play()` completes, the player stays paused at the end. To replay, call `player.seekTo(0)` then `play()`
124
- - **Time in seconds**: expo-audio uses seconds, not milliseconds (matching web standards)
125
- - **Immediate loading**: Audio loads immediately when the hook mounts—no explicit preloading needed
126
- - **Automatic cleanup**: No need to call `unloadAsync()`, hooks handle resource cleanup on unmount
127
- - **Multiple players**: Create multiple `useAudioPlayer` instances and store them—all load immediately
128
- - **Direct property access**: Set volume, rate, loop directly on the player object (`player.volume = 0.5`)
129
-
130
- ## API Reference
131
-
132
- https://docs.expo.dev/versions/latest/sdk/audio/