opencodekit 0.15.3 → 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 (321) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/template/.opencode/AGENTS.md +209 -77
  3. package/dist/template/.opencode/agent/plan.md +4 -0
  4. package/dist/template/.opencode/command/cloudflare.md +70 -0
  5. package/dist/template/.opencode/package.json +1 -1
  6. package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
  7. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  8. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  9. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  10. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  11. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  12. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  13. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  14. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  15. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  16. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  17. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  18. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  19. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  20. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  21. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  22. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  23. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  24. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  25. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  26. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  27. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  28. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  29. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  30. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  31. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  32. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  33. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  34. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  35. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  36. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  37. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  38. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  39. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  40. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  41. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  42. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  43. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  44. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  45. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  46. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  47. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  48. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  49. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  50. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  51. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  52. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  53. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  54. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  55. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  56. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  57. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  58. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  59. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  60. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  61. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  62. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  63. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  64. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  65. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  66. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  67. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  68. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  69. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  70. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  71. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  72. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  73. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  74. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  75. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  76. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  77. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  78. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  79. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  80. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  81. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  82. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  83. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  84. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  85. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  86. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  87. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  88. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  89. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  90. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  91. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  92. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  93. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  94. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  95. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  96. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  97. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  98. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  99. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  100. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  101. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  102. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  103. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  104. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  105. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  106. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  107. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  108. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  109. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  110. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  111. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  112. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  113. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  114. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  115. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  116. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  117. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  118. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  119. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  120. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  121. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  122. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  123. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  124. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  125. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  126. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  127. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  128. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  129. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  130. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  131. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  132. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  133. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  134. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  135. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  136. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  137. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  138. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  139. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  140. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  141. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  142. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  143. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  144. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  145. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  146. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  147. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  148. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  149. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  150. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  151. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  152. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  153. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  154. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  155. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  156. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  157. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  158. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  159. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  160. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  261. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  262. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  263. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  264. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  265. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
  266. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  267. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  268. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  269. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  270. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  271. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  272. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  273. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  274. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  275. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  276. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  277. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  278. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  279. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  280. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  281. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  282. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  283. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  284. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  285. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  286. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  287. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  288. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  289. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  290. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  291. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  292. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  293. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  294. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  295. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  296. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  297. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  298. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  299. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  300. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  301. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  302. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  303. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  304. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  305. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  306. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  307. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  308. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  309. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  310. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  311. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  312. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  313. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  314. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  315. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  316. package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
  317. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  318. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
  319. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  320. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
  321. package/package.json +1 -1
@@ -0,0 +1,203 @@
1
+ # Cache Reserve Gotchas
2
+
3
+ ## Common Issues and Solutions
4
+
5
+ ### Issue: Assets Not Being Cached in Cache Reserve
6
+
7
+ **Diagnostics:**
8
+
9
+ ```typescript
10
+ const debugEligibility = {
11
+ checks: [
12
+ 'Verify asset is cacheable (cf-cache-status header)',
13
+ 'Check TTL >= 10 hours',
14
+ 'Confirm Content-Length header present',
15
+ 'Review Cache Rules configuration',
16
+ 'Check for Set-Cookie or Vary: * headers'
17
+ ],
18
+
19
+ tools: [
20
+ 'curl -I https://example.com/asset.jpg',
21
+ 'Check cf-cache-status header',
22
+ 'Review Cloudflare Trace output',
23
+ 'Check Logpush CacheReserveUsed field'
24
+ ]
25
+ };
26
+ ```
27
+
28
+ **Solutions:**
29
+
30
+ ```typescript
31
+ // 1. Ensure minimum TTL (10+ hours)
32
+ response.headers.set('Cache-Control', 'public, max-age=36000');
33
+
34
+ // Or via Cache Rule:
35
+ const rule = {
36
+ action_parameters: {
37
+ edge_ttl: { mode: 'override_origin', default: 36000 }
38
+ }
39
+ };
40
+
41
+ // 2. Add Content-Length
42
+ response.headers.set('Content-Length', bodySize.toString());
43
+
44
+ // 3. Remove blocking headers
45
+ response.headers.delete('Set-Cookie');
46
+ response.headers.set('Vary', 'Accept-Encoding'); // Not *
47
+ ```
48
+
49
+ ### Issue: High Class A Operations Costs
50
+
51
+ **Cause**: Frequent cache misses, short TTLs, or frequent revalidation
52
+
53
+ **Solutions:**
54
+
55
+ ```typescript
56
+ // 1. Increase TTL for stable content
57
+ const optimizedTTL = {
58
+ before: 3600, // 1 hour (not eligible)
59
+ after: 86400 // 24 hours (eligible + fewer rewrites)
60
+ };
61
+
62
+ // 2. Enable Tiered Cache (reduces direct Cache Reserve misses)
63
+
64
+ // 3. Use stale-while-revalidate (via fetch, not cache.put)
65
+ response.headers.set(
66
+ 'Cache-Control',
67
+ 'public, max-age=86400, stale-while-revalidate=86400'
68
+ );
69
+ ```
70
+
71
+ ### Issue: Purge Not Working as Expected
72
+
73
+ **Understanding purge behavior:**
74
+
75
+ ```typescript
76
+ const purgeBehavior = {
77
+ byURL: {
78
+ cacheReserve: 'Immediately removed',
79
+ edgeCache: 'Immediately removed',
80
+ cost: 'Free'
81
+ },
82
+
83
+ byTag: {
84
+ cacheReserve: 'Revalidation triggered, NOT removed',
85
+ edgeCache: 'Immediately removed',
86
+ storage: 'Continues until TTL expires',
87
+ cost: 'Storage costs continue'
88
+ }
89
+ };
90
+
91
+ // Solution: Use purge by URL for immediate removal
92
+ await purgeByURL(['https://example.com/asset.jpg']);
93
+
94
+ // Or: Disable + clear for complete removal
95
+ await disableCacheReserve(zoneId, token);
96
+ await clearAllCacheReserve(zoneId, token);
97
+ ```
98
+
99
+ ### Issue: Cache Reserve Disabled But Can't Clear
100
+
101
+ **Error**: "Cache Reserve must be OFF before clearing data"
102
+
103
+ **Solution:**
104
+
105
+ ```typescript
106
+ const clearProcess = async (zoneId: string, token: string) => {
107
+ // Step 1: Check current state
108
+ const status = await getCacheReserveStatus(zoneId, token);
109
+
110
+ // Step 2: Disable if enabled
111
+ if (status.result.value !== 'off') {
112
+ await disableCacheReserve(zoneId, token);
113
+ }
114
+
115
+ // Step 3: Wait briefly for propagation
116
+ await new Promise(resolve => setTimeout(resolve, 5000));
117
+
118
+ // Step 4: Clear data
119
+ const clearResult = await clearAllCacheReserve(zoneId, token);
120
+
121
+ // Step 5: Monitor clear progress (can take up to 24 hours)
122
+ let clearStatus;
123
+ do {
124
+ await new Promise(resolve => setTimeout(resolve, 60000));
125
+ clearStatus = await getClearStatus(zoneId, token);
126
+ } while (clearStatus.result.state === 'In-progress');
127
+ };
128
+ ```
129
+
130
+ ## Troubleshooting
131
+
132
+ ### Diagnostic Commands
133
+
134
+ ```bash
135
+ # Check Cache Reserve status
136
+ curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/cache/cache_reserve" \
137
+ -H "Authorization: Bearer $API_TOKEN" | jq
138
+
139
+ # Check asset cache status
140
+ curl -I https://example.com/asset.jpg | grep -i cache
141
+ ```
142
+
143
+ ### Common Header Patterns
144
+
145
+ ```typescript
146
+ // Successful: HIT + max-age >= 36000 + content-length present
147
+ // Not eligible: TTL < 10hrs | missing content-length | has set-cookie | vary: *
148
+ ```
149
+
150
+ ## Limits
151
+
152
+ ### Minimum Requirements Checklist
153
+
154
+ - [ ] Paid Cache Reserve plan active
155
+ - [ ] Tiered Cache enabled (strongly recommended)
156
+ - [ ] Assets cacheable per standard rules
157
+ - [ ] TTL >= 10 hours (36000 seconds)
158
+ - [ ] Content-Length header present
159
+ - [ ] No Set-Cookie header (or using private directive)
160
+ - [ ] No Vary: * header
161
+ - [ ] Not an image transformation variant
162
+
163
+ ### Key Limits
164
+
165
+ ```typescript
166
+ const limits = {
167
+ minTTL: 36000, // 10 hours in seconds
168
+ retentionDefault: 2592000, // 30 days in seconds
169
+ maxFileSize: Infinity, // Same as R2 limits
170
+ purgeClearTime: 86400000, // Up to 24 hours in milliseconds
171
+ };
172
+ ```
173
+
174
+ ### API Endpoints
175
+
176
+ ```typescript
177
+ const endpoints = {
178
+ status: 'GET /zones/:zone_id/cache/cache_reserve',
179
+ enable: 'PATCH /zones/:zone_id/cache/cache_reserve',
180
+ disable: 'PATCH /zones/:zone_id/cache/cache_reserve',
181
+ clear: 'POST /zones/:zone_id/cache/cache_reserve_clear',
182
+ clearStatus: 'GET /zones/:zone_id/cache/cache_reserve_clear',
183
+ purge: 'POST /zones/:zone_id/purge_cache',
184
+ cacheRules: 'PUT /zones/:zone_id/rulesets/phases/http_request_cache_settings/entrypoint'
185
+ };
186
+ ```
187
+
188
+ ## Additional Resources
189
+
190
+ - **Official Docs**: https://developers.cloudflare.com/cache/advanced-configuration/cache-reserve/
191
+ - **API Reference**: https://developers.cloudflare.com/api/resources/cache/subresources/cache_reserve/
192
+ - **Cache Rules**: https://developers.cloudflare.com/cache/how-to/cache-rules/
193
+ - **Workers Cache API**: https://developers.cloudflare.com/workers/runtime-apis/cache/
194
+ - **R2 Documentation**: https://developers.cloudflare.com/r2/
195
+ - **Smart Shield**: https://developers.cloudflare.com/smart-shield/
196
+ - **Tiered Cache**: https://developers.cloudflare.com/cache/how-to/tiered-cache/
197
+
198
+ ## See Also
199
+
200
+ - [README](./README.md) - Overview and core concepts
201
+ - [Configuration](./configuration.md) - Setup and Cache Rules
202
+ - [API Reference](./api.md) - Purging and monitoring
203
+ - [Patterns](./patterns.md) - Best practices and optimization
@@ -0,0 +1,180 @@
1
+ # Cache Reserve Patterns
2
+
3
+ ## Best Practices
4
+
5
+ ### 1. Always Enable Tiered Cache
6
+
7
+ ```typescript
8
+ // Cache Reserve is designed for use WITH Tiered Cache
9
+ const configuration = {
10
+ tieredCache: 'enabled', // Required for optimal performance
11
+ cacheReserve: 'enabled', // Works best with Tiered Cache
12
+
13
+ hierarchy: [
14
+ 'Lower-Tier Cache (visitor)',
15
+ 'Upper-Tier Cache (origin region)',
16
+ 'Cache Reserve (persistent)',
17
+ 'Origin'
18
+ ]
19
+ };
20
+ ```
21
+
22
+ ### 2. Set Appropriate Cache-Control Headers
23
+
24
+ ```typescript
25
+ // Origin response headers for Cache Reserve eligibility
26
+ const originHeaders = {
27
+ 'Cache-Control': 'public, max-age=86400', // 24 hours minimum 10 hours
28
+ 'Content-Length': '1024000', // Required for eligibility
29
+ 'Cache-Tag': 'images,product-123', // Optional: For purging
30
+ 'ETag': '"abc123"', // Optional: Support revalidation
31
+ 'Last-Modified': 'Wed, 21 Oct 2025 07:28:00 GMT',
32
+
33
+ // Avoid: Prevents caching
34
+ // 'Set-Cookie': 'session=xyz', // Remove or use private directive
35
+ // 'Vary': '*', // Not compatible
36
+ };
37
+ ```
38
+
39
+ ### 3. Use Cache Rules for Fine-Grained Control
40
+
41
+ ```typescript
42
+ // Different TTLs for different content types
43
+ const cacheRules = [
44
+ {
45
+ description: 'Long-term cache for immutable assets',
46
+ expression: '(http.request.uri.path matches "^/static/.*\\.[a-f0-9]{8}\\.")',
47
+ action_parameters: {
48
+ cache_reserve: { eligible: true },
49
+ edge_ttl: { mode: 'override_origin', default: 2592000 }, // 30 days
50
+ cache: true
51
+ }
52
+ },
53
+ {
54
+ description: 'Moderate cache for regular images',
55
+ expression: '(http.request.uri.path matches "\\.(jpg|png|webp)$")',
56
+ action_parameters: {
57
+ cache_reserve: { eligible: true },
58
+ edge_ttl: { mode: 'override_origin', default: 86400 }, // 24 hours
59
+ cache: true
60
+ }
61
+ },
62
+ {
63
+ description: 'Exclude API from Cache Reserve',
64
+ expression: '(http.request.uri.path matches "^/api/")',
65
+ action_parameters: { cache_reserve: { eligible: false }, cache: false }
66
+ }
67
+ ];
68
+ ```
69
+
70
+ ### 4. Ensuring Cache Reserve Eligibility in Workers
71
+
72
+ ```typescript
73
+ export default {
74
+ async fetch(request: Request, env: Env): Promise<Response> {
75
+ const response = await fetch(request);
76
+
77
+ if (response.ok) {
78
+ const headers = new Headers(response.headers);
79
+
80
+ // Set minimum 10-hour cache
81
+ headers.set('Cache-Control', 'public, max-age=36000');
82
+
83
+ // Remove Set-Cookie if present (prevents caching)
84
+ headers.delete('Set-Cookie');
85
+
86
+ // Ensure Content-Length is present
87
+ if (!headers.has('Content-Length')) {
88
+ const blob = await response.blob();
89
+ headers.set('Content-Length', blob.size.toString());
90
+
91
+ return new Response(blob, {
92
+ status: response.status,
93
+ statusText: response.statusText,
94
+ headers
95
+ });
96
+ }
97
+
98
+ return new Response(response.body, {
99
+ status: response.status,
100
+ statusText: response.statusText,
101
+ headers
102
+ });
103
+ }
104
+
105
+ return response;
106
+ }
107
+ };
108
+ ```
109
+
110
+ ### 5. Hostname Best Practices
111
+
112
+ ```typescript
113
+ // ✅ CORRECT: Use Worker's hostname for efficient caching
114
+ export default {
115
+ async fetch(request: Request, env: Env): Promise<Response> {
116
+ return await fetch(request); // Keep the Worker's hostname
117
+ }
118
+ };
119
+
120
+ // ❌ WRONG: Overriding hostname causes unnecessary DNS lookups
121
+ export default {
122
+ async fetch(request: Request, env: Env): Promise<Response> {
123
+ const url = new URL(request.url);
124
+ url.hostname = 'different-host.com'; // Avoid this!
125
+ return await fetch(url.toString());
126
+ }
127
+ };
128
+ ```
129
+
130
+ ## Architecture Patterns
131
+
132
+ ### Multi-Tier Caching + Immutable Assets
133
+
134
+ ```typescript
135
+ // Optimal: L1 (visitor) → L2 (region) → L3 (Cache Reserve) → Origin
136
+ // Each miss backfills all upstream layers
137
+
138
+ // Immutable asset optimization with content hashing
139
+ export default {
140
+ async fetch(request: Request, env: Env): Promise<Response> {
141
+ const url = new URL(request.url);
142
+ const isImmutable = /\.[a-f0-9]{8,}\.(js|css|jpg|png|woff2)$/.test(url.pathname);
143
+
144
+ const response = await fetch(request);
145
+
146
+ if (isImmutable) {
147
+ const headers = new Headers(response.headers);
148
+ headers.set('Cache-Control', 'public, max-age=31536000, immutable'); // 1 year
149
+ return new Response(response.body, { status: response.status, headers });
150
+ }
151
+
152
+ return response;
153
+ }
154
+ };
155
+ ```
156
+
157
+ ## Cost Optimization
158
+
159
+ ```typescript
160
+ // Typical savings: 50-80% reduction in origin egress
161
+ // Origin cost (AWS: $0.09/GB) vs Cache Reserve ($0.015/GB-month + $0.36/M reads)
162
+
163
+ // 1. Set appropriate TTLs
164
+ const optimizeTTL = {
165
+ tooShort: 3600, // 1 hour - not eligible
166
+ optimal: 86400, // 24 hours - reduces rewrites
167
+ tooLong: 2592000 // 30 days - use cautiously
168
+ };
169
+
170
+ // 2. Cache high-value, stable assets: images, media, fonts, archives
171
+ // 3. Exclude frequently changing: /api/, user-specific, JSON data
172
+ // 4. Note: Cache Reserve requests uncompressed from origin, compresses for visitors
173
+ ```
174
+
175
+ ## See Also
176
+
177
+ - [README](./README.md) - Overview and core concepts
178
+ - [Configuration](./configuration.md) - Setup and Cache Rules
179
+ - [API Reference](./api.md) - Purging and monitoring
180
+ - [Gotchas](./gotchas.md) - Common issues and troubleshooting
@@ -0,0 +1,16 @@
1
+ # Cloudflare Containers Skill Reference
2
+
3
+ **APPLIES TO: Cloudflare Containers ONLY - NOT general Cloudflare Workers**
4
+
5
+ Use when working with Cloudflare Containers: deploying containerized apps on Workers platform, configuring container-enabled Durable Objects, managing container lifecycle, or implementing stateful/stateless container patter...
6
+
7
+ ## In This Reference
8
+
9
+ - **[configuration.md](./configuration.md)** - Setup, deployment, configuration
10
+ - **[api.md](./api.md)** - API endpoints, methods, interfaces
11
+ - **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
12
+ - **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
13
+
14
+ ## See Also
15
+
16
+ - [Cloudflare Docs](https://developers.cloudflare.com/)
@@ -0,0 +1,43 @@
1
+ ### HTTP Requests
2
+
3
+ **Default port (recommended):**
4
+ ```typescript
5
+ // Uses defaultPort from Container class
6
+ const container = env.MY_CONTAINER.getByName("id");
7
+ const response = await container.fetch(request);
8
+ ```
9
+
10
+ **Specific port:**
11
+ ```typescript
12
+ const port = this.ctx.container.getTcpPort(8080);
13
+ const response = await port.fetch("http://container/api", {
14
+ method: "POST",
15
+ body: JSON.stringify(data)
16
+ });
17
+ ```
18
+
19
+ ### TCP Connections
20
+
21
+ ```typescript
22
+ const port = this.ctx.container.getTcpPort(8080);
23
+ const conn = port.connect('10.0.0.1:8080');
24
+ await conn.opened;
25
+
26
+ try {
27
+ if (request.body) {
28
+ await request.body.pipeTo(conn.writable);
29
+ }
30
+ return new Response(conn.readable);
31
+ } catch (err) {
32
+ return new Response("Failed to proxy", { status: 502 });
33
+ }
34
+ ```
35
+
36
+ ### WebSocket Forwarding
37
+
38
+ ```typescript
39
+ export default {
40
+ async fetch(request: Request, env: Env) {
41
+ const upgradeHeader = request.headers.get("Upgrade");
42
+ if (upgradeHeader === "websocket") {
43
+ const container = env.MY_CONTAINER.g
@@ -0,0 +1,56 @@
1
+ ## Wrangler Configuration
2
+
3
+ ### Basic Container Config
4
+
5
+ ```jsonc
6
+ {
7
+ "name": "my-worker",
8
+ "main": "src/index.ts",
9
+ "compatibility_date": "2026-01-10",
10
+ "containers": [
11
+ {
12
+ "class_name": "MyContainer",
13
+ "image": "./Dockerfile", // or path to directory with Dockerfile
14
+ "max_instances": 10
15
+ }
16
+ ],
17
+ "durable_objects": {
18
+ "bindings": [
19
+ {
20
+ "name": "MY_CONTAINER",
21
+ "class_name": "MyContainer"
22
+ }
23
+ ]
24
+ },
25
+ "migrations": [
26
+ {
27
+ "tag": "v1",
28
+ "new_sqlite_classes": ["MyContainer"] // Must use new_sqlite_classes
29
+ }
30
+ ]
31
+ }
32
+ ```
33
+
34
+ ### TOML Format
35
+
36
+ ```toml
37
+ name = "my-worker"
38
+ main = "src/index.ts"
39
+ compatibility_date = "2026-01-10"
40
+
41
+ [[containers]]
42
+ class_name = "MyContainer"
43
+ image = "./Dockerfile"
44
+ max_instances = 10
45
+
46
+ [[durable_objects.bindings]]
47
+ name = "MY_CONTAINER"
48
+ class_name = "MyContainer"
49
+
50
+ [[migrations]]
51
+ tag = "v1"
52
+ new_sqlite_classes = ["MyContainer"]
53
+ ```
54
+
55
+ Key config requirements:
56
+ - `image` - Path to Dockerfile or directory conta
@@ -0,0 +1,21 @@
1
+ ## Best Practices
2
+
3
+ 1. **Use `@cloudflare/containers` package** - Cleaner API than raw Durable Object methods
4
+
5
+ 2. **Set appropriate `sleepAfter`** - Balance resource usage vs cold start latency
6
+ - Short-lived jobs: "5m"
7
+ - Session-based: "30m" - "2h"
8
+ - Long-running services: "2h" or longer
9
+
10
+ 3. **Choose routing pattern based on use case:**
11
+ - Stateless services → `getRandom()` load balancing
12
+ - Stateful sessions → `getByName()` with session/user ID
13
+ - Short-lived jobs → Unique IDs with explicit lifecycle control
14
+
15
+ 4. **Pass secrets securely:**
16
+ - Use Worker Secrets or Secret Store, not hard-coded values
17
+ - Read KV/secrets asynchronously when starting containers
18
+ - Don't log sensitive environment variables
19
+
20
+ 5. **Design for container restarts:**
21
+ - Containers can stop after
@@ -0,0 +1,40 @@
1
+ ## Common Use Cases
2
+
3
+ ### Stateful Backend (Session-based)
4
+
5
+ ```typescript
6
+ import { Container } from "@cloudflare/containers";
7
+
8
+ export class SessionBackend extends Container {
9
+ defaultPort = 3000;
10
+ sleepAfter = "30m";
11
+ }
12
+
13
+ export default {
14
+ async fetch(request: Request, env: Env) {
15
+ const { sessionId } = await request.json();
16
+ // Each session gets dedicated container instance
17
+ const container = env.SESSION_BACKEND.getByName(sessionId);
18
+ return container.fetch(request);
19
+ }
20
+ }
21
+ ```
22
+
23
+ ### Short-Lived Code Execution
24
+
25
+ ```typescript
26
+ export class CodeSandbox extends Container {
27
+ defaultPort = 8080;
28
+ sleepAfter = "5m"; // Quick cleanup
29
+ }
30
+
31
+ export default {
32
+ async fetch(request: Request, env: Env) {
33
+ const { code, executionId } = await request.json();
34
+
35
+ const container = env.CODE_SANDBOX.getByName(executionId);
36
+ await container.startAndWaitForPorts({
37
+ startOptions: {
38
+ envVars: {
39
+ USER_CODE: Buffer.from(code).toString('base64'),
40
+ TIMEOUT: "3
@@ -0,0 +1,85 @@
1
+ # Cloudflare Cron Triggers
2
+
3
+ Schedule Workers execution using cron expressions. Runs on Cloudflare's global network during underutilized periods.
4
+
5
+ ## Key Features
6
+
7
+ - **UTC-only execution** - All schedules run on UTC time
8
+ - **5-field cron syntax** - Quartz scheduler extensions (L, W, #)
9
+ - **Global propagation** - 15min deployment delay
10
+ - **At-least-once delivery** - Rare duplicate executions possible
11
+ - **Workflow integration** - Trigger long-running multi-step tasks
12
+
13
+ ## Cron Syntax
14
+
15
+ ```
16
+ ┌─────────── minute (0-59)
17
+ │ ┌───────── hour (0-23)
18
+ │ │ ┌─────── day of month (1-31)
19
+ │ │ │ ┌───── month (1-12, JAN-DEC)
20
+ │ │ │ │ ┌─── day of week (1-7, SUN-SAT, 1=Sunday)
21
+ * * * * *
22
+ ```
23
+
24
+ **Special chars:** `*` (any), `,` (list), `-` (range), `/` (step), `L` (last), `W` (weekday), `#` (nth)
25
+
26
+ ## Common Schedules
27
+
28
+ ```bash
29
+ */5 * * * * # Every 5 minutes
30
+ 0 * * * * # Hourly
31
+ 0 2 * * * # Daily 2am UTC (off-peak)
32
+ 0 9 * * MON-FRI # Weekdays 9am UTC
33
+ 0 0 1 * * # Monthly 1st midnight UTC
34
+ 0 9 L * * # Last day of month 9am UTC
35
+ 0 10 * * MON#2 # 2nd Monday 10am UTC
36
+ */10 9-17 * * MON-FRI # Every 10min, 9am-5pm weekdays
37
+ ```
38
+
39
+ ## Quick Start
40
+
41
+ **wrangler.jsonc:**
42
+ ```jsonc
43
+ {
44
+ "name": "my-cron-worker",
45
+ "triggers": {
46
+ "crons": ["*/5 * * * *", "0 2 * * *"]
47
+ }
48
+ }
49
+ ```
50
+
51
+ **Handler:**
52
+ ```typescript
53
+ export default {
54
+ async scheduled(
55
+ controller: ScheduledController,
56
+ env: Env,
57
+ ctx: ExecutionContext,
58
+ ): Promise<void> {
59
+ console.log("Cron:", controller.cron);
60
+ console.log("Time:", new Date(controller.scheduledTime));
61
+
62
+ ctx.waitUntil(asyncTask(env)); // Non-blocking
63
+ },
64
+ };
65
+ ```
66
+
67
+ **Test locally:**
68
+ ```bash
69
+ npx wrangler dev
70
+ curl "http://localhost:8787/__scheduled?cron=*/5+*+*+*+*"
71
+ ```
72
+
73
+ ## Limits
74
+
75
+ - **Free:** 3 triggers/worker, 10ms CPU
76
+ - **Paid:** Unlimited triggers, 50ms CPU
77
+ - **Propagation:** 15min global deployment
78
+ - **Timezone:** UTC only
79
+
80
+ ## See Also
81
+
82
+ - [configuration.md](./configuration.md) - wrangler config, env-specific schedules
83
+ - [api.md](./api.md) - ScheduledController, handler params
84
+ - [patterns.md](./patterns.md) - Use cases, batch processing, monitoring
85
+ - [gotchas.md](./gotchas.md) - Timezone issues, debugging, limits