memory-journal-mcp 7.7.0 → 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-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
- 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 +7 -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,152 @@
|
|
|
1
|
+
# R2 SQL Configuration
|
|
2
|
+
|
|
3
|
+
Setup and configuration for R2 SQL queries.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- R2 bucket with Data Catalog enabled
|
|
8
|
+
- API token with R2 permissions
|
|
9
|
+
- Wrangler CLI installed (for CLI queries)
|
|
10
|
+
|
|
11
|
+
## Enable R2 Data Catalog
|
|
12
|
+
|
|
13
|
+
R2 SQL queries Apache Iceberg tables in R2 Data Catalog. Must enable catalog on bucket first.
|
|
14
|
+
|
|
15
|
+
### Via Wrangler CLI
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx wrangler r2 bucket catalog enable <bucket-name>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Output includes:
|
|
22
|
+
|
|
23
|
+
- **Warehouse name** - Typically same as bucket name
|
|
24
|
+
- **Catalog URI** - REST endpoint for catalog operations
|
|
25
|
+
|
|
26
|
+
Example output:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Catalog enabled successfully
|
|
30
|
+
Warehouse: my-bucket
|
|
31
|
+
Catalog URI: https://abc123.r2.cloudflarestorage.com/iceberg/my-bucket
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Via Dashboard
|
|
35
|
+
|
|
36
|
+
1. Navigate to **R2 Object Storage** → Select your bucket
|
|
37
|
+
2. Click **Settings** tab
|
|
38
|
+
3. Scroll to **R2 Data Catalog** section
|
|
39
|
+
4. Click **Enable**
|
|
40
|
+
5. Note the **Catalog URI** and **Warehouse** name
|
|
41
|
+
|
|
42
|
+
**Important:** Enabling catalog creates metadata directories in bucket but does not modify existing objects.
|
|
43
|
+
|
|
44
|
+
## Create API Token
|
|
45
|
+
|
|
46
|
+
R2 SQL requires API token with R2 permissions.
|
|
47
|
+
|
|
48
|
+
### Required Permission
|
|
49
|
+
|
|
50
|
+
**R2 Admin Read & Write** (includes R2 SQL Read permission)
|
|
51
|
+
|
|
52
|
+
### Via Dashboard
|
|
53
|
+
|
|
54
|
+
1. Navigate to **R2 Object Storage**
|
|
55
|
+
2. Click **Manage API tokens** (top right)
|
|
56
|
+
3. Click **Create API token**
|
|
57
|
+
4. Select **Admin Read & Write** permission
|
|
58
|
+
5. Click **Create API Token**
|
|
59
|
+
6. **Copy token value** - shown only once
|
|
60
|
+
|
|
61
|
+
### Permission Scope
|
|
62
|
+
|
|
63
|
+
| Permission | Grants Access To |
|
|
64
|
+
| --------------------- | ---------------------------------------------------------------- |
|
|
65
|
+
| R2 Admin Read & Write | R2 storage operations + R2 SQL queries + Data Catalog operations |
|
|
66
|
+
| R2 SQL Read | SQL queries only (no storage writes) |
|
|
67
|
+
|
|
68
|
+
**Note:** R2 SQL Read permission not yet available via Dashboard - use Admin Read & Write.
|
|
69
|
+
|
|
70
|
+
## Configure Environment
|
|
71
|
+
|
|
72
|
+
### Wrangler CLI
|
|
73
|
+
|
|
74
|
+
Set environment variable for Wrangler to use:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
export WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Or create `.env` file in project directory:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Wrangler automatically loads `.env` file when running commands.
|
|
87
|
+
|
|
88
|
+
### HTTP API
|
|
89
|
+
|
|
90
|
+
For programmatic access (non-Wrangler), pass token in Authorization header:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/r2/sql/query \
|
|
94
|
+
-H "Authorization: Bearer <your-token>" \
|
|
95
|
+
-H "Content-Type: application/json" \
|
|
96
|
+
-d '{
|
|
97
|
+
"warehouse": "my-bucket",
|
|
98
|
+
"query": "SELECT * FROM default.my_table LIMIT 10"
|
|
99
|
+
}'
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Note:** HTTP API endpoint URL may vary - see [patterns.md](patterns.md#http-api-query) for current endpoint.
|
|
103
|
+
|
|
104
|
+
## Verify Setup
|
|
105
|
+
|
|
106
|
+
Test configuration by querying system tables:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# List namespaces
|
|
110
|
+
npx wrangler r2 sql query "my-bucket" "SHOW DATABASES"
|
|
111
|
+
|
|
112
|
+
# List tables in namespace
|
|
113
|
+
npx wrangler r2 sql query "my-bucket" "SHOW TABLES IN default"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
If successful, returns JSON array of results.
|
|
117
|
+
|
|
118
|
+
## Troubleshooting
|
|
119
|
+
|
|
120
|
+
### "Token authentication failed"
|
|
121
|
+
|
|
122
|
+
**Cause:** Invalid or missing token
|
|
123
|
+
|
|
124
|
+
**Solution:**
|
|
125
|
+
|
|
126
|
+
- Verify `WRANGLER_R2_SQL_AUTH_TOKEN` environment variable set
|
|
127
|
+
- Check token has Admin Read & Write permission
|
|
128
|
+
- Create new token if expired
|
|
129
|
+
|
|
130
|
+
### "Catalog not enabled on bucket"
|
|
131
|
+
|
|
132
|
+
**Cause:** Data Catalog not enabled
|
|
133
|
+
|
|
134
|
+
**Solution:**
|
|
135
|
+
|
|
136
|
+
- Run `npx wrangler r2 bucket catalog enable <bucket-name>`
|
|
137
|
+
- Or enable via Dashboard (R2 → bucket → Settings → R2 Data Catalog)
|
|
138
|
+
|
|
139
|
+
### "Permission denied"
|
|
140
|
+
|
|
141
|
+
**Cause:** Token lacks required permissions
|
|
142
|
+
|
|
143
|
+
**Solution:**
|
|
144
|
+
|
|
145
|
+
- Verify token has **Admin Read & Write** permission
|
|
146
|
+
- Create new token with correct permissions
|
|
147
|
+
|
|
148
|
+
## See Also
|
|
149
|
+
|
|
150
|
+
- [r2-data-catalog/configuration.md](../r2-data-catalog/configuration.md) - Detailed token setup and PyIceberg connection
|
|
151
|
+
- [patterns.md](patterns.md) - Query examples using configuration
|
|
152
|
+
- [gotchas.md](gotchas.md) - Common configuration errors
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# R2 SQL Gotchas
|
|
2
|
+
|
|
3
|
+
Limitations, troubleshooting, and common pitfalls for R2 SQL.
|
|
4
|
+
|
|
5
|
+
## Critical Limitations
|
|
6
|
+
|
|
7
|
+
### No Workers Binding
|
|
8
|
+
|
|
9
|
+
**Cannot call R2 SQL from Workers/Pages code** - no binding exists.
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// ❌ This doesn't exist
|
|
13
|
+
export default {
|
|
14
|
+
async fetch(request, env) {
|
|
15
|
+
const result = await env.R2_SQL.query('SELECT * FROM table') // Not possible
|
|
16
|
+
return Response.json(result)
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Solutions:**
|
|
22
|
+
|
|
23
|
+
- HTTP API from external systems (not Workers)
|
|
24
|
+
- PyIceberg/Spark via r2-data-catalog REST API
|
|
25
|
+
- For Workers, use D1 or external databases
|
|
26
|
+
|
|
27
|
+
### ORDER BY Limitations
|
|
28
|
+
|
|
29
|
+
Can only order by:
|
|
30
|
+
|
|
31
|
+
1. **Partition key columns** - Always supported
|
|
32
|
+
2. **Aggregation functions** - Supported via shuffle strategy
|
|
33
|
+
|
|
34
|
+
**Cannot order by** regular non-partition columns.
|
|
35
|
+
|
|
36
|
+
```sql
|
|
37
|
+
-- ✅ Valid: ORDER BY partition key
|
|
38
|
+
SELECT * FROM logs.requests ORDER BY timestamp DESC LIMIT 100;
|
|
39
|
+
|
|
40
|
+
-- ✅ Valid: ORDER BY aggregation
|
|
41
|
+
SELECT region, SUM(amount) FROM sales.transactions
|
|
42
|
+
GROUP BY region ORDER BY SUM(amount) DESC;
|
|
43
|
+
|
|
44
|
+
-- ❌ Invalid: ORDER BY non-partition column
|
|
45
|
+
SELECT * FROM logs.requests ORDER BY user_id;
|
|
46
|
+
|
|
47
|
+
-- ❌ Invalid: ORDER BY alias (must repeat function)
|
|
48
|
+
SELECT region, SUM(amount) as total FROM sales.transactions
|
|
49
|
+
GROUP BY region ORDER BY total; -- Use ORDER BY SUM(amount)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Check partition spec: `DESCRIBE namespace.table_name`
|
|
53
|
+
|
|
54
|
+
## SQL Feature Limitations
|
|
55
|
+
|
|
56
|
+
| Feature | Supported | Notes |
|
|
57
|
+
| ------------------------------- | --------- | ------------------------- |
|
|
58
|
+
| SELECT, WHERE, GROUP BY, HAVING | ✅ | Standard support |
|
|
59
|
+
| COUNT, SUM, AVG, MIN, MAX | ✅ | Standard aggregations |
|
|
60
|
+
| ORDER BY partition/aggregation | ✅ | See above |
|
|
61
|
+
| LIMIT | ✅ | Max 10,000 |
|
|
62
|
+
| Column aliases | ❌ | No AS alias |
|
|
63
|
+
| Expressions in SELECT | ❌ | No col1 + col2 |
|
|
64
|
+
| ORDER BY non-partition | ❌ | Fails at runtime |
|
|
65
|
+
| JOINs, subqueries, CTEs | ❌ | Denormalize at write time |
|
|
66
|
+
| Window functions, UNION | ❌ | Use external engines |
|
|
67
|
+
| INSERT/UPDATE/DELETE | ❌ | Use PyIceberg/Pipelines |
|
|
68
|
+
| Nested columns, arrays, JSON | ❌ | Flatten at write time |
|
|
69
|
+
|
|
70
|
+
**Workarounds:**
|
|
71
|
+
|
|
72
|
+
- No JOINs: Denormalize data or use Spark/PyIceberg
|
|
73
|
+
- No subqueries: Split into multiple queries
|
|
74
|
+
- No aliases: Accept generated names, transform in app
|
|
75
|
+
|
|
76
|
+
## Common Errors
|
|
77
|
+
|
|
78
|
+
### "Column not found"
|
|
79
|
+
|
|
80
|
+
**Cause:** Typo, column doesn't exist, or case mismatch
|
|
81
|
+
**Solution:** `DESCRIBE namespace.table_name` to check schema
|
|
82
|
+
|
|
83
|
+
### "Type mismatch"
|
|
84
|
+
|
|
85
|
+
```sql
|
|
86
|
+
-- ❌ Wrong types
|
|
87
|
+
WHERE status = '200' -- string instead of integer
|
|
88
|
+
WHERE timestamp > '2025-01-01' -- missing time/timezone
|
|
89
|
+
|
|
90
|
+
-- ✅ Correct types
|
|
91
|
+
WHERE status = 200
|
|
92
|
+
WHERE timestamp > '2025-01-01T00:00:00Z'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### "ORDER BY column not in partition key"
|
|
96
|
+
|
|
97
|
+
**Cause:** Ordering by non-partition column
|
|
98
|
+
**Solution:** Use partition key, aggregation, or remove ORDER BY. Check: `DESCRIBE table`
|
|
99
|
+
|
|
100
|
+
### "Token authentication failed"
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Check/set token
|
|
104
|
+
echo $WRANGLER_R2_SQL_AUTH_TOKEN
|
|
105
|
+
export WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
|
|
106
|
+
|
|
107
|
+
# Or .env file
|
|
108
|
+
echo "WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>" > .env
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### "Table not found"
|
|
112
|
+
|
|
113
|
+
```sql
|
|
114
|
+
-- Verify catalog and tables
|
|
115
|
+
SHOW DATABASES;
|
|
116
|
+
SHOW TABLES IN namespace_name;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Enable catalog: `npx wrangler r2 bucket catalog enable <bucket>`
|
|
120
|
+
|
|
121
|
+
### "LIMIT exceeds maximum"
|
|
122
|
+
|
|
123
|
+
Max LIMIT is 10,000. For pagination, use WHERE filters with partition keys.
|
|
124
|
+
|
|
125
|
+
### "No data returned" (unexpected)
|
|
126
|
+
|
|
127
|
+
**Debug steps:**
|
|
128
|
+
|
|
129
|
+
1. `SELECT COUNT(*) FROM table` - verify data exists
|
|
130
|
+
2. Remove WHERE filters incrementally
|
|
131
|
+
3. `SELECT * FROM table LIMIT 10` - inspect actual data/types
|
|
132
|
+
|
|
133
|
+
## Performance Issues
|
|
134
|
+
|
|
135
|
+
### Slow Queries
|
|
136
|
+
|
|
137
|
+
**Causes:** Too many partitions, large LIMIT, no filters, small files
|
|
138
|
+
|
|
139
|
+
```sql
|
|
140
|
+
-- ❌ Slow: No filters
|
|
141
|
+
SELECT * FROM logs.requests LIMIT 10000;
|
|
142
|
+
|
|
143
|
+
-- ✅ Fast: Filter on partition key
|
|
144
|
+
SELECT * FROM logs.requests
|
|
145
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND timestamp < '2025-01-16T00:00:00Z'
|
|
146
|
+
LIMIT 1000;
|
|
147
|
+
|
|
148
|
+
-- ✅ Faster: Multiple filters
|
|
149
|
+
SELECT * FROM logs.requests
|
|
150
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND status = 404 AND method = 'GET'
|
|
151
|
+
LIMIT 1000;
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**File optimization:**
|
|
155
|
+
|
|
156
|
+
- Target Parquet size: 100-500MB compressed
|
|
157
|
+
- Pipelines roll interval: 300+ sec (prod), 10 sec (dev)
|
|
158
|
+
- Run compaction to merge small files
|
|
159
|
+
|
|
160
|
+
### Query Timeout
|
|
161
|
+
|
|
162
|
+
**Solution:** Add restrictive WHERE filters, reduce time range, query smaller intervals
|
|
163
|
+
|
|
164
|
+
```sql
|
|
165
|
+
-- ❌ Times out: Year-long aggregation
|
|
166
|
+
SELECT status, COUNT(*) FROM logs.requests
|
|
167
|
+
WHERE timestamp >= '2024-01-01T00:00:00Z' GROUP BY status;
|
|
168
|
+
|
|
169
|
+
-- ✅ Faster: Month-long aggregation
|
|
170
|
+
SELECT status, COUNT(*) FROM logs.requests
|
|
171
|
+
WHERE timestamp >= '2025-01-01T00:00:00Z' AND timestamp < '2025-02-01T00:00:00Z'
|
|
172
|
+
GROUP BY status;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Best Practices
|
|
176
|
+
|
|
177
|
+
### Partitioning
|
|
178
|
+
|
|
179
|
+
- **Time-series:** Partition by day/hour on timestamp
|
|
180
|
+
- **Avoid:** High-cardinality keys (user_id), >10,000 partitions
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
184
|
+
from pyiceberg.transforms import DayTransform
|
|
185
|
+
|
|
186
|
+
PartitionSpec(PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day"))
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Query Writing
|
|
190
|
+
|
|
191
|
+
- **Always use LIMIT** for early termination
|
|
192
|
+
- **Filter on partition keys first** for pruning
|
|
193
|
+
- **Combine filters with AND** for more pruning
|
|
194
|
+
|
|
195
|
+
```sql
|
|
196
|
+
-- Good
|
|
197
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND status = 404 AND method = 'GET' LIMIT 100
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Type Safety
|
|
201
|
+
|
|
202
|
+
- Quote strings: `'GET'` not `GET`
|
|
203
|
+
- RFC3339 timestamps: `'2025-01-01T00:00:00Z'` not `'2025-01-01'`
|
|
204
|
+
- ISO dates: `'2025-01-15'` not `'01/15/2025'`
|
|
205
|
+
|
|
206
|
+
### Data Organization
|
|
207
|
+
|
|
208
|
+
- **Pipelines:** Dev `roll_file_time: 10`, Prod `roll_file_time: 300+`
|
|
209
|
+
- **Compression:** Use `zstd`
|
|
210
|
+
- **Maintenance:** Compaction for small files, expire old snapshots
|
|
211
|
+
|
|
212
|
+
## Debugging Checklist
|
|
213
|
+
|
|
214
|
+
1. `npx wrangler r2 bucket catalog enable <bucket>` - Verify catalog
|
|
215
|
+
2. `echo $WRANGLER_R2_SQL_AUTH_TOKEN` - Check token
|
|
216
|
+
3. `SHOW DATABASES` - List namespaces
|
|
217
|
+
4. `SHOW TABLES IN namespace` - List tables
|
|
218
|
+
5. `DESCRIBE namespace.table` - Check schema
|
|
219
|
+
6. `SELECT COUNT(*) FROM namespace.table` - Verify data
|
|
220
|
+
7. `SELECT * FROM namespace.table LIMIT 10` - Test simple query
|
|
221
|
+
8. Add filters incrementally
|
|
222
|
+
|
|
223
|
+
## See Also
|
|
224
|
+
|
|
225
|
+
- [api.md](api.md) - SQL syntax
|
|
226
|
+
- [patterns.md](patterns.md) - Query optimization
|
|
227
|
+
- [configuration.md](configuration.md) - Setup
|
|
228
|
+
- [Cloudflare R2 SQL Docs](https://developers.cloudflare.com/r2-sql/)
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# R2 SQL Patterns
|
|
2
|
+
|
|
3
|
+
Common patterns, use cases, and integration examples for R2 SQL.
|
|
4
|
+
|
|
5
|
+
## Wrangler CLI Query
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Basic query
|
|
9
|
+
npx wrangler r2 sql query "my-bucket" "SELECT * FROM default.logs LIMIT 10"
|
|
10
|
+
|
|
11
|
+
# Multi-line query
|
|
12
|
+
npx wrangler r2 sql query "my-bucket" "
|
|
13
|
+
SELECT status, COUNT(*), AVG(response_time)
|
|
14
|
+
FROM logs.http_requests
|
|
15
|
+
WHERE timestamp >= '2025-01-01T00:00:00Z'
|
|
16
|
+
GROUP BY status
|
|
17
|
+
ORDER BY COUNT(*) DESC
|
|
18
|
+
LIMIT 100
|
|
19
|
+
"
|
|
20
|
+
|
|
21
|
+
# Use environment variable
|
|
22
|
+
export R2_SQL_WAREHOUSE="my-bucket"
|
|
23
|
+
npx wrangler r2 sql query "$R2_SQL_WAREHOUSE" "SELECT * FROM default.logs"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## HTTP API Query
|
|
27
|
+
|
|
28
|
+
For programmatic access from external systems (not Workers - see gotchas.md).
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/r2/sql/query \
|
|
32
|
+
-H "Authorization: Bearer <your-token>" \
|
|
33
|
+
-H "Content-Type: application/json" \
|
|
34
|
+
-d '{
|
|
35
|
+
"warehouse": "my-bucket",
|
|
36
|
+
"query": "SELECT * FROM default.my_table WHERE status = 200 LIMIT 100"
|
|
37
|
+
}'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Response:
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"success": true,
|
|
45
|
+
"result": [{ "user_id": "user_123", "timestamp": "2025-01-15T10:30:00Z", "status": 200 }],
|
|
46
|
+
"errors": []
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Pipelines Integration
|
|
51
|
+
|
|
52
|
+
Stream data to Iceberg tables via Pipelines, then query with R2 SQL.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Setup pipeline (select Data Catalog Table destination)
|
|
56
|
+
npx wrangler pipelines setup
|
|
57
|
+
|
|
58
|
+
# Key settings:
|
|
59
|
+
# - Destination: Data Catalog Table
|
|
60
|
+
# - Compression: zstd (recommended)
|
|
61
|
+
# - Roll file time: 300+ sec (production), 10 sec (dev)
|
|
62
|
+
|
|
63
|
+
# Send data to pipeline
|
|
64
|
+
curl -X POST https://{stream-id}.ingest.cloudflare.com \
|
|
65
|
+
-H "Content-Type: application/json" \
|
|
66
|
+
-d '[{"user_id": "user_123", "event_type": "purchase", "timestamp": "2025-01-15T10:30:00Z", "amount": 29.99}]'
|
|
67
|
+
|
|
68
|
+
# Query ingested data (wait for roll interval)
|
|
69
|
+
npx wrangler r2 sql query "my-bucket" "
|
|
70
|
+
SELECT event_type, COUNT(*), SUM(amount)
|
|
71
|
+
FROM default.events
|
|
72
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z'
|
|
73
|
+
GROUP BY event_type
|
|
74
|
+
"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
See [pipelines/patterns.md](../pipelines/patterns.md) for detailed setup.
|
|
78
|
+
|
|
79
|
+
## PyIceberg Integration
|
|
80
|
+
|
|
81
|
+
Create and populate Iceberg tables with PyIceberg, then query with R2 SQL.
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
85
|
+
import pyarrow as pa
|
|
86
|
+
import pandas as pd
|
|
87
|
+
|
|
88
|
+
# Setup catalog
|
|
89
|
+
catalog = RestCatalog(
|
|
90
|
+
name="my_catalog",
|
|
91
|
+
warehouse="my-bucket",
|
|
92
|
+
uri="https://<account-id>.r2.cloudflarestorage.com/iceberg/my-bucket",
|
|
93
|
+
token="<your-token>",
|
|
94
|
+
)
|
|
95
|
+
catalog.create_namespace_if_not_exists("analytics")
|
|
96
|
+
|
|
97
|
+
# Create table
|
|
98
|
+
schema = pa.schema([
|
|
99
|
+
pa.field("user_id", pa.string(), nullable=False),
|
|
100
|
+
pa.field("event_time", pa.timestamp("us", tz="UTC"), nullable=False),
|
|
101
|
+
pa.field("page_views", pa.int64(), nullable=False),
|
|
102
|
+
])
|
|
103
|
+
table = catalog.create_table(("analytics", "user_metrics"), schema=schema)
|
|
104
|
+
|
|
105
|
+
# Append data
|
|
106
|
+
df = pd.DataFrame({
|
|
107
|
+
"user_id": ["user_1", "user_2"],
|
|
108
|
+
"event_time": pd.to_datetime(["2025-01-15 10:00:00", "2025-01-15 11:00:00"], utc=True),
|
|
109
|
+
"page_views": [10, 25],
|
|
110
|
+
})
|
|
111
|
+
table.append(pa.Table.from_pandas(df, schema=schema))
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Query with R2 SQL:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npx wrangler r2 sql query "my-bucket" "
|
|
118
|
+
SELECT user_id, SUM(page_views)
|
|
119
|
+
FROM analytics.user_metrics
|
|
120
|
+
WHERE event_time >= '2025-01-15T00:00:00Z'
|
|
121
|
+
GROUP BY user_id
|
|
122
|
+
"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
See [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md) for advanced PyIceberg patterns.
|
|
126
|
+
|
|
127
|
+
## Use Cases
|
|
128
|
+
|
|
129
|
+
### Log Analytics
|
|
130
|
+
|
|
131
|
+
```sql
|
|
132
|
+
-- Error rate by endpoint
|
|
133
|
+
SELECT path, COUNT(*), SUM(CASE WHEN status >= 400 THEN 1 ELSE 0 END) as errors
|
|
134
|
+
FROM logs.http_requests
|
|
135
|
+
WHERE timestamp BETWEEN '2025-01-01T00:00:00Z' AND '2025-01-31T23:59:59Z'
|
|
136
|
+
GROUP BY path ORDER BY errors DESC LIMIT 20;
|
|
137
|
+
|
|
138
|
+
-- Response time stats
|
|
139
|
+
SELECT method, MIN(response_time_ms), AVG(response_time_ms), MAX(response_time_ms)
|
|
140
|
+
FROM logs.http_requests WHERE timestamp >= '2025-01-15T00:00:00Z' GROUP BY method;
|
|
141
|
+
|
|
142
|
+
-- Traffic by status
|
|
143
|
+
SELECT status, COUNT(*) FROM logs.http_requests
|
|
144
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND method = 'GET'
|
|
145
|
+
GROUP BY status ORDER BY COUNT(*) DESC;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Fraud Detection
|
|
149
|
+
|
|
150
|
+
```sql
|
|
151
|
+
-- High-value transactions
|
|
152
|
+
SELECT location, COUNT(*), SUM(amount), AVG(amount)
|
|
153
|
+
FROM fraud.transactions WHERE transaction_timestamp >= '2025-01-01T00:00:00Z' AND amount > 1000.0
|
|
154
|
+
GROUP BY location ORDER BY SUM(amount) DESC LIMIT 20;
|
|
155
|
+
|
|
156
|
+
-- Flagged transactions
|
|
157
|
+
SELECT merchant_category, COUNT(*), AVG(amount) FROM fraud.transactions
|
|
158
|
+
WHERE is_fraud_flag = true AND transaction_timestamp >= '2025-01-01T00:00:00Z'
|
|
159
|
+
GROUP BY merchant_category HAVING COUNT(*) > 10 ORDER BY COUNT(*) DESC;
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Business Intelligence
|
|
163
|
+
|
|
164
|
+
```sql
|
|
165
|
+
-- Sales by department
|
|
166
|
+
SELECT department, SUM(revenue), AVG(revenue), COUNT(*) FROM sales.transactions
|
|
167
|
+
WHERE sale_date >= '2024-01-01' GROUP BY department ORDER BY SUM(revenue) DESC LIMIT 10;
|
|
168
|
+
|
|
169
|
+
-- Product performance
|
|
170
|
+
SELECT category, COUNT(DISTINCT product_id), SUM(units_sold), SUM(revenue)
|
|
171
|
+
FROM sales.product_sales WHERE sale_date BETWEEN '2024-10-01' AND '2024-12-31'
|
|
172
|
+
GROUP BY category ORDER BY SUM(revenue) DESC;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Connecting External Engines
|
|
176
|
+
|
|
177
|
+
R2 Data Catalog exposes Iceberg REST API. Connect Spark, Snowflake, Trino, DuckDB, etc.
|
|
178
|
+
|
|
179
|
+
```scala
|
|
180
|
+
// Apache Spark example
|
|
181
|
+
val spark = SparkSession.builder()
|
|
182
|
+
.config("spark.sql.catalog.my_catalog", "org.apache.iceberg.spark.SparkCatalog")
|
|
183
|
+
.config("spark.sql.catalog.my_catalog.catalog-impl", "org.apache.iceberg.rest.RESTCatalog")
|
|
184
|
+
.config("spark.sql.catalog.my_catalog.uri", "https://<account-id>.r2.cloudflarestorage.com/iceberg/my-bucket")
|
|
185
|
+
.config("spark.sql.catalog.my_catalog.token", "<token>")
|
|
186
|
+
.getOrCreate()
|
|
187
|
+
|
|
188
|
+
spark.sql("SELECT * FROM my_catalog.default.my_table LIMIT 10").show()
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
See [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md) for more engines.
|
|
192
|
+
|
|
193
|
+
## Performance Optimization
|
|
194
|
+
|
|
195
|
+
### Partitioning
|
|
196
|
+
|
|
197
|
+
- **Time-series:** day/hour on timestamp
|
|
198
|
+
- **Geographic:** region/country
|
|
199
|
+
- **Avoid:** High-cardinality keys (user_id)
|
|
200
|
+
|
|
201
|
+
```python
|
|
202
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
203
|
+
from pyiceberg.transforms import DayTransform
|
|
204
|
+
|
|
205
|
+
PartitionSpec(PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day"))
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Query Optimization
|
|
209
|
+
|
|
210
|
+
- **Always use LIMIT** for early termination
|
|
211
|
+
- **Filter on partition keys first**
|
|
212
|
+
- **Multiple filters** for better pruning
|
|
213
|
+
|
|
214
|
+
```sql
|
|
215
|
+
-- Better: Multiple filters on partition key
|
|
216
|
+
SELECT * FROM logs.requests
|
|
217
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND status = 404 AND method = 'GET' LIMIT 100;
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### File Organization
|
|
221
|
+
|
|
222
|
+
- **Pipelines roll:** Dev 10-30s, Prod 300+s
|
|
223
|
+
- **Target Parquet:** 100-500MB compressed
|
|
224
|
+
|
|
225
|
+
## See Also
|
|
226
|
+
|
|
227
|
+
- [api.md](api.md) - SQL syntax reference
|
|
228
|
+
- [gotchas.md](gotchas.md) - Limitations and troubleshooting
|
|
229
|
+
- [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md) - PyIceberg advanced patterns
|
|
230
|
+
- [pipelines/patterns.md](../pipelines/patterns.md) - Streaming ingestion patterns
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Cloudflare Realtime SFU Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for building real-time audio/video/data applications using Cloudflare Realtime SFU (Selective Forwarding Unit).
|
|
4
|
+
|
|
5
|
+
## Reading Order
|
|
6
|
+
|
|
7
|
+
| Task | Files | ~Tokens |
|
|
8
|
+
| --------------------------- | ------------------------------ | ------- |
|
|
9
|
+
| New project | README → configuration | ~1200 |
|
|
10
|
+
| Implement publish/subscribe | README → api | ~1600 |
|
|
11
|
+
| Add PartyTracks | patterns (PartyTracks section) | ~800 |
|
|
12
|
+
| Build presence system | patterns (DO section) | ~800 |
|
|
13
|
+
| Debug connection issues | gotchas | ~700 |
|
|
14
|
+
| Scale to millions | patterns (Cascading section) | ~600 |
|
|
15
|
+
| Add simulcast | patterns (Advanced section) | ~500 |
|
|
16
|
+
| Configure TURN | configuration (TURN section) | ~400 |
|
|
17
|
+
|
|
18
|
+
## In This Reference
|
|
19
|
+
|
|
20
|
+
- **[configuration.md](configuration.md)** - Setup, deployment, environment variables, Wrangler config
|
|
21
|
+
- **[api.md](api.md)** - Sessions, tracks, endpoints, request/response patterns
|
|
22
|
+
- **[patterns.md](patterns.md)** - Architecture patterns, use cases, integration examples
|
|
23
|
+
- **[gotchas.md](gotchas.md)** - Common issues, debugging, performance, security
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
Cloudflare Realtime SFU: WebRTC infrastructure on global network (310+ cities). Anycast routing, no regional constraints, pub/sub model.
|
|
28
|
+
|
|
29
|
+
**Core concepts:**
|
|
30
|
+
|
|
31
|
+
- **Sessions:** WebRTC PeerConnection to Cloudflare edge
|
|
32
|
+
- **Tracks:** Audio/video/data channels you publish or subscribe to
|
|
33
|
+
- **No rooms:** Build presence layer yourself via track sharing (see patterns.md)
|
|
34
|
+
|
|
35
|
+
**Mental model:** Your client establishes one WebRTC session, publishes tracks (audio/video), shares track IDs via your backend, others subscribe to your tracks using track IDs + your session ID.
|
|
36
|
+
|
|
37
|
+
## Choose Your Approach
|
|
38
|
+
|
|
39
|
+
| Approach | When to Use | Complexity |
|
|
40
|
+
| --------------- | -------------------------------------------- | ---------------------------------------------- |
|
|
41
|
+
| **PartyTracks** | Production apps with device switching, React | Low - Observable-based, handles reconnections |
|
|
42
|
+
| **Raw API** | Custom requirements, non-browser, learning | Medium - Full control, manual WebRTC lifecycle |
|
|
43
|
+
| **RealtimeKit** | End-to-end SDK with UI components | Lowest - Managed state, React hooks |
|
|
44
|
+
|
|
45
|
+
**Recommendation:** Start with PartyTracks for most production applications. See patterns.md for PartyTracks examples.
|
|
46
|
+
|
|
47
|
+
## SFU vs RealtimeKit
|
|
48
|
+
|
|
49
|
+
- **Realtime SFU:** WebRTC infrastructure (this reference). Build your own signaling, presence, UI.
|
|
50
|
+
- **RealtimeKit:** SDK layer on top of SFU. Includes React hooks, state management, UI components. Part of Cloudflare AI platform.
|
|
51
|
+
|
|
52
|
+
Use SFU directly when you need custom signaling or non-React framework. Use RealtimeKit for faster development with React.
|
|
53
|
+
|
|
54
|
+
## Setup
|
|
55
|
+
|
|
56
|
+
Dashboard: https://dash.cloudflare.com/?to=/:account/calls
|
|
57
|
+
|
|
58
|
+
Get `CALLS_APP_ID` and `CALLS_APP_SECRET` from dashboard, then see configuration.md for deployment.
|
|
59
|
+
|
|
60
|
+
## See Also
|
|
61
|
+
|
|
62
|
+
- [Orange Meets Demo](https://demo.orange.cloudflare.dev/)
|
|
63
|
+
- [Orange Source](https://github.com/cloudflare/orange)
|
|
64
|
+
- [Calls Examples](https://github.com/cloudflare/calls-examples)
|
|
65
|
+
- [API Reference](https://developers.cloudflare.com/api/resources/calls/)
|
|
66
|
+
- [RealtimeKit Docs](https://developers.cloudflare.com/workers-ai/realtimekit/)
|