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.
- package/dist/index.js +1 -1
- package/dist/template/.opencode/command/cloudflare.md +70 -0
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
- package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
- package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
- package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
- package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
- package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
- package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
- package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
- package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
- package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
- package/package.json +1 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# Workerd Configuration
|
|
2
|
+
|
|
3
|
+
## Basic Structure
|
|
4
|
+
```capnp
|
|
5
|
+
using Workerd = import "/workerd/workerd.capnp";
|
|
6
|
+
|
|
7
|
+
const config :Workerd.Config = (
|
|
8
|
+
services = [(name = "main", worker = .mainWorker)],
|
|
9
|
+
sockets = [(name = "http", address = "*:8080", http = (), service = "main")]
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
const mainWorker :Workerd.Worker = (
|
|
13
|
+
modules = [(name = "index.js", esModule = embed "src/index.js")],
|
|
14
|
+
compatibilityDate = "2024-01-15",
|
|
15
|
+
bindings = [...]
|
|
16
|
+
);
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Services
|
|
20
|
+
**Worker**: Run JS/Wasm code
|
|
21
|
+
```capnp
|
|
22
|
+
(name = "api", worker = (
|
|
23
|
+
modules = [(name = "index.js", esModule = embed "index.js")],
|
|
24
|
+
compatibilityDate = "2024-01-15",
|
|
25
|
+
bindings = [...]
|
|
26
|
+
))
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Network**: Internet access
|
|
30
|
+
```capnp
|
|
31
|
+
(name = "internet", network = (allow = ["public"], tlsOptions = (trustBrowserCas = true)))
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**External**: Reverse proxy
|
|
35
|
+
```capnp
|
|
36
|
+
(name = "backend", external = (address = "api.com:443", http = (style = tls)))
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Disk**: Static files
|
|
40
|
+
```capnp
|
|
41
|
+
(name = "assets", disk = (path = "/var/www", writable = false))
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Sockets
|
|
45
|
+
```capnp
|
|
46
|
+
# HTTP
|
|
47
|
+
(name = "http", address = "*:8080", http = (), service = "main")
|
|
48
|
+
|
|
49
|
+
# HTTPS
|
|
50
|
+
(name = "https", address = "*:443",
|
|
51
|
+
https = (options = (), tlsOptions = (
|
|
52
|
+
keypair = (privateKey = embed "key.pem", certificateChain = embed "cert.pem")
|
|
53
|
+
)),
|
|
54
|
+
service = "main"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Unix socket
|
|
58
|
+
(name = "app", address = "unix:/tmp/app.sock", http = (), service = "main")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Worker Formats
|
|
62
|
+
**ES Modules** (recommended):
|
|
63
|
+
```capnp
|
|
64
|
+
modules = [
|
|
65
|
+
(name = "index.js", esModule = embed "src/index.js"),
|
|
66
|
+
(name = "wasm.wasm", wasm = embed "build/module.wasm"),
|
|
67
|
+
(name = "data.json", json = embed "data.json"),
|
|
68
|
+
]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Service Worker**:
|
|
72
|
+
```capnp
|
|
73
|
+
serviceWorkerScript = embed "worker.js"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**CommonJS**:
|
|
77
|
+
```capnp
|
|
78
|
+
(name = "legacy.js", commonJsModule = embed "legacy.js", namedExports = ["foo"])
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Bindings
|
|
82
|
+
Bindings expose resources to workers. ES modules: `env.BINDING`, Service workers: globals.
|
|
83
|
+
|
|
84
|
+
### Primitive Types
|
|
85
|
+
```capnp
|
|
86
|
+
(name = "API_KEY", text = "secret") # String
|
|
87
|
+
(name = "CONFIG", json = '{"key":"val"}') # Parsed JSON
|
|
88
|
+
(name = "DATA", data = embed "data.bin") # ArrayBuffer
|
|
89
|
+
(name = "DATABASE_URL", fromEnvironment = "DB_URL") # System env var
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Service Binding
|
|
93
|
+
```capnp
|
|
94
|
+
(name = "AUTH", service = "auth-worker") # Basic
|
|
95
|
+
(name = "API", service = (
|
|
96
|
+
name = "backend",
|
|
97
|
+
entrypoint = "adminApi", # Named export
|
|
98
|
+
props = (json = '{"role":"admin"}') # ctx.props
|
|
99
|
+
))
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Storage
|
|
103
|
+
```capnp
|
|
104
|
+
(name = "CACHE", kvNamespace = "kv-service") # KV
|
|
105
|
+
(name = "STORAGE", r2Bucket = "r2-service") # R2
|
|
106
|
+
(name = "ROOMS", durableObjectNamespace = (
|
|
107
|
+
serviceName = "room-service",
|
|
108
|
+
className = "Room"
|
|
109
|
+
))
|
|
110
|
+
(name = "FAST", memoryCache = (
|
|
111
|
+
id = "cache-id",
|
|
112
|
+
limits = (maxKeys = 1000, maxValueSize = 1048576)
|
|
113
|
+
))
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Other
|
|
117
|
+
```capnp
|
|
118
|
+
(name = "TASKS", queue = "queue-service") # Queue
|
|
119
|
+
(name = "ANALYTICS", analyticsEngine = "analytics") # Analytics
|
|
120
|
+
(name = "LOADER", workerLoader = (id = "dynamic")) # Dynamic workers
|
|
121
|
+
(name = "KEY", cryptoKey = (
|
|
122
|
+
format = raw,
|
|
123
|
+
algorithm = (name = "HMAC", hash = "SHA-256"),
|
|
124
|
+
keyData = embed "key.bin",
|
|
125
|
+
usages = [sign, verify],
|
|
126
|
+
extractable = false
|
|
127
|
+
))
|
|
128
|
+
(name = "TRACED", wrapped = ( # Middleware
|
|
129
|
+
moduleName = "tracing",
|
|
130
|
+
entrypoint = "makeTracer",
|
|
131
|
+
innerBindings = [(name = "backend", service = "backend")]
|
|
132
|
+
))
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Compatibility
|
|
136
|
+
```capnp
|
|
137
|
+
compatibilityDate = "2024-01-15" # Always set!
|
|
138
|
+
compatibilityFlags = ["nodejs_compat", "streams_enable_constructors"]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Version = max compat date. Update carefully after testing.
|
|
142
|
+
|
|
143
|
+
## Parameter Bindings (Inheritance)
|
|
144
|
+
```capnp
|
|
145
|
+
const base :Workerd.Worker = (
|
|
146
|
+
modules = [...],
|
|
147
|
+
compatibilityDate = "2024-01-15",
|
|
148
|
+
bindings = [
|
|
149
|
+
(name = "API_URL", parameter = (type = text)),
|
|
150
|
+
(name = "DB", parameter = (type = service)),
|
|
151
|
+
]
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
const derived :Workerd.Worker = (
|
|
155
|
+
inherit = "base-service",
|
|
156
|
+
bindings = [
|
|
157
|
+
(name = "API_URL", text = "https://api.com"),
|
|
158
|
+
(name = "DB", service = "postgres"),
|
|
159
|
+
]
|
|
160
|
+
);
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Durable Objects Config
|
|
164
|
+
```capnp
|
|
165
|
+
const worker :Workerd.Worker = (
|
|
166
|
+
modules = [...],
|
|
167
|
+
compatibilityDate = "2024-01-15",
|
|
168
|
+
bindings = [(name = "ROOMS", durableObjectNamespace = "Room")],
|
|
169
|
+
durableObjectNamespaces = [(className = "Room", uniqueKey = "v1")],
|
|
170
|
+
durableObjectStorage = (localDisk = "/var/do")
|
|
171
|
+
);
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Logging & Debugging
|
|
175
|
+
```capnp
|
|
176
|
+
logging = (
|
|
177
|
+
structuredLogging = true,
|
|
178
|
+
stdoutPrefix = "OUT: ",
|
|
179
|
+
stderrPrefix = "ERR: "
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
v8Flags = ["--expose-gc", "--max-old-space-size=2048"] # Use at own risk
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
See [patterns.md](./patterns.md) for multi-service examples, [gotchas.md](./gotchas.md) for config errors.
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Workerd Gotchas
|
|
2
|
+
|
|
3
|
+
## Configuration Errors
|
|
4
|
+
|
|
5
|
+
### Missing Compat Date
|
|
6
|
+
❌ **Wrong**:
|
|
7
|
+
```capnp
|
|
8
|
+
const worker :Workerd.Worker = (
|
|
9
|
+
serviceWorkerScript = embed "worker.js"
|
|
10
|
+
)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
✅ **Correct**:
|
|
14
|
+
```capnp
|
|
15
|
+
const worker :Workerd.Worker = (
|
|
16
|
+
serviceWorkerScript = embed "worker.js",
|
|
17
|
+
compatibilityDate = "2024-01-15" # Always set!
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Wrong Binding Type
|
|
22
|
+
❌ **Wrong** - text returns string:
|
|
23
|
+
```capnp
|
|
24
|
+
(name = "CONFIG", text = '{"key":"value"}') # String, not parsed
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
✅ **Correct** - json returns object:
|
|
28
|
+
```capnp
|
|
29
|
+
(name = "CONFIG", json = '{"key":"value"}') # Parsed object
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Service vs Namespace
|
|
33
|
+
❌ **Wrong** - just a Fetcher:
|
|
34
|
+
```capnp
|
|
35
|
+
(name = "ROOM", service = "room-service")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
✅ **Correct** - Durable Object namespace:
|
|
39
|
+
```capnp
|
|
40
|
+
(name = "ROOM", durableObjectNamespace = "Room")
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Module Name Mismatch
|
|
44
|
+
❌ **Wrong** - import fails:
|
|
45
|
+
```capnp
|
|
46
|
+
modules = [(name = "src/index.js", esModule = embed "src/index.js")]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
✅ **Correct** - use simple names:
|
|
50
|
+
```capnp
|
|
51
|
+
modules = [(name = "index.js", esModule = embed "src/index.js")]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Network Access
|
|
55
|
+
|
|
56
|
+
### No Global Outbound
|
|
57
|
+
❌ **Wrong** - may fail without config:
|
|
58
|
+
```javascript
|
|
59
|
+
await fetch("https://api.example.com")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
✅ **Correct** - configure network service:
|
|
63
|
+
```capnp
|
|
64
|
+
services = [
|
|
65
|
+
(name = "internet", network = (allow = ["public"])),
|
|
66
|
+
(name = "worker", worker = (
|
|
67
|
+
...,
|
|
68
|
+
bindings = [(name = "API", service = "internet")]
|
|
69
|
+
))
|
|
70
|
+
]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Or use external service:
|
|
74
|
+
```capnp
|
|
75
|
+
bindings = [
|
|
76
|
+
(name = "API", service = (
|
|
77
|
+
name = "api-backend",
|
|
78
|
+
external = (address = "api.com:443", http = (style = tls))
|
|
79
|
+
))
|
|
80
|
+
]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Debugging Issues
|
|
84
|
+
|
|
85
|
+
### Worker Not Responding
|
|
86
|
+
Check:
|
|
87
|
+
1. Socket config: `address = "*:8080"`, service name matches
|
|
88
|
+
2. Worker has `fetch()` handler
|
|
89
|
+
3. Port available
|
|
90
|
+
4. Service name in socket matches service definition
|
|
91
|
+
|
|
92
|
+
### Binding Not Found
|
|
93
|
+
Check:
|
|
94
|
+
1. Binding name in config matches code (`env.BINDING` or global)
|
|
95
|
+
2. Service exists in config
|
|
96
|
+
3. ES module vs service worker syntax (env vs global)
|
|
97
|
+
|
|
98
|
+
### Module Not Found
|
|
99
|
+
Check:
|
|
100
|
+
1. Module name in config matches import path
|
|
101
|
+
2. `embed` path correct
|
|
102
|
+
3. ES module syntax valid (no CommonJS in `.mjs`)
|
|
103
|
+
|
|
104
|
+
### Compatibility Errors
|
|
105
|
+
Check:
|
|
106
|
+
1. `compatibilityDate` set
|
|
107
|
+
2. API available on that date ([docs](https://developers.cloudflare.com/workers/configuration/compatibility-dates/))
|
|
108
|
+
3. Required flags enabled (`compatibilityFlags`)
|
|
109
|
+
|
|
110
|
+
## Performance Issues
|
|
111
|
+
|
|
112
|
+
### High Memory Usage
|
|
113
|
+
Try:
|
|
114
|
+
1. V8 flags: `v8Flags = ["--max-old-space-size=2048"]`
|
|
115
|
+
2. Reduce cache limits: `memoryCache.limits.maxTotalValueSize`
|
|
116
|
+
3. Profile with `--verbose` logging
|
|
117
|
+
|
|
118
|
+
### Slow Startup
|
|
119
|
+
Try:
|
|
120
|
+
1. Compile binary: `workerd compile config.capnp name -o binary`
|
|
121
|
+
2. Check module count (many imports slow startup)
|
|
122
|
+
3. Review compatibility flags (some have perf impact)
|
|
123
|
+
|
|
124
|
+
### Request Timeouts
|
|
125
|
+
Check:
|
|
126
|
+
1. External service connectivity
|
|
127
|
+
2. Network service DNS resolution
|
|
128
|
+
3. TLS handshake issues (`tlsOptions`)
|
|
129
|
+
|
|
130
|
+
## Build Issues
|
|
131
|
+
|
|
132
|
+
### Cap'n Proto Errors
|
|
133
|
+
- Install Cap'n Proto tools: `brew install capnp` / `apt install capnproto`
|
|
134
|
+
- Check schema import path: `using Workerd = import "/workerd/workerd.capnp";`
|
|
135
|
+
- Validate with: `capnp compile -I. config.capnp`
|
|
136
|
+
|
|
137
|
+
### Embed Path Issues
|
|
138
|
+
- Paths relative to config file location
|
|
139
|
+
- Use absolute paths if needed: `embed "/full/path/file.js"`
|
|
140
|
+
- Check file exists before running
|
|
141
|
+
|
|
142
|
+
### V8 Flags Warning
|
|
143
|
+
**Warning**: V8 flags (`v8Flags`) can break everything. Use only if necessary and test thoroughly. Not supported in production Cloudflare Workers.
|
|
144
|
+
|
|
145
|
+
## Security Gotchas
|
|
146
|
+
|
|
147
|
+
### Hardcoded Secrets
|
|
148
|
+
❌ **Never** hardcode:
|
|
149
|
+
```capnp
|
|
150
|
+
(name = "API_KEY", text = "sk-1234567890")
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
✅ **Use env vars**:
|
|
154
|
+
```capnp
|
|
155
|
+
(name = "API_KEY", fromEnvironment = "API_KEY")
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Overly Broad Network Access
|
|
159
|
+
❌ **Too permissive**:
|
|
160
|
+
```capnp
|
|
161
|
+
network = (allow = ["*"]) # Everything
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
✅ **Restrictive**:
|
|
165
|
+
```capnp
|
|
166
|
+
network = (allow = ["public"], deny = ["local"])
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Extractable Keys
|
|
170
|
+
❌ **Extractable keys risky**:
|
|
171
|
+
```capnp
|
|
172
|
+
cryptoKey = (extractable = true, ...)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
✅ **Non-extractable**:
|
|
176
|
+
```capnp
|
|
177
|
+
cryptoKey = (extractable = false, ...)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Compatibility Changes
|
|
181
|
+
|
|
182
|
+
### Breaking Change Migration
|
|
183
|
+
When updating `compatibilityDate`:
|
|
184
|
+
1. Review [compatibility dates docs](https://developers.cloudflare.com/workers/configuration/compatibility-dates/)
|
|
185
|
+
2. Check flags enabled between old/new date
|
|
186
|
+
3. Test locally with new date
|
|
187
|
+
4. Update code for breaking changes
|
|
188
|
+
5. Deploy with new date
|
|
189
|
+
|
|
190
|
+
### Version Mismatch
|
|
191
|
+
Workerd version = max compat date supported. If `compatibilityDate = "2025-01-01"` but workerd is v1.20241201.0, it fails. Update workerd binary.
|
|
192
|
+
|
|
193
|
+
## Troubleshooting Steps
|
|
194
|
+
|
|
195
|
+
1. **Enable verbose logging**: `workerd serve config.capnp --verbose`
|
|
196
|
+
2. **Check logs**: Look for error messages, stack traces
|
|
197
|
+
3. **Validate config**: `capnp compile -I. config.capnp`
|
|
198
|
+
4. **Test bindings**: Log `Object.keys(env)` to verify
|
|
199
|
+
5. **Check versions**: Workerd version vs compat date
|
|
200
|
+
6. **Isolate issue**: Minimal repro config
|
|
201
|
+
7. **Review schema**: [workerd.capnp](https://github.com/cloudflare/workerd/blob/main/src/workerd/server/workerd.capnp)
|
|
202
|
+
|
|
203
|
+
See [configuration.md](./configuration.md) for config details, [patterns.md](./patterns.md) for working examples, [api.md](./api.md) for runtime APIs.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Workerd Patterns
|
|
2
|
+
|
|
3
|
+
## Multi-Service Architecture
|
|
4
|
+
```capnp
|
|
5
|
+
const config :Workerd.Config = (
|
|
6
|
+
services = [
|
|
7
|
+
(name = "frontend", worker = (
|
|
8
|
+
modules = [(name = "index.js", esModule = embed "frontend/index.js")],
|
|
9
|
+
compatibilityDate = "2024-01-15",
|
|
10
|
+
bindings = [(name = "API", service = "api")]
|
|
11
|
+
)),
|
|
12
|
+
|
|
13
|
+
(name = "api", worker = (
|
|
14
|
+
modules = [(name = "index.js", esModule = embed "api/index.js")],
|
|
15
|
+
compatibilityDate = "2024-01-15",
|
|
16
|
+
bindings = [
|
|
17
|
+
(name = "DB", service = "postgres"),
|
|
18
|
+
(name = "CACHE", kvNamespace = "kv"),
|
|
19
|
+
]
|
|
20
|
+
)),
|
|
21
|
+
|
|
22
|
+
(name = "postgres", external = (address = "db.internal:5432", http = ())),
|
|
23
|
+
(name = "kv", disk = (path = "/var/kv", writable = true)),
|
|
24
|
+
],
|
|
25
|
+
|
|
26
|
+
sockets = [(name = "http", address = "*:8080", http = (), service = "frontend")]
|
|
27
|
+
);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Durable Objects
|
|
31
|
+
```capnp
|
|
32
|
+
const config :Workerd.Config = (
|
|
33
|
+
services = [
|
|
34
|
+
(name = "app", worker = (
|
|
35
|
+
modules = [
|
|
36
|
+
(name = "index.js", esModule = embed "index.js"),
|
|
37
|
+
(name = "room.js", esModule = embed "room.js"),
|
|
38
|
+
],
|
|
39
|
+
compatibilityDate = "2024-01-15",
|
|
40
|
+
bindings = [(name = "ROOMS", durableObjectNamespace = "Room")],
|
|
41
|
+
durableObjectNamespaces = [(className = "Room", uniqueKey = "v1")],
|
|
42
|
+
durableObjectStorage = (localDisk = "/var/do")
|
|
43
|
+
))
|
|
44
|
+
],
|
|
45
|
+
sockets = [(name = "http", address = "*:8080", http = (), service = "app")]
|
|
46
|
+
);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Dev vs Prod Configs
|
|
50
|
+
```capnp
|
|
51
|
+
const devWorker :Workerd.Worker = (
|
|
52
|
+
modules = [(name = "index.js", esModule = embed "src/index.js")],
|
|
53
|
+
compatibilityDate = "2024-01-15",
|
|
54
|
+
bindings = [
|
|
55
|
+
(name = "API_URL", text = "http://localhost:3000"),
|
|
56
|
+
(name = "DEBUG", text = "true"),
|
|
57
|
+
]
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const prodWorker :Workerd.Worker = (
|
|
61
|
+
inherit = "dev-service",
|
|
62
|
+
bindings = [
|
|
63
|
+
(name = "API_URL", text = "https://api.prod.com"),
|
|
64
|
+
(name = "DEBUG", text = "false"),
|
|
65
|
+
]
|
|
66
|
+
);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## HTTP Reverse Proxy
|
|
70
|
+
```capnp
|
|
71
|
+
const config :Workerd.Config = (
|
|
72
|
+
services = [
|
|
73
|
+
(name = "proxy", worker = (
|
|
74
|
+
serviceWorkerScript = embed "proxy.js",
|
|
75
|
+
compatibilityDate = "2024-01-15",
|
|
76
|
+
bindings = [(name = "BACKEND", service = "backend")]
|
|
77
|
+
)),
|
|
78
|
+
(name = "backend", external = (address = "internal:8080", http = ()))
|
|
79
|
+
],
|
|
80
|
+
sockets = [(name = "http", address = "*:80", http = (), service = "proxy")]
|
|
81
|
+
);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Local Development
|
|
85
|
+
|
|
86
|
+
### Using Wrangler
|
|
87
|
+
```bash
|
|
88
|
+
export MINIFLARE_WORKERD_PATH="/path/to/workerd"
|
|
89
|
+
wrangler dev
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Direct Workerd
|
|
93
|
+
```bash
|
|
94
|
+
workerd serve config.capnp --socket-addr http=*:3000 --verbose
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Environment Variables
|
|
98
|
+
```capnp
|
|
99
|
+
bindings = [
|
|
100
|
+
(name = "DATABASE_URL", fromEnvironment = "DATABASE_URL"),
|
|
101
|
+
(name = "API_KEY", fromEnvironment = "API_KEY"),
|
|
102
|
+
]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
export DATABASE_URL="postgres://..."
|
|
107
|
+
export API_KEY="secret"
|
|
108
|
+
workerd serve config.capnp
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Testing
|
|
112
|
+
|
|
113
|
+
### Test Config
|
|
114
|
+
```capnp
|
|
115
|
+
const testWorker :Workerd.Worker = (
|
|
116
|
+
modules = [
|
|
117
|
+
(name = "index.js", esModule = embed "src/index.js"),
|
|
118
|
+
(name = "test.js", esModule = embed "tests/test.js"),
|
|
119
|
+
],
|
|
120
|
+
compatibilityDate = "2024-01-15"
|
|
121
|
+
);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
workerd test config.capnp
|
|
126
|
+
workerd test config.capnp --test-only=test.js
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Production Deployment
|
|
130
|
+
|
|
131
|
+
### Systemd
|
|
132
|
+
```ini
|
|
133
|
+
# /etc/systemd/system/workerd.service
|
|
134
|
+
[Unit]
|
|
135
|
+
Description=workerd runtime
|
|
136
|
+
After=network-online.target
|
|
137
|
+
Requires=workerd.socket
|
|
138
|
+
|
|
139
|
+
[Service]
|
|
140
|
+
Type=exec
|
|
141
|
+
ExecStart=/usr/bin/workerd serve /etc/workerd/config.capnp --socket-fd http=3
|
|
142
|
+
Restart=always
|
|
143
|
+
User=nobody
|
|
144
|
+
NoNewPrivileges=true
|
|
145
|
+
|
|
146
|
+
[Install]
|
|
147
|
+
WantedBy=multi-user.target
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```ini
|
|
151
|
+
# /etc/systemd/system/workerd.socket
|
|
152
|
+
[Socket]
|
|
153
|
+
ListenStream=0.0.0.0:80
|
|
154
|
+
|
|
155
|
+
[Install]
|
|
156
|
+
WantedBy=sockets.target
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Docker
|
|
160
|
+
```dockerfile
|
|
161
|
+
FROM debian:bookworm-slim
|
|
162
|
+
RUN apt-get update && apt-get install -y ca-certificates
|
|
163
|
+
COPY workerd /usr/local/bin/
|
|
164
|
+
COPY config.capnp /etc/workerd/
|
|
165
|
+
COPY src/ /etc/workerd/src/
|
|
166
|
+
EXPOSE 8080
|
|
167
|
+
CMD ["workerd", "serve", "/etc/workerd/config.capnp"]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Compiled Binary
|
|
171
|
+
```bash
|
|
172
|
+
workerd compile config.capnp myConfig -o production-server
|
|
173
|
+
./production-server
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Best Practices
|
|
177
|
+
|
|
178
|
+
1. **Use ES modules** over service worker syntax
|
|
179
|
+
2. **Explicit bindings** - no global namespace assumptions
|
|
180
|
+
3. **Type safety** - define `Env` interfaces
|
|
181
|
+
4. **Service isolation** - split concerns
|
|
182
|
+
5. **Pin compat date** in production after testing
|
|
183
|
+
6. **Use ctx.waitUntil()** for background tasks
|
|
184
|
+
7. **Handle errors gracefully** with try/catch
|
|
185
|
+
8. **Configure resource limits** on caches/storage
|
|
186
|
+
|
|
187
|
+
## Error Handling Pattern
|
|
188
|
+
```javascript
|
|
189
|
+
export default {
|
|
190
|
+
async fetch(request, env, ctx) {
|
|
191
|
+
try {
|
|
192
|
+
return await handleRequest(request, env);
|
|
193
|
+
} catch (error) {
|
|
194
|
+
console.error("Request failed", error);
|
|
195
|
+
return new Response("Internal Error", {status: 500});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Logging Pattern
|
|
202
|
+
```javascript
|
|
203
|
+
export default {
|
|
204
|
+
async fetch(request, env, ctx) {
|
|
205
|
+
console.log("Request", {method: request.method, url: request.url});
|
|
206
|
+
|
|
207
|
+
ctx.waitUntil(
|
|
208
|
+
logToAnalytics(request, env)
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
return new Response("OK");
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
See [configuration.md](./configuration.md) for config syntax, [api.md](./api.md) for runtime APIs, [gotchas.md](./gotchas.md) for common errors.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Cloudflare Workers
|
|
2
|
+
|
|
3
|
+
Expert guidance for building, deploying, and optimizing Cloudflare Workers applications.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare Workers run on V8 isolates (NOT containers/VMs):
|
|
8
|
+
- Extremely fast cold starts (< 1ms)
|
|
9
|
+
- Global deployment across 300+ locations
|
|
10
|
+
- Web standards compliant (fetch, URL, Headers, Request, Response)
|
|
11
|
+
- Support JS/TS, Python, Rust, and WebAssembly
|
|
12
|
+
|
|
13
|
+
**Key principle**: Workers use web platform APIs wherever possible for portability.
|
|
14
|
+
|
|
15
|
+
## Module Worker Pattern (Recommended)
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
export default {
|
|
19
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
20
|
+
return new Response('Hello World!');
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Handler parameters**:
|
|
26
|
+
- `request`: Incoming HTTP request (standard Request object)
|
|
27
|
+
- `env`: Environment bindings (KV, D1, R2, secrets, vars)
|
|
28
|
+
- `ctx`: Execution context (`waitUntil`, `passThroughOnException`)
|
|
29
|
+
|
|
30
|
+
## Essential Commands
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx wrangler dev # Local dev
|
|
34
|
+
npx wrangler dev --remote # Remote dev (actual resources)
|
|
35
|
+
npx wrangler deploy # Production
|
|
36
|
+
npx wrangler deploy --env staging # Specific environment
|
|
37
|
+
npx wrangler tail # Stream logs
|
|
38
|
+
npx wrangler secret put API_KEY # Set secret
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## When to Use Workers
|
|
42
|
+
|
|
43
|
+
- API endpoints at the edge
|
|
44
|
+
- Request/response transformation
|
|
45
|
+
- Authentication/authorization layers
|
|
46
|
+
- Static asset optimization
|
|
47
|
+
- A/B testing and feature flags
|
|
48
|
+
- Rate limiting and security
|
|
49
|
+
- Proxy/routing logic
|
|
50
|
+
- WebSocket applications
|
|
51
|
+
|
|
52
|
+
## Quick Start
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm create cloudflare@latest my-worker -- --type hello-world
|
|
56
|
+
cd my-worker
|
|
57
|
+
npx wrangler dev
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Handler Signatures
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// HTTP requests
|
|
64
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>
|
|
65
|
+
|
|
66
|
+
// Cron triggers
|
|
67
|
+
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void>
|
|
68
|
+
|
|
69
|
+
// Queue consumer
|
|
70
|
+
async queue(batch: MessageBatch, env: Env, ctx: ExecutionContext): Promise<void>
|
|
71
|
+
|
|
72
|
+
// Tail consumer
|
|
73
|
+
async tail(events: TraceItem[], env: Env, ctx: ExecutionContext): Promise<void>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Resources
|
|
77
|
+
|
|
78
|
+
**Docs**: https://developers.cloudflare.com/workers/
|
|
79
|
+
**Examples**: https://developers.cloudflare.com/workers/examples/
|
|
80
|
+
**Runtime APIs**: https://developers.cloudflare.com/workers/runtime-apis/
|
|
81
|
+
|
|
82
|
+
## In This Reference
|
|
83
|
+
|
|
84
|
+
- [Configuration](./configuration.md) - wrangler.jsonc setup, bindings, environments
|
|
85
|
+
- [API](./api.md) - Runtime APIs, bindings, execution context
|
|
86
|
+
- [Patterns](./patterns.md) - Common workflows, testing, optimization
|
|
87
|
+
- [Gotchas](./gotchas.md) - Common issues, limits, troubleshooting
|
|
88
|
+
|
|
89
|
+
## See Also
|
|
90
|
+
|
|
91
|
+
- [KV](../kv/README.md) - Key-value storage
|
|
92
|
+
- [D1](../d1/README.md) - SQL database
|
|
93
|
+
- [R2](../r2/README.md) - Object storage
|
|
94
|
+
- [Durable Objects](../durable-objects/README.md) - Stateful coordination
|
|
95
|
+
- [Queues](../queues/README.md) - Message queues
|
|
96
|
+
- [Wrangler](../wrangler/README.md) - CLI tool reference
|