opencodekit 0.15.4 → 0.15.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 (319) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/template/.opencode/command/cloudflare.md +70 -0
  3. package/dist/template/.opencode/package.json +1 -1
  4. package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
  5. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  6. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  7. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  8. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  9. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  10. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  11. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  12. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  13. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  14. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  15. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  16. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  17. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  18. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  19. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  20. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  21. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  22. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  23. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  24. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  25. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  26. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  27. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  28. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  29. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  30. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  31. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  32. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  33. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  34. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  35. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  36. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  37. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  38. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  39. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  40. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  41. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  42. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  43. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  44. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  45. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  46. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  47. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  48. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  49. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  50. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  51. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  52. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  53. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  54. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  55. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  56. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  57. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  58. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  59. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  60. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  61. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  62. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  63. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  64. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  65. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  66. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  67. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  68. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  69. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  70. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  71. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  72. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  73. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  74. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  75. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  76. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  77. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  78. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  79. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  80. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  81. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  82. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  83. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  84. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  85. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  86. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  87. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  88. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  89. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  90. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  91. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  92. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  93. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  94. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  95. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  96. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  97. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  98. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  99. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  100. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  101. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  102. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  103. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  104. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  105. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  106. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  107. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  108. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  109. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  110. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  111. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  112. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  113. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  114. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  115. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  116. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  117. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  118. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  119. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  120. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  121. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  122. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  123. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  124. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  125. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  126. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  127. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  128. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  129. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  130. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  131. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  132. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  133. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  134. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  135. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  136. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  137. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  138. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  139. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  140. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  141. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  142. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  143. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  144. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  145. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  146. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  147. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  148. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  149. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  150. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  151. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  152. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  153. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  154. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  155. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  156. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  157. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  158. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  159. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  160. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  261. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  262. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  263. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
  264. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  265. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  266. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  267. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  268. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  269. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  270. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  271. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  272. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  273. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  274. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  275. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  276. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  277. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  278. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  279. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  280. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  281. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  282. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  283. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  284. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  285. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  286. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  287. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  288. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  289. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  290. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  291. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  292. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  293. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  294. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  295. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  296. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  297. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  298. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  299. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  300. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  301. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  302. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  303. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  304. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  305. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  306. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  307. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  308. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  309. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  310. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  311. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  312. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  313. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  314. package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
  315. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  316. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
  317. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  318. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
  319. package/package.json +1 -1
@@ -0,0 +1,91 @@
1
+ # Cloudflare Workers Smart Placement
2
+
3
+ Automatic workload placement optimization to minimize latency by running Workers closer to backend infrastructure rather than end users.
4
+
5
+ ## Core Concept
6
+
7
+ Smart Placement automatically analyzes Worker request duration across Cloudflare's global network and intelligently routes requests to optimal data center locations. Instead of defaulting to the location closest to the end user, Smart Placement can forward requests to locations closer to backend infrastructure when this reduces overall request duration.
8
+
9
+ ### When to Use
10
+
11
+ **Enable Smart Placement when:**
12
+ - Worker makes multiple round trips to backend services/databases
13
+ - Backend infrastructure is geographically concentrated
14
+ - Request duration dominated by backend latency rather than network latency from user
15
+ - Running backend logic in Workers (APIs, data aggregation, SSR with DB calls)
16
+
17
+ **Do NOT enable for:**
18
+ - Workers serving only static content or cached responses
19
+ - Workers without significant backend communication
20
+ - Pure edge logic (auth checks, redirects, simple transformations)
21
+ - Workers without fetch event handlers
22
+
23
+ ### Key Architecture Pattern
24
+
25
+ **Recommended:** Split full-stack applications into separate Workers:
26
+ ```
27
+ User → Frontend Worker (at edge, close to user)
28
+ ↓ Service Binding
29
+ Backend Worker (Smart Placement enabled, close to DB/API)
30
+
31
+ Database/Backend Service
32
+ ```
33
+
34
+ This maintains fast, reactive frontends while optimizing backend latency.
35
+
36
+ ## Quick Start
37
+
38
+ ```toml
39
+ # wrangler.toml
40
+ [placement]
41
+ mode = "smart"
42
+ hint = "wnam" # Optional: West North America
43
+ ```
44
+
45
+ Deploy and wait 15 minutes for analysis. Check status via API or dashboard metrics.
46
+
47
+ ## Requirements
48
+
49
+ - Wrangler 2.20.0+
50
+ - Analysis time: Up to 15 minutes after enabling
51
+ - Traffic requirements: Consistent traffic from multiple global locations
52
+ - Available on all Workers plans (Free, Paid, Enterprise)
53
+
54
+ ## Placement Status Values
55
+
56
+ ```typescript
57
+ type PlacementStatus =
58
+ | undefined // Not yet analyzed
59
+ | 'SUCCESS' // Successfully optimized
60
+ | 'INSUFFICIENT_INVOCATIONS' // Not enough traffic
61
+ | 'UNSUPPORTED_APPLICATION'; // Made Worker slower (reverted)
62
+ ```
63
+
64
+ ## CLI Commands
65
+
66
+ ```bash
67
+ # Deploy with Smart Placement
68
+ wrangler deploy
69
+
70
+ # Check placement status
71
+ curl -H "Authorization: Bearer $TOKEN" \
72
+ https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/workers/services/$WORKER_NAME \
73
+ | jq .result.placement_status
74
+
75
+ # Monitor
76
+ wrangler tail your-worker-name --header cf-placement
77
+ ```
78
+
79
+ ## In This Reference
80
+
81
+ - [configuration.md](./configuration.md) - wrangler.toml setup, placement hints, dashboard config
82
+ - [api.md](./api.md) - Placement Status API, cf-placement header, monitoring
83
+ - [patterns.md](./patterns.md) - Frontend/backend split, database workers, SSR patterns
84
+ - [gotchas.md](./gotchas.md) - Troubleshooting INSUFFICIENT_INVOCATIONS, performance issues
85
+
86
+ ## See Also
87
+
88
+ - [workers](../workers/) - Worker runtime and fetch handlers
89
+ - [d1](../d1/) - D1 database that benefits from Smart Placement
90
+ - [durable-objects](../durable-objects/) - Durable Objects with backend logic
91
+ - [bindings](../bindings/) - Service bindings for frontend/backend split
@@ -0,0 +1,139 @@
1
+ # Smart Placement API
2
+
3
+ ## Placement Status API
4
+
5
+ Query Worker placement status via Cloudflare API:
6
+
7
+ ```bash
8
+ curl -X GET "https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/workers/services/{WORKER_NAME}" \
9
+ -H "Authorization: Bearer <TOKEN>" \
10
+ -H "Content-Type: application/json"
11
+ ```
12
+
13
+ Response includes `placement_status` field:
14
+
15
+ ```typescript
16
+ type PlacementStatus =
17
+ | undefined // Not yet analyzed
18
+ | 'SUCCESS' // Successfully optimized
19
+ | 'INSUFFICIENT_INVOCATIONS' // Not enough traffic
20
+ | 'UNSUPPORTED_APPLICATION'; // Made Worker slower (reverted)
21
+ ```
22
+
23
+ ## Status Meanings
24
+
25
+ **`undefined` (not present)**
26
+ - Worker not yet analyzed
27
+ - Always runs at default edge location closest to user
28
+
29
+ **`SUCCESS`**
30
+ - Analysis complete, Smart Placement active
31
+ - Worker runs in optimal location (may be edge or remote)
32
+
33
+ **`INSUFFICIENT_INVOCATIONS`**
34
+ - Not enough requests to make placement decision
35
+ - Requires consistent multi-region traffic
36
+ - Always runs at default edge location
37
+
38
+ **`UNSUPPORTED_APPLICATION`** (rare, <1% of Workers)
39
+ - Smart Placement made Worker slower
40
+ - Placement decision reverted
41
+ - Always runs at edge location
42
+ - Won't be re-analyzed until redeployed
43
+
44
+ ## cf-placement Header (Beta)
45
+
46
+ Smart Placement adds response header indicating routing decision:
47
+
48
+ ```typescript
49
+ // Remote placement (Smart Placement routed request)
50
+ "cf-placement: remote-LHR" // Routed to London
51
+
52
+ // Local placement (default edge routing)
53
+ "cf-placement: local-EWR" // Stayed at Newark edge
54
+ ```
55
+
56
+ Format: `{placement-type}-{IATA-code}`
57
+ - `remote-*` = Smart Placement routed to remote location
58
+ - `local-*` = Stayed at default edge location
59
+ - IATA code = nearest airport to data center
60
+
61
+ **Warning:** Beta feature, may be removed before GA.
62
+
63
+ ## Detecting Smart Placement in Code
64
+
65
+ ```typescript
66
+ export default {
67
+ async fetch(request: Request, env: Env): Promise<Response> {
68
+ const placementHeader = request.headers.get('cf-placement');
69
+
70
+ if (placementHeader?.startsWith('remote-')) {
71
+ const location = placementHeader.split('-')[1];
72
+ console.log(`Smart Placement routed to ${location}`);
73
+ } else if (placementHeader?.startsWith('local-')) {
74
+ const location = placementHeader.split('-')[1];
75
+ console.log(`Running at edge location ${location}`);
76
+ }
77
+
78
+ return new Response('OK');
79
+ }
80
+ };
81
+ ```
82
+
83
+ ## Request Duration Metrics
84
+
85
+ Available in Cloudflare dashboard when Smart Placement enabled:
86
+
87
+ **Workers & Pages → [Your Worker] → Metrics → Request Duration**
88
+
89
+ Shows histogram comparing:
90
+ - Request duration WITH Smart Placement (99% of traffic)
91
+ - Request duration WITHOUT Smart Placement (1% baseline)
92
+
93
+ **Request Duration vs Execution Duration:**
94
+ - **Request duration:** Total time from request arrival to response delivery (includes network latency)
95
+ - **Execution duration:** Time Worker code actively executing (excludes network waits)
96
+
97
+ Use request duration to measure Smart Placement impact.
98
+
99
+ ## Monitoring Commands
100
+
101
+ ```bash
102
+ # Tail Worker logs
103
+ wrangler tail your-worker-name
104
+
105
+ # Tail with filters
106
+ wrangler tail your-worker-name --status error
107
+ wrangler tail your-worker-name --header cf-placement
108
+
109
+ # Check placement status via API
110
+ curl -H "Authorization: Bearer $TOKEN" \
111
+ https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/workers/services/$WORKER_NAME \
112
+ | jq .result.placement_status
113
+ ```
114
+
115
+ ## TypeScript Types
116
+
117
+ ```typescript
118
+ type PlacementStatus =
119
+ | 'SUCCESS'
120
+ | 'INSUFFICIENT_INVOCATIONS'
121
+ | 'UNSUPPORTED_APPLICATION'
122
+ | undefined;
123
+
124
+ interface WorkerMetadata {
125
+ placement_mode?: 'smart';
126
+ placement_status?: PlacementStatus;
127
+ }
128
+
129
+ interface Env {
130
+ BACKEND_SERVICE: Fetcher;
131
+ }
132
+
133
+ export default {
134
+ async fetch(request: Request, env: Env): Promise<Response> {
135
+ const response = await env.BACKEND_SERVICE.fetch(request);
136
+ return response;
137
+ }
138
+ } satisfies ExportedHandler<Env>;
139
+ ```
@@ -0,0 +1,129 @@
1
+ # Smart Placement Configuration
2
+
3
+ ## wrangler.toml Setup
4
+
5
+ ```toml
6
+ # Basic Smart Placement
7
+ [placement]
8
+ mode = "smart"
9
+
10
+ # With placement hint (preferred region)
11
+ [placement]
12
+ mode = "smart"
13
+ hint = "wnam" # West North America
14
+ ```
15
+
16
+ ## wrangler.json/wrangler.jsonc
17
+
18
+ ```jsonc
19
+ {
20
+ "$schema": "./node_modules/wrangler/config-schema.json",
21
+ "placement": {
22
+ "mode": "smart",
23
+ "hint": "wnam" // Optional region hint
24
+ }
25
+ }
26
+ ```
27
+
28
+ ## Placement Mode Values
29
+
30
+ - `"smart"` - Enable Smart Placement optimization
31
+ - Not specified - Default behavior (run at edge closest to user)
32
+
33
+ ## Placement Hints
34
+
35
+ Optional region hints guide Smart Placement decisions:
36
+ - `"wnam"` - West North America
37
+ - `"enam"` - East North America
38
+ - `"weur"` - Western Europe
39
+ - `"eeur"` - Eastern Europe
40
+ - `"apac"` - Asia Pacific
41
+
42
+ **Note:** Hints are suggestions, not guarantees. Smart Placement makes final decision based on performance data.
43
+
44
+ ## Frontend + Backend Split Configuration
45
+
46
+ ### Frontend Worker (No Smart Placement)
47
+
48
+ ```toml
49
+ # frontend-worker/wrangler.toml
50
+ name = "frontend"
51
+ main = "frontend-worker.ts"
52
+
53
+ # No [placement] - runs at edge
54
+
55
+ [[services]]
56
+ binding = "BACKEND"
57
+ service = "backend-api"
58
+ ```
59
+
60
+ ### Backend Worker (Smart Placement Enabled)
61
+
62
+ ```toml
63
+ # backend-api/wrangler.toml
64
+ name = "backend-api"
65
+ main = "backend-worker.ts"
66
+
67
+ [placement]
68
+ mode = "smart"
69
+
70
+ [[d1_databases]]
71
+ binding = "DATABASE"
72
+ database_id = "xxx"
73
+ ```
74
+
75
+ ## Requirements & Limitations
76
+
77
+ ### Requirements
78
+ - **Wrangler version:** 2.20.0+
79
+ - **Analysis time:** Up to 15 minutes
80
+ - **Traffic requirements:** Consistent multi-location traffic
81
+ - **Workers plan:** All plans (Free, Paid, Enterprise)
82
+
83
+ ### What Smart Placement Affects
84
+ - ✅ **Affects:** `fetch` event handlers only
85
+ - ❌ **Does NOT affect:** RPC methods, named entrypoints, Workers without fetch handlers
86
+
87
+ ### Baseline Traffic
88
+ Smart Placement automatically routes 1% of requests WITHOUT optimization as baseline for performance comparison.
89
+
90
+ ## Dashboard Configuration
91
+
92
+ **Enable via Dashboard:**
93
+ 1. Navigate to **Workers & Pages** in Cloudflare dashboard
94
+ 2. Select your Worker
95
+ 3. Go to **Settings** → **General**
96
+ 4. Under **Placement**, select **Smart**
97
+ 5. Wait 15 minutes for analysis
98
+ 6. Check **Metrics** tab for request duration charts
99
+
100
+ ## TypeScript Environment Types
101
+
102
+ ```typescript
103
+ interface Env {
104
+ // Backend Worker binding (Smart Placement enabled)
105
+ BACKEND: Fetcher;
106
+ DATABASE: D1Database;
107
+ CACHE: KVNamespace;
108
+ }
109
+
110
+ export default {
111
+ async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
112
+ const data = await env.DATABASE.prepare('SELECT * FROM table').all();
113
+ return Response.json(data);
114
+ }
115
+ } satisfies ExportedHandler<Env>;
116
+ ```
117
+
118
+ ## Local Development
119
+
120
+ ```bash
121
+ # Smart Placement does NOT affect local development
122
+ wrangler dev
123
+
124
+ # Local dev always runs in single location
125
+ # Test Smart Placement by deploying to staging
126
+ wrangler deploy --env staging
127
+ ```
128
+
129
+ Smart Placement only activates in production deployments.
@@ -0,0 +1,87 @@
1
+ # Smart Placement Gotchas
2
+
3
+ ## "INSUFFICIENT_INVOCATIONS" Status
4
+
5
+ **Problem:** Not enough traffic for Smart Placement to analyze.
6
+
7
+ **Solutions:**
8
+ - Ensure Worker receives consistent global traffic
9
+ - Wait longer (analysis takes up to 15 minutes)
10
+ - Send test traffic from multiple global locations
11
+ - Check Worker has fetch event handler
12
+
13
+ ## Smart Placement Making Things Slower
14
+
15
+ **Problem:** `placement_status: "UNSUPPORTED_APPLICATION"`
16
+
17
+ **Likely Causes:**
18
+ - Worker doesn't make backend calls (runs faster at edge)
19
+ - Backend calls are cached (network latency to user more important)
20
+ - Backend service has poor global distribution
21
+
22
+ **Solutions:**
23
+ - Disable Smart Placement for this Worker
24
+ - Review whether Worker actually benefits from Smart Placement
25
+ - Consider caching strategy to reduce backend calls
26
+
27
+ ## No Request Duration Metrics
28
+
29
+ **Problem:** Request duration chart not showing in dashboard.
30
+
31
+ **Solutions:**
32
+ - Ensure Smart Placement enabled in config
33
+ - Wait 15+ minutes after deployment
34
+ - Verify Worker has sufficient traffic
35
+ - Check `placement_status` is `SUCCESS`
36
+
37
+ ## cf-placement Header Missing
38
+
39
+ **Problem:** Header not present in responses.
40
+
41
+ **Possible Causes:**
42
+ - Smart Placement not enabled
43
+ - Beta feature removed (check latest docs)
44
+ - Worker hasn't been analyzed yet
45
+
46
+ ## Monolithic Full-Stack Worker
47
+
48
+ **Problem:** Frontend and backend logic in single Worker with Smart Placement enabled.
49
+
50
+ **Impact:** Smart Placement optimizes for backend latency but hurts frontend response time to users.
51
+
52
+ **Solution:** Split into two Workers:
53
+ - Frontend Worker (no Smart Placement) - runs at edge
54
+ - Backend Worker (Smart Placement) - runs near database
55
+
56
+ ## Local Development Confusion
57
+
58
+ **Issue:** Smart Placement doesn't work in `wrangler dev`.
59
+
60
+ **Explanation:** Smart Placement only activates in production deployments, not local development.
61
+
62
+ **Solution:** Test Smart Placement in staging environment: `wrangler deploy --env staging`
63
+
64
+ ## Baseline 1% Traffic
65
+
66
+ **Note:** Smart Placement automatically routes 1% of requests WITHOUT optimization for performance comparison. This is expected behavior.
67
+
68
+ ## Analysis Time
69
+
70
+ **Issue:** Smart Placement takes up to 15 minutes after enabling to complete analysis.
71
+
72
+ **Impact:** During analysis, Worker runs at default edge location. Be patient and monitor `placement_status`.
73
+
74
+ ## Requirements
75
+
76
+ - **Wrangler 2.20.0+** required
77
+ - **Consistent multi-region traffic** needed for analysis
78
+ - **Only affects fetch handlers** - RPC methods and named entrypoints not affected
79
+
80
+ ## When NOT to Use
81
+
82
+ - Workers serving only static content or cached responses
83
+ - Workers without significant backend communication
84
+ - Pure edge logic (auth checks, redirects, simple transformations)
85
+ - Workers without fetch event handlers
86
+
87
+ These scenarios won't benefit and may perform worse with Smart Placement.
@@ -0,0 +1,135 @@
1
+ # Smart Placement Patterns
2
+
3
+ ## Backend Worker with Database Access
4
+
5
+ ```typescript
6
+ // Smart Placement runs close to database - multiple round trips benefit
7
+ export default {
8
+ async fetch(request: Request, env: Env): Promise<Response> {
9
+ const user = await env.DATABASE.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first();
10
+ const orders = await env.DATABASE.prepare('SELECT * FROM orders WHERE user_id = ?').bind(userId).all();
11
+ return Response.json({ user, orders });
12
+ }
13
+ };
14
+ ```
15
+
16
+ ```toml
17
+ name = "backend-api"; [placement]; mode = "smart"; [[d1_databases]]; binding = "DATABASE"
18
+ ```
19
+
20
+ ## Frontend + Backend Split
21
+
22
+ **Frontend (no Smart Placement):** Runs at edge for fast user response
23
+ **Backend (Smart Placement):** Runs close to database
24
+
25
+ ```typescript
26
+ // Frontend - forwards API requests to backend
27
+ export default {
28
+ async fetch(request: Request, env: Env): Promise<Response> {
29
+ if (new URL(request.url).pathname.startsWith('/api/')) return env.BACKEND.fetch(request);
30
+ return env.ASSETS.fetch(request);
31
+ }
32
+ };
33
+
34
+ // Backend - database operations
35
+ export default {
36
+ async fetch(request: Request, env: Env): Promise<Response> {
37
+ return Response.json(await env.DATABASE.prepare('SELECT * FROM table').all());
38
+ }
39
+ };
40
+ ```
41
+
42
+ ## External API Integration
43
+
44
+ ```typescript
45
+ // Smart Placement runs closer to external API - multiple calls benefit
46
+ export default {
47
+ async fetch(request: Request, env: Env): Promise<Response> {
48
+ const apiUrl = 'https://api.partner.com';
49
+ const headers = { 'Authorization': `Bearer ${env.API_KEY}` };
50
+ const [profile, transactions] = await Promise.all([
51
+ fetch(`${apiUrl}/profile`, { headers }),
52
+ fetch(`${apiUrl}/transactions`, { headers })
53
+ ]);
54
+ return Response.json({ profile: await profile.json(), transactions: await transactions.json() });
55
+ }
56
+ };
57
+ ```
58
+
59
+ ```toml
60
+ [placement]; mode = "smart"; hint = "enam" # If API in East North America
61
+ ```
62
+
63
+ ## Multi-Service Aggregation
64
+
65
+ ```typescript
66
+ // Aggregates data from multiple services in same region
67
+ export default {
68
+ async fetch(request: Request, env: Env) {
69
+ const [orders, inventory, shipping] = await Promise.all([
70
+ fetch('https://orders.internal.api'), fetch('https://inventory.internal.api'), fetch('https://shipping.internal.api')
71
+ ]);
72
+ return Response.json({ orders: await orders.json(), inventory: await inventory.json(), shipping: await shipping.json() });
73
+ }
74
+ };
75
+ ```
76
+
77
+ ## SSR with Backend Data
78
+
79
+ ```typescript
80
+ // Frontend SSR (edge) - render close to user
81
+ export default {
82
+ async fetch(request: Request, env: Env) {
83
+ const data = await env.BACKEND.fetch('/api/page-data');
84
+ return new Response(renderPage(await data.json()), { headers: { 'Content-Type': 'text/html' } });
85
+ }
86
+ };
87
+
88
+ // Backend (Smart Placement) - fetch data close to database
89
+ export default {
90
+ async fetch(request: Request, env: Env) {
91
+ return Response.json(await env.DATABASE.prepare('SELECT * FROM pages WHERE id = ?').bind(pageId).first());
92
+ }
93
+ };
94
+ ```
95
+
96
+ ## API Gateway
97
+
98
+ ```typescript
99
+ // Gateway at edge - quick auth, forward to backend
100
+ export default {
101
+ async fetch(request: Request, env: Env) {
102
+ if (!request.headers.get('Authorization')) return new Response('Unauthorized', { status: 401 });
103
+ return env.BACKEND_API.fetch(request);
104
+ }
105
+ };
106
+
107
+ // Backend with Smart Placement - heavy DB operations
108
+ export default {
109
+ async fetch(request: Request, env: Env) {
110
+ return Response.json(await performDatabaseOperations(env.DATABASE));
111
+ }
112
+ };
113
+ ```
114
+
115
+ ## Best Practices
116
+
117
+ 1. **Split Full-Stack Apps:** Frontend at edge, backend with Smart Placement
118
+ 2. **Use Service Bindings:** Connect frontend/backend Workers efficiently
119
+ 3. **Monitor Request Duration:** Compare before/after metrics
120
+ 4. **Enable for Backend Logic:** APIs, data aggregation, server-side processing
121
+ 5. **Don't Enable for Pure Edge:** Auth, redirects, static content
122
+ 6. **Test Before Production:** Deploy to staging, verify metrics
123
+ 7. **Consider Placement Hints:** Guide Smart Placement if you know backend location
124
+ 8. **Wait for Analysis:** 15+ minutes after enabling
125
+ 9. **Check Placement Status:** Verify `SUCCESS` via API
126
+ 10. **Combine with Caching:** Cache frequently accessed data
127
+
128
+ ## Anti-Patterns
129
+
130
+ ❌ **Enabling on static content Workers**
131
+ ❌ **Monolithic full-stack Worker with Smart Placement** (hurts frontend performance)
132
+ ❌ **Not monitoring placement status** after deploy
133
+
134
+ ✅ **Split architecture:** Frontend (edge) + Backend (Smart Placement)
135
+ ✅ **Verify status** via API and metrics
@@ -0,0 +1,15 @@
1
+ # Cloudflare Snippets Skill Reference
2
+
3
+ ## Description
4
+ Expert guidance for **Cloudflare Snippets ONLY** - a lightweight JavaScript-based edge logic platform for modifying HTTP requests and responses. Snippets run as part of the Ruleset Engine and are included at no additional cost on paid plans (Pro, Business, Enterprise)....
5
+
6
+ ## In This Reference
7
+
8
+ - **[configuration.md](./configuration.md)** - Setup, deployment, configuration
9
+ - **[api.md](./api.md)** - API endpoints, methods, interfaces
10
+ - **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
11
+ - **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
12
+
13
+ ## See Also
14
+
15
+ - [Cloudflare Docs](https://developers.cloudflare.com/)
@@ -0,0 +1,47 @@
1
+ ### HTTP Methods
2
+ ```javascript
3
+ request.method // GET, POST, PUT, DELETE, etc.
4
+ ```
5
+
6
+ ### Response Constructors
7
+ ```javascript
8
+ // Plain text
9
+ new Response("Hello", { status: 200 })
10
+
11
+ // JSON
12
+ Response.json({ key: "value" })
13
+
14
+ // HTML
15
+ new Response("<h1>Hi</h1>", {
16
+ headers: { "Content-Type": "text/html" }
17
+ })
18
+
19
+ // Redirect
20
+ Response.redirect("https://example.com", 301)
21
+ ```
22
+
23
+ ### Header Operations
24
+ ```javascript
25
+ // Request headers
26
+ request.headers.get("X-Header")
27
+ request.headers.has("X-Header")
28
+ request.headers.set("X-Header", "value")
29
+ request.headers.delete("X-Header")
30
+
31
+ // Response headers (must clone first)
32
+ const res = new Response(response.body, response);
33
+ res.headers.set("X-Header", "value")
34
+ res.headers.append("Set-Cookie", "value")
35
+ res.headers.delete("X-Header")
36
+ ```
37
+
38
+ ### URL Operations
39
+ ```javascript
40
+ const url = new URL(request.url);
41
+ url.hostname // "example.com"
42
+ url.pathname // "/path/to/page"
43
+ url.search // "?query=value"
44
+ url.searchParams.get("query") // "value"
45
+ ```
46
+
47
+ ### Cloudflare Pr
@@ -0,0 +1,33 @@
1
+ ## Configuration Methods
2
+
3
+ ### 1. Dashboard (GUI)
4
+ ```
5
+ 1. Go to zone → Rules → Snippets
6
+ 2. Create Snippet or select template
7
+ 3. Enter snippet name (a-z, 0-9, _ only, cannot change later)
8
+ 4. Write JavaScript code (32KB max)
9
+ 5. Configure snippet rule:
10
+ - Expression Builder or Expression Editor
11
+ - Use Ruleset Engine filter expressions
12
+ 6. Deploy or Save as Draft
13
+ ```
14
+
15
+ ### 2. API
16
+ ```bash
17
+ # Create/update snippet
18
+ curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/$SNIPPET_NAME" \
19
+ --request PUT \
20
+ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
21
+ --form "files=@example.js" \
22
+ --form "metadata={\"main_module\": \"example.js\"}"
23
+
24
+ # Create snippet rule
25
+ curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/snippet_rules" \
26
+ --request PUT \
27
+ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
28
+ --json '{
29
+ "rules": [
30
+ {
31
+ "description": "Trigger snippet on specific cookie",
32
+ "enabled": true,
33
+ "expression": "http.cookie eq
@@ -0,0 +1,21 @@
1
+ ## Best Practices
2
+
3
+ ### Performance
4
+ 1. **Keep code minimal**: 32KB limit, but aim for <10KB
5
+ 2. **Avoid blocking operations**: 5ms execution limit
6
+ 3. **Clone only when needed**: `new Request(request)` creates copy
7
+ 4. **Cache strategically**: Use `caches.default` for repeated data
8
+ 5. **Limit subrequests**: Plan-based limits (2-5)
9
+
10
+ ### Security
11
+ 1. **Validate input**: Never trust user data
12
+ 2. **Use Web Crypto API**: For cryptographic operations
13
+ 3. **Sanitize headers**: Remove sensitive information
14
+ 4. **Check bot scores**: Use `request.cf.botManagement.score`
15
+ 5. **Rate limit carefully**: Snippets run on every matching request
16
+
17
+ ### Debugging
18
+ 1. **Test in dashboard**: Use HTTP/Preview tabs
19
+ 2. **Start simple**: Test with basic logic first
20
+ 3. **Use custom headers**: Add debug headers to responses
21
+ 4.