memory-journal-mcp 7.7.1 → 8.0.0
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/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-6LPTBIB6.js → chunk-MWNLAEHR.js} +309 -4332
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +6 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
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 patterns.
|
|
6
|
+
|
|
7
|
+
## Beta Status
|
|
8
|
+
|
|
9
|
+
⚠️ Containers is currently in **beta**. API may change without notice. No SLA guarantees. Custom instance types added Jan 2026.
|
|
10
|
+
|
|
11
|
+
## Core Concepts
|
|
12
|
+
|
|
13
|
+
**Container as Durable Object:** Each container is a Durable Object with persistent identity. Accessed via `getByName(id)` or `getRandom()`.
|
|
14
|
+
|
|
15
|
+
**Image deployment:** Images pre-fetched globally. Deployments use rolling strategy (not instant like Workers).
|
|
16
|
+
|
|
17
|
+
**Lifecycle:** cold start (2-3s) → running → `sleepAfter` timeout → stopped. No autoscaling - manual load balancing via `getRandom()`.
|
|
18
|
+
|
|
19
|
+
**Persistent identity, ephemeral disk:** Container ID persists, but disk resets on stop. Use Durable Object storage for persistence.
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { Container } from '@cloudflare/containers'
|
|
25
|
+
|
|
26
|
+
export class MyContainer extends Container {
|
|
27
|
+
defaultPort = 8080
|
|
28
|
+
sleepAfter = '30m'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default {
|
|
32
|
+
async fetch(request: Request, env: Env) {
|
|
33
|
+
const container = env.MY_CONTAINER.getByName('instance-1')
|
|
34
|
+
await container.startAndWaitForPorts()
|
|
35
|
+
return container.fetch(request)
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Reading Order
|
|
41
|
+
|
|
42
|
+
| Task | Files |
|
|
43
|
+
| --------------------------- | ------------------------------------ |
|
|
44
|
+
| Setup new container project | README → configuration.md |
|
|
45
|
+
| Implement container logic | README → api.md → patterns.md |
|
|
46
|
+
| Choose routing pattern | patterns.md (routing section) |
|
|
47
|
+
| Debug issues | gotchas.md |
|
|
48
|
+
| Production hardening | gotchas.md → patterns.md (lifecycle) |
|
|
49
|
+
|
|
50
|
+
## Routing Decision Tree
|
|
51
|
+
|
|
52
|
+
**How should requests reach containers?**
|
|
53
|
+
|
|
54
|
+
- **Same user/session → same container:** Use `getByName(sessionId)` for session affinity
|
|
55
|
+
- **Stateless, spread load:** Use `getRandom()` for load balancing
|
|
56
|
+
- **Job per container:** Use `getByName(jobId)` + explicit lifecycle management
|
|
57
|
+
- **Single global instance:** Use `getByName("singleton")`
|
|
58
|
+
|
|
59
|
+
## When to Use Containers vs Workers
|
|
60
|
+
|
|
61
|
+
**Use Containers when:**
|
|
62
|
+
|
|
63
|
+
- Need stateful, long-lived processes (sessions, WebSockets, games)
|
|
64
|
+
- Running existing containerized apps (Node.js, Python, custom binaries)
|
|
65
|
+
- Need filesystem access or specific system dependencies
|
|
66
|
+
- Per-user/session isolation with dedicated compute
|
|
67
|
+
|
|
68
|
+
**Use Workers when:**
|
|
69
|
+
|
|
70
|
+
- Stateless HTTP handlers
|
|
71
|
+
- Sub-millisecond cold starts required
|
|
72
|
+
- Auto-scaling to zero critical
|
|
73
|
+
- Simple request/response patterns
|
|
74
|
+
|
|
75
|
+
## In This Reference
|
|
76
|
+
|
|
77
|
+
- **[configuration.md](configuration.md)** - Wrangler config, instance types, Container class properties, environment variables, account limits
|
|
78
|
+
- **[api.md](api.md)** - Container class API, startup methods, communication (HTTP/TCP/WebSocket), routing helpers, lifecycle hooks, scheduling, state inspection
|
|
79
|
+
- **[patterns.md](patterns.md)** - Routing patterns (session affinity, load balancing, singleton), WebSocket forwarding, graceful shutdown, Workflow/Queue integration
|
|
80
|
+
- **[gotchas.md](gotchas.md)** - Critical gotchas (WebSocket, startup methods), common errors with solutions, specific limits, beta caveats
|
|
81
|
+
|
|
82
|
+
## See Also
|
|
83
|
+
|
|
84
|
+
- [Durable Objects](../durable-objects/) - Containers extend Durable Objects
|
|
85
|
+
- [Workflows](../workflows/) - Orchestrate container operations
|
|
86
|
+
- [Queues](../queues/) - Trigger containers from queue messages
|
|
87
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/containers/)
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
## Container Class API
|
|
2
|
+
|
|
3
|
+
```typescript
|
|
4
|
+
import { Container } from '@cloudflare/containers'
|
|
5
|
+
|
|
6
|
+
export class MyContainer extends Container {
|
|
7
|
+
defaultPort = 8080
|
|
8
|
+
requiredPorts = [8080]
|
|
9
|
+
sleepAfter = '30m'
|
|
10
|
+
enableInternet = true
|
|
11
|
+
pingEndpoint = '/health'
|
|
12
|
+
envVars = {}
|
|
13
|
+
entrypoint = []
|
|
14
|
+
|
|
15
|
+
onStart() {
|
|
16
|
+
/* container started */
|
|
17
|
+
}
|
|
18
|
+
onStop() {
|
|
19
|
+
/* container stopping */
|
|
20
|
+
}
|
|
21
|
+
onError(error: Error) {
|
|
22
|
+
/* container error */
|
|
23
|
+
}
|
|
24
|
+
onActivityExpired(): boolean {
|
|
25
|
+
/* timeout, return true to stay alive */
|
|
26
|
+
}
|
|
27
|
+
async alarm() {
|
|
28
|
+
/* scheduled task */
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Routing
|
|
34
|
+
|
|
35
|
+
**getByName(id)** - Named instance for session affinity, per-user state
|
|
36
|
+
**getRandom()** - Random instance for load balancing stateless services
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
const container = env.MY_CONTAINER.getByName('user-123')
|
|
40
|
+
const container = env.MY_CONTAINER.getRandom()
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Startup Methods
|
|
44
|
+
|
|
45
|
+
### start() - Basic start (8s timeout)
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
await container.start()
|
|
49
|
+
await container.start({ envVars: { KEY: 'value' } })
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Returns when **process starts**, NOT when ports ready. Use for fire-and-forget.
|
|
53
|
+
|
|
54
|
+
### startAndWaitForPorts() - Recommended (20s timeout)
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
await container.startAndWaitForPorts() // Uses requiredPorts
|
|
58
|
+
await container.startAndWaitForPorts({ ports: [8080, 9090] })
|
|
59
|
+
await container.startAndWaitForPorts({
|
|
60
|
+
ports: [8080],
|
|
61
|
+
startOptions: { envVars: { KEY: 'value' } },
|
|
62
|
+
})
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Returns when **ports listening**. Use before HTTP/TCP requests.
|
|
66
|
+
|
|
67
|
+
**Port resolution:** explicit ports → requiredPorts → defaultPort → port 33
|
|
68
|
+
|
|
69
|
+
### waitForPort() - Wait for specific port
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
await container.waitForPort(8080)
|
|
73
|
+
await container.waitForPort(8080, { timeout: 30000 })
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Communication
|
|
77
|
+
|
|
78
|
+
### fetch() - HTTP with WebSocket support
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// ✅ Supports WebSocket upgrades
|
|
82
|
+
const response = await container.fetch(request)
|
|
83
|
+
const response = await container.fetch('http://container/api', {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
body: JSON.stringify({ data: 'value' }),
|
|
86
|
+
})
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Use for:** All HTTP, especially WebSocket.
|
|
90
|
+
|
|
91
|
+
### containerFetch() - HTTP only (no WebSocket)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
// ❌ No WebSocket support
|
|
95
|
+
const response = await container.containerFetch(request)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**⚠️ Critical:** Use `fetch()` for WebSocket, not `containerFetch()`.
|
|
99
|
+
|
|
100
|
+
### TCP Connections
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
const port = this.ctx.container.getTcpPort(8080)
|
|
104
|
+
const conn = port.connect()
|
|
105
|
+
await conn.opened
|
|
106
|
+
|
|
107
|
+
if (request.body) await request.body.pipeTo(conn.writable)
|
|
108
|
+
return new Response(conn.readable)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### switchPort() - Change default port
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
this.switchPort(8081) // Subsequent fetch() uses this port
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Lifecycle Hooks
|
|
118
|
+
|
|
119
|
+
### onStart()
|
|
120
|
+
|
|
121
|
+
Called when container process starts (ports may not be ready). Runs in `blockConcurrencyWhile` - no concurrent requests.
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
onStart() {
|
|
125
|
+
console.log("Container starting");
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### onStop()
|
|
130
|
+
|
|
131
|
+
Called when SIGTERM received. 15 minutes until SIGKILL. Use for graceful shutdown.
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
onStop() {
|
|
135
|
+
// Save state, close connections, flush logs
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### onError()
|
|
140
|
+
|
|
141
|
+
Called when container crashes or fails to start.
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
onError(error: Error) {
|
|
145
|
+
console.error("Container error:", error);
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### onActivityExpired()
|
|
150
|
+
|
|
151
|
+
Called when `sleepAfter` timeout reached. Return `true` to stay alive, `false` to stop.
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
onActivityExpired(): boolean {
|
|
155
|
+
if (this.hasActiveConnections()) return true; // Keep alive
|
|
156
|
+
return false; // OK to stop
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Scheduling
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
export class ScheduledContainer extends Container {
|
|
164
|
+
async fetch(request: Request) {
|
|
165
|
+
await this.schedule(Date.now() + 60000) // 1 minute
|
|
166
|
+
await this.schedule('2026-01-28T00:00:00Z') // ISO string
|
|
167
|
+
return new Response('Scheduled')
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async alarm() {
|
|
171
|
+
// Called when schedule fires (SQLite-backed, survives restarts)
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**⚠️ Don't override `alarm()` directly when using `schedule()` helper.**
|
|
177
|
+
|
|
178
|
+
## State Inspection
|
|
179
|
+
|
|
180
|
+
### External state check
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
const state = await container.getState()
|
|
184
|
+
// state.status: "starting" | "running" | "stopping" | "stopped"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Internal state check
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
export class MyContainer extends Container {
|
|
191
|
+
async fetch(request: Request) {
|
|
192
|
+
if (this.ctx.container.running) { ... }
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**⚠️ Use `getState()` for external checks, `ctx.container.running` for internal.**
|
|
@@ -0,0 +1,191 @@
|
|
|
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", // Path to Dockerfile or directory with Dockerfile
|
|
14
|
+
"instance_type": "standard-1", // Predefined or custom (see below)
|
|
15
|
+
"max_instances": 10,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
"durable_objects": {
|
|
19
|
+
"bindings": [
|
|
20
|
+
{
|
|
21
|
+
"name": "MY_CONTAINER",
|
|
22
|
+
"class_name": "MyContainer",
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
"migrations": [
|
|
27
|
+
{
|
|
28
|
+
"tag": "v1",
|
|
29
|
+
"new_sqlite_classes": ["MyContainer"], // Must use new_sqlite_classes
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Key config requirements:
|
|
36
|
+
|
|
37
|
+
- `image` - Path to Dockerfile or directory containing Dockerfile
|
|
38
|
+
- `class_name` - Must match Container class export name
|
|
39
|
+
- `max_instances` - Max concurrent container instances
|
|
40
|
+
- Must configure Durable Objects binding AND migrations
|
|
41
|
+
|
|
42
|
+
### Instance Types
|
|
43
|
+
|
|
44
|
+
#### Predefined Types
|
|
45
|
+
|
|
46
|
+
| Type | vCPU | Memory | Disk |
|
|
47
|
+
| ---------- | ---- | ------- | ----- |
|
|
48
|
+
| lite | 1/16 | 256 MiB | 2 GB |
|
|
49
|
+
| basic | 1/4 | 1 GiB | 4 GB |
|
|
50
|
+
| standard-1 | 1/2 | 4 GiB | 8 GB |
|
|
51
|
+
| standard-2 | 1 | 6 GiB | 12 GB |
|
|
52
|
+
| standard-3 | 2 | 8 GiB | 16 GB |
|
|
53
|
+
| standard-4 | 4 | 12 GiB | 20 GB |
|
|
54
|
+
|
|
55
|
+
```jsonc
|
|
56
|
+
{
|
|
57
|
+
"containers": [
|
|
58
|
+
{
|
|
59
|
+
"class_name": "MyContainer",
|
|
60
|
+
"image": "./Dockerfile",
|
|
61
|
+
"instance_type": "standard-2", // Use predefined type
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### Custom Types (Jan 2026 Feature)
|
|
68
|
+
|
|
69
|
+
```jsonc
|
|
70
|
+
{
|
|
71
|
+
"containers": [
|
|
72
|
+
{
|
|
73
|
+
"class_name": "MyContainer",
|
|
74
|
+
"image": "./Dockerfile",
|
|
75
|
+
"instance_type_custom": {
|
|
76
|
+
"vcpu": 2, // 1-4 vCPU
|
|
77
|
+
"memory_mib": 8192, // 512-12288 MiB (up to 12 GiB)
|
|
78
|
+
"disk_mib": 16384, // 2048-20480 MiB (up to 20 GB)
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Custom type constraints:**
|
|
86
|
+
|
|
87
|
+
- Minimum 3 GiB memory per vCPU
|
|
88
|
+
- Maximum 2 GB disk per 1 GiB memory
|
|
89
|
+
- Max 4 vCPU, 12 GiB memory, 20 GB disk per container
|
|
90
|
+
|
|
91
|
+
### Account Limits
|
|
92
|
+
|
|
93
|
+
| Resource | Limit | Notes |
|
|
94
|
+
| ----------------------------- | ------- | ----------------------------- |
|
|
95
|
+
| Total memory (all containers) | 400 GiB | Across all running containers |
|
|
96
|
+
| Total vCPU (all containers) | 100 | Across all running containers |
|
|
97
|
+
| Total disk (all containers) | 2 TB | Across all running containers |
|
|
98
|
+
| Image storage per account | 50 GB | Stored container images |
|
|
99
|
+
|
|
100
|
+
### Container Class Properties
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { Container } from '@cloudflare/containers'
|
|
104
|
+
|
|
105
|
+
export class MyContainer extends Container {
|
|
106
|
+
// Port Configuration
|
|
107
|
+
defaultPort = 8080 // Default port for fetch() calls
|
|
108
|
+
requiredPorts = [8080, 9090] // Ports to wait for in startAndWaitForPorts()
|
|
109
|
+
|
|
110
|
+
// Lifecycle
|
|
111
|
+
sleepAfter = '30m' // Inactivity timeout (5m, 30m, 2h, etc.)
|
|
112
|
+
|
|
113
|
+
// Network
|
|
114
|
+
enableInternet = true // Allow outbound internet access
|
|
115
|
+
|
|
116
|
+
// Health Check
|
|
117
|
+
pingEndpoint = '/health' // Health check endpoint path
|
|
118
|
+
|
|
119
|
+
// Environment
|
|
120
|
+
envVars = {
|
|
121
|
+
// Environment variables passed to container
|
|
122
|
+
NODE_ENV: 'production',
|
|
123
|
+
LOG_LEVEL: 'info',
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Startup
|
|
127
|
+
entrypoint = ['/bin/start.sh'] // Override image entrypoint (optional)
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Property details:**
|
|
132
|
+
|
|
133
|
+
- **`defaultPort`**: Port used when calling `container.fetch()` without explicit port. Falls back to port 33 if not set.
|
|
134
|
+
|
|
135
|
+
- **`requiredPorts`**: Array of ports that must be listening before `startAndWaitForPorts()` returns. First port becomes default if `defaultPort` not set.
|
|
136
|
+
|
|
137
|
+
- **`sleepAfter`**: Duration string (e.g., "5m", "30m", "2h"). Container stops after this period of inactivity. Timer resets on each request.
|
|
138
|
+
|
|
139
|
+
- **`enableInternet`**: Boolean. If `true`, container can make outbound HTTP/TCP requests.
|
|
140
|
+
|
|
141
|
+
- **`pingEndpoint`**: Path used for health checks. Should respond with 2xx status.
|
|
142
|
+
|
|
143
|
+
- **`envVars`**: Object of environment variables. Merged with runtime-provided vars (see below).
|
|
144
|
+
|
|
145
|
+
- **`entrypoint`**: Array of strings. Overrides container image's CMD/ENTRYPOINT.
|
|
146
|
+
|
|
147
|
+
### Runtime Environment Variables
|
|
148
|
+
|
|
149
|
+
Cloudflare automatically provides these environment variables to containers:
|
|
150
|
+
|
|
151
|
+
| Variable | Description |
|
|
152
|
+
| ------------------------------ | ----------------------------------------- |
|
|
153
|
+
| `CLOUDFLARE_APPLICATION_ID` | Worker application ID |
|
|
154
|
+
| `CLOUDFLARE_COUNTRY_A2` | Two-letter country code of request origin |
|
|
155
|
+
| `CLOUDFLARE_LOCATION` | Cloudflare data center location |
|
|
156
|
+
| `CLOUDFLARE_REGION` | Region identifier |
|
|
157
|
+
| `CLOUDFLARE_DURABLE_OBJECT_ID` | Container's Durable Object ID |
|
|
158
|
+
|
|
159
|
+
Custom `envVars` from Container class are merged with these. Custom vars override runtime vars if names conflict.
|
|
160
|
+
|
|
161
|
+
### Image Management
|
|
162
|
+
|
|
163
|
+
**Distribution model:** Images pre-fetched to all global locations before deployment. Ensures fast cold starts (2-3s typical).
|
|
164
|
+
|
|
165
|
+
**Rolling deploys:** Unlike Workers (instant), container deployments roll out gradually. Old versions continue running during rollout.
|
|
166
|
+
|
|
167
|
+
**Ephemeral disk:** Container disk is ephemeral and resets on each stop. Use Durable Object storage (`this.ctx.storage`) for persistence.
|
|
168
|
+
|
|
169
|
+
## wrangler.toml Format
|
|
170
|
+
|
|
171
|
+
```toml
|
|
172
|
+
name = "my-worker"
|
|
173
|
+
main = "src/index.ts"
|
|
174
|
+
compatibility_date = "2026-01-10"
|
|
175
|
+
|
|
176
|
+
[[containers]]
|
|
177
|
+
class_name = "MyContainer"
|
|
178
|
+
image = "./Dockerfile"
|
|
179
|
+
instance_type = "standard-2"
|
|
180
|
+
max_instances = 10
|
|
181
|
+
|
|
182
|
+
[[durable_objects.bindings]]
|
|
183
|
+
name = "MY_CONTAINER"
|
|
184
|
+
class_name = "MyContainer"
|
|
185
|
+
|
|
186
|
+
[[migrations]]
|
|
187
|
+
tag = "v1"
|
|
188
|
+
new_sqlite_classes = ["MyContainer"]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Both `wrangler.jsonc` and `wrangler.toml` are supported. Use `wrangler.jsonc` for comments and better IDE support.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
## Critical Gotchas
|
|
2
|
+
|
|
3
|
+
### ⚠️ WebSocket: fetch() vs containerFetch()
|
|
4
|
+
|
|
5
|
+
**Problem:** WebSocket connections fail silently
|
|
6
|
+
|
|
7
|
+
**Cause:** `containerFetch()` doesn't support WebSocket upgrades
|
|
8
|
+
|
|
9
|
+
**Fix:** Always use `fetch()` for WebSocket
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// ❌ WRONG
|
|
13
|
+
return container.containerFetch(request)
|
|
14
|
+
|
|
15
|
+
// ✅ CORRECT
|
|
16
|
+
return container.fetch(request)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### ⚠️ startAndWaitForPorts() vs start()
|
|
20
|
+
|
|
21
|
+
**Problem:** "connection refused" after `start()`
|
|
22
|
+
|
|
23
|
+
**Cause:** `start()` returns when process starts, NOT when ports ready
|
|
24
|
+
|
|
25
|
+
**Fix:** Use `startAndWaitForPorts()` before requests
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// ❌ WRONG
|
|
29
|
+
await container.start()
|
|
30
|
+
return container.fetch(request)
|
|
31
|
+
|
|
32
|
+
// ✅ CORRECT
|
|
33
|
+
await container.startAndWaitForPorts()
|
|
34
|
+
return container.fetch(request)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### ⚠️ Activity Timeout on Long Operations
|
|
38
|
+
|
|
39
|
+
**Problem:** Container stops during long work
|
|
40
|
+
|
|
41
|
+
**Cause:** `sleepAfter` based on request activity, not internal work
|
|
42
|
+
|
|
43
|
+
**Fix:** Renew timeout by touching storage
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
const interval = setInterval(() => {
|
|
47
|
+
this.ctx.storage.put('keepalive', Date.now())
|
|
48
|
+
}, 60000)
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
await this.doLongWork(data)
|
|
52
|
+
} finally {
|
|
53
|
+
clearInterval(interval)
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### ⚠️ blockConcurrencyWhile for Startup
|
|
58
|
+
|
|
59
|
+
**Problem:** Race conditions during initialization
|
|
60
|
+
|
|
61
|
+
**Fix:** Use `blockConcurrencyWhile` for atomic initialization
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
await this.ctx.blockConcurrencyWhile(async () => {
|
|
65
|
+
if (!this.initialized) {
|
|
66
|
+
await this.startAndWaitForPorts()
|
|
67
|
+
this.initialized = true
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### ⚠️ Lifecycle Hooks Block Requests
|
|
73
|
+
|
|
74
|
+
**Problem:** Container unresponsive during `onStart()`
|
|
75
|
+
|
|
76
|
+
**Cause:** Hooks run in `blockConcurrencyWhile` - no concurrent requests
|
|
77
|
+
|
|
78
|
+
**Fix:** Keep hooks fast, avoid long operations
|
|
79
|
+
|
|
80
|
+
### ⚠️ Don't Override alarm() When Using schedule()
|
|
81
|
+
|
|
82
|
+
**Problem:** Scheduled tasks don't execute
|
|
83
|
+
|
|
84
|
+
**Cause:** `schedule()` uses `alarm()` internally
|
|
85
|
+
|
|
86
|
+
**Fix:** Implement `alarm()` to handle scheduled tasks
|
|
87
|
+
|
|
88
|
+
## Common Errors
|
|
89
|
+
|
|
90
|
+
### "Container start timeout"
|
|
91
|
+
|
|
92
|
+
**Cause:** Container took >8s (`start()`) or >20s (`startAndWaitForPorts()`)
|
|
93
|
+
|
|
94
|
+
**Solutions:**
|
|
95
|
+
|
|
96
|
+
- Optimize image (smaller base, fewer layers)
|
|
97
|
+
- Check `entrypoint` correct
|
|
98
|
+
- Verify app listens on correct ports
|
|
99
|
+
- Increase timeout if needed
|
|
100
|
+
|
|
101
|
+
### "Port not available"
|
|
102
|
+
|
|
103
|
+
**Cause:** Calling `fetch()` before port ready
|
|
104
|
+
|
|
105
|
+
**Solution:** Use `startAndWaitForPorts()`
|
|
106
|
+
|
|
107
|
+
### "Container memory exceeded"
|
|
108
|
+
|
|
109
|
+
**Cause:** Using more memory than instance type allows
|
|
110
|
+
|
|
111
|
+
**Solutions:**
|
|
112
|
+
|
|
113
|
+
- Use larger instance type (standard-2, standard-3, standard-4)
|
|
114
|
+
- Optimize app memory usage
|
|
115
|
+
- Use custom instance type
|
|
116
|
+
|
|
117
|
+
```jsonc
|
|
118
|
+
"instance_type_custom": {
|
|
119
|
+
"vcpu": 2,
|
|
120
|
+
"memory_mib": 8192
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### "Max instances reached"
|
|
125
|
+
|
|
126
|
+
**Cause:** All `max_instances` slots in use
|
|
127
|
+
|
|
128
|
+
**Solutions:**
|
|
129
|
+
|
|
130
|
+
- Increase `max_instances`
|
|
131
|
+
- Implement proper `sleepAfter`
|
|
132
|
+
- Use `getRandom()` for distribution
|
|
133
|
+
- Check for instance leaks
|
|
134
|
+
|
|
135
|
+
### "No container instance available"
|
|
136
|
+
|
|
137
|
+
**Cause:** Account capacity limits reached
|
|
138
|
+
|
|
139
|
+
**Solutions:**
|
|
140
|
+
|
|
141
|
+
- Check account limits
|
|
142
|
+
- Review instance types across containers
|
|
143
|
+
- Contact Cloudflare support
|
|
144
|
+
|
|
145
|
+
## Limits
|
|
146
|
+
|
|
147
|
+
| Resource | Limit | Notes |
|
|
148
|
+
| -------------------------------- | ------- | -------------------------- |
|
|
149
|
+
| Cold start | 2-3s | Image pre-fetched globally |
|
|
150
|
+
| Graceful shutdown | 15 min | SIGTERM → SIGKILL |
|
|
151
|
+
| `start()` timeout | 8s | Process start |
|
|
152
|
+
| `startAndWaitForPorts()` timeout | 20s | Port ready |
|
|
153
|
+
| Max vCPU per container | 4 | standard-4 or custom |
|
|
154
|
+
| Max memory per container | 12 GiB | standard-4 or custom |
|
|
155
|
+
| Max disk per container | 20 GB | Ephemeral, resets |
|
|
156
|
+
| Account total memory | 400 GiB | All containers |
|
|
157
|
+
| Account total vCPU | 100 | All containers |
|
|
158
|
+
| Account total disk | 2 TB | All containers |
|
|
159
|
+
| Image storage | 50 GB | Per account |
|
|
160
|
+
| Disk persistence | None | Use DO storage |
|
|
161
|
+
|
|
162
|
+
## Best Practices
|
|
163
|
+
|
|
164
|
+
1. **Use `startAndWaitForPorts()` by default** - Prevents port errors
|
|
165
|
+
2. **Set appropriate `sleepAfter`** - Balance resources vs cold starts
|
|
166
|
+
3. **Use `fetch()` for WebSocket** - Not `containerFetch()`
|
|
167
|
+
4. **Design for restarts** - Ephemeral disk, implement graceful shutdown
|
|
168
|
+
5. **Monitor resources** - Stay within account limits
|
|
169
|
+
6. **Keep hooks fast** - Run in `blockConcurrencyWhile`
|
|
170
|
+
7. **Renew activity for long ops** - Touch storage to prevent timeout
|
|
171
|
+
|
|
172
|
+
## Beta Caveats
|
|
173
|
+
|
|
174
|
+
⚠️ Containers in **beta**:
|
|
175
|
+
|
|
176
|
+
- **API may change** without notice
|
|
177
|
+
- **No SLA** guarantees
|
|
178
|
+
- **Limited regions** initially
|
|
179
|
+
- **No autoscaling** - manual via `getRandom()`
|
|
180
|
+
- **Rolling deploys** only (not instant like Workers)
|
|
181
|
+
|
|
182
|
+
Plan for API changes, test thoroughly before production.
|