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,157 @@
|
|
|
1
|
+
# Cloudflare R2 Data Catalog Skill Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for Cloudflare R2 Data Catalog - Apache Iceberg catalog built into R2 buckets.
|
|
4
|
+
|
|
5
|
+
## Reading Order
|
|
6
|
+
|
|
7
|
+
**New to R2 Data Catalog?** Start here:
|
|
8
|
+
|
|
9
|
+
1. Read "What is R2 Data Catalog?" and "When to Use" below
|
|
10
|
+
2. [configuration.md](configuration.md) - Enable catalog, create tokens
|
|
11
|
+
3. [patterns.md](patterns.md) - PyIceberg setup and common patterns
|
|
12
|
+
4. [api.md](api.md) - REST API reference as needed
|
|
13
|
+
5. [gotchas.md](gotchas.md) - Troubleshooting when issues arise
|
|
14
|
+
|
|
15
|
+
**Quick reference?** Jump to:
|
|
16
|
+
|
|
17
|
+
- [Enable catalog on bucket](configuration.md#enable-catalog-on-bucket)
|
|
18
|
+
- [PyIceberg connection pattern](patterns.md#pyiceberg-connection-pattern)
|
|
19
|
+
- [Permission errors](gotchas.md#permission-errors)
|
|
20
|
+
|
|
21
|
+
## What is R2 Data Catalog?
|
|
22
|
+
|
|
23
|
+
R2 Data Catalog is a **managed Apache Iceberg REST catalog** built directly into R2 buckets. It provides:
|
|
24
|
+
|
|
25
|
+
- **Apache Iceberg tables** - ACID transactions, schema evolution, time-travel queries
|
|
26
|
+
- **Zero-egress costs** - Query from any cloud/region without data transfer fees
|
|
27
|
+
- **Standard REST API** - Works with Spark, PyIceberg, Snowflake, Trino, DuckDB
|
|
28
|
+
- **No infrastructure** - Fully managed, no catalog servers to run
|
|
29
|
+
- **Public beta** - Available to all R2 subscribers, no extra cost beyond R2 storage
|
|
30
|
+
|
|
31
|
+
### What is Apache Iceberg?
|
|
32
|
+
|
|
33
|
+
Open table format for analytics datasets in object storage. Features:
|
|
34
|
+
|
|
35
|
+
- **ACID transactions** - Safe concurrent reads/writes
|
|
36
|
+
- **Metadata optimization** - Fast queries without full scans
|
|
37
|
+
- **Schema evolution** - Add/rename/delete columns without rewrites
|
|
38
|
+
- **Time-travel** - Query historical snapshots
|
|
39
|
+
- **Partitioning** - Organize data for efficient queries
|
|
40
|
+
|
|
41
|
+
## When to Use
|
|
42
|
+
|
|
43
|
+
**Use R2 Data Catalog for:**
|
|
44
|
+
|
|
45
|
+
- **Log analytics** - Store and query application/system logs
|
|
46
|
+
- **Data lakes/warehouses** - Analytical datasets queried by multiple engines
|
|
47
|
+
- **BI pipelines** - Aggregate data for dashboards and reports
|
|
48
|
+
- **Multi-cloud analytics** - Share data across clouds without egress fees
|
|
49
|
+
- **Time-series data** - Event streams, metrics, sensor data
|
|
50
|
+
|
|
51
|
+
**Don't use for:**
|
|
52
|
+
|
|
53
|
+
- **Transactional workloads** - Use D1 or external database instead
|
|
54
|
+
- **Sub-second latency** - Iceberg optimized for batch/analytical queries
|
|
55
|
+
- **Small datasets (<1GB)** - Setup overhead not worth it
|
|
56
|
+
- **Unstructured data** - Store files directly in R2, not as Iceberg tables
|
|
57
|
+
|
|
58
|
+
## Architecture
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
┌─────────────────────────────────────────────────┐
|
|
62
|
+
│ Query Engines │
|
|
63
|
+
│ (PyIceberg, Spark, Trino, Snowflake, DuckDB) │
|
|
64
|
+
└────────────────┬────────────────────────────────┘
|
|
65
|
+
│
|
|
66
|
+
│ REST API (OAuth2 token)
|
|
67
|
+
▼
|
|
68
|
+
┌─────────────────────────────────────────────────┐
|
|
69
|
+
│ R2 Data Catalog (Managed Iceberg REST Catalog)│
|
|
70
|
+
│ • Namespace/table metadata │
|
|
71
|
+
│ • Transaction coordination │
|
|
72
|
+
│ • Snapshot management │
|
|
73
|
+
└────────────────┬────────────────────────────────┘
|
|
74
|
+
│
|
|
75
|
+
│ Vended credentials
|
|
76
|
+
▼
|
|
77
|
+
┌─────────────────────────────────────────────────┐
|
|
78
|
+
│ R2 Bucket Storage │
|
|
79
|
+
│ • Parquet data files │
|
|
80
|
+
│ • Metadata files │
|
|
81
|
+
│ • Manifest files │
|
|
82
|
+
└─────────────────────────────────────────────────┘
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Key concepts:**
|
|
86
|
+
|
|
87
|
+
- **Catalog URI** - REST endpoint for catalog operations (e.g., `https://<account-id>.r2.cloudflarestorage.com/iceberg/<bucket>`)
|
|
88
|
+
- **Warehouse** - Logical grouping of tables (typically same as bucket name)
|
|
89
|
+
- **Namespace** - Schema/database containing tables (e.g., `logs`, `analytics`)
|
|
90
|
+
- **Table** - Iceberg table with schema, data files, snapshots
|
|
91
|
+
- **Vended credentials** - Temporary S3 credentials catalog provides for data access
|
|
92
|
+
|
|
93
|
+
## Limits
|
|
94
|
+
|
|
95
|
+
| Resource | Limit | Notes |
|
|
96
|
+
| ---------------------- | ---------------------- | --------------------------------- |
|
|
97
|
+
| Namespaces per catalog | No hard limit | Organize tables logically |
|
|
98
|
+
| Tables per namespace | <10,000 recommended | Performance degrades beyond this |
|
|
99
|
+
| Files per table | <100,000 recommended | Run compaction regularly |
|
|
100
|
+
| Snapshots per table | Configurable retention | Expire >7 days old |
|
|
101
|
+
| Partitions per table | 100-1,000 optimal | Too many = slow metadata ops |
|
|
102
|
+
| Table size | Same as R2 bucket | 10GB-10TB+ common |
|
|
103
|
+
| API rate limits | Standard R2 API limits | Shared with R2 storage operations |
|
|
104
|
+
| Target file size | 128-512 MB | After compaction |
|
|
105
|
+
|
|
106
|
+
## Current Status
|
|
107
|
+
|
|
108
|
+
**Public Beta** (as of Jan 2026)
|
|
109
|
+
|
|
110
|
+
- Available to all R2 subscribers
|
|
111
|
+
- No extra cost beyond standard R2 storage/operations
|
|
112
|
+
- Production-ready, but breaking changes possible
|
|
113
|
+
- Supports: namespaces, tables, snapshots, compaction, time-travel, table maintenance
|
|
114
|
+
|
|
115
|
+
## Decision Tree: Is R2 Data Catalog Right For You?
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Start → Need analytics on object storage data?
|
|
119
|
+
│
|
|
120
|
+
├─ No → Use R2 directly for object storage
|
|
121
|
+
│
|
|
122
|
+
└─ Yes → Dataset >1GB with structured schema?
|
|
123
|
+
│
|
|
124
|
+
├─ No → Too small, use R2 + ad-hoc queries
|
|
125
|
+
│
|
|
126
|
+
└─ Yes → Need ACID transactions or schema evolution?
|
|
127
|
+
│
|
|
128
|
+
├─ No → Consider simpler solutions (Parquet on R2)
|
|
129
|
+
│
|
|
130
|
+
└─ Yes → Need multi-cloud/multi-tool access?
|
|
131
|
+
│
|
|
132
|
+
├─ No → D1 or external DB may be simpler
|
|
133
|
+
│
|
|
134
|
+
└─ Yes → ✅ Use R2 Data Catalog
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Quick check:** If you answer "yes" to all:
|
|
138
|
+
|
|
139
|
+
- Dataset >1GB and growing
|
|
140
|
+
- Structured/tabular data (logs, events, metrics)
|
|
141
|
+
- Multiple query tools or cloud environments
|
|
142
|
+
- Need versioning, schema changes, or concurrent access
|
|
143
|
+
|
|
144
|
+
→ R2 Data Catalog is a good fit.
|
|
145
|
+
|
|
146
|
+
## In This Reference
|
|
147
|
+
|
|
148
|
+
- **[configuration.md](configuration.md)** - Enable catalog, create API tokens, connect clients
|
|
149
|
+
- **[api.md](api.md)** - REST endpoints, operations, maintenance
|
|
150
|
+
- **[patterns.md](patterns.md)** - PyIceberg examples, common use cases
|
|
151
|
+
- **[gotchas.md](gotchas.md)** - Troubleshooting, best practices, limitations
|
|
152
|
+
|
|
153
|
+
## See Also
|
|
154
|
+
|
|
155
|
+
- [Cloudflare R2 Data Catalog Docs](https://developers.cloudflare.com/r2/data-catalog/)
|
|
156
|
+
- [Apache Iceberg Docs](https://iceberg.apache.org/)
|
|
157
|
+
- [PyIceberg Docs](https://py.iceberg.apache.org/)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
R2 Data Catalog exposes standard [Apache Iceberg REST Catalog API](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml).
|
|
4
|
+
|
|
5
|
+
## Quick Reference
|
|
6
|
+
|
|
7
|
+
**Most common operations:**
|
|
8
|
+
|
|
9
|
+
| Task | PyIceberg Code |
|
|
10
|
+
| ---------------- | ----------------------------------------------------------------- |
|
|
11
|
+
| Connect | `RestCatalog(name="r2", warehouse=bucket, uri=uri, token=token)` |
|
|
12
|
+
| List namespaces | `catalog.list_namespaces()` |
|
|
13
|
+
| Create namespace | `catalog.create_namespace("logs")` |
|
|
14
|
+
| Create table | `catalog.create_table(("ns", "table"), schema=schema)` |
|
|
15
|
+
| Load table | `catalog.load_table(("ns", "table"))` |
|
|
16
|
+
| Append data | `table.append(pyarrow_table)` |
|
|
17
|
+
| Query data | `table.scan().to_pandas()` |
|
|
18
|
+
| Compact files | `table.rewrite_data_files(target_file_size_bytes=128*1024*1024)` |
|
|
19
|
+
| Expire snapshots | `table.expire_snapshots(older_than=timestamp_ms, retain_last=10)` |
|
|
20
|
+
|
|
21
|
+
## REST Endpoints
|
|
22
|
+
|
|
23
|
+
Base: `https://<account-id>.r2.cloudflarestorage.com/iceberg/<bucket-name>`
|
|
24
|
+
|
|
25
|
+
| Operation | Method | Path |
|
|
26
|
+
| ---------------- | ------ | ------------------------------------ |
|
|
27
|
+
| Catalog config | GET | `/v1/config` |
|
|
28
|
+
| List namespaces | GET | `/v1/namespaces` |
|
|
29
|
+
| Create namespace | POST | `/v1/namespaces` |
|
|
30
|
+
| Delete namespace | DELETE | `/v1/namespaces/{ns}` |
|
|
31
|
+
| List tables | GET | `/v1/namespaces/{ns}/tables` |
|
|
32
|
+
| Create table | POST | `/v1/namespaces/{ns}/tables` |
|
|
33
|
+
| Load table | GET | `/v1/namespaces/{ns}/tables/{table}` |
|
|
34
|
+
| Update table | POST | `/v1/namespaces/{ns}/tables/{table}` |
|
|
35
|
+
| Delete table | DELETE | `/v1/namespaces/{ns}/tables/{table}` |
|
|
36
|
+
| Rename table | POST | `/v1/tables/rename` |
|
|
37
|
+
|
|
38
|
+
**Authentication:** Bearer token in header: `Authorization: Bearer <token>`
|
|
39
|
+
|
|
40
|
+
## PyIceberg Client API
|
|
41
|
+
|
|
42
|
+
Most users use PyIceberg, not raw REST.
|
|
43
|
+
|
|
44
|
+
### Connection
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
48
|
+
|
|
49
|
+
catalog = RestCatalog(
|
|
50
|
+
name="my_catalog",
|
|
51
|
+
warehouse="<bucket-name>",
|
|
52
|
+
uri="<catalog-uri>",
|
|
53
|
+
token="<api-token>",
|
|
54
|
+
)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Namespace Operations
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from pyiceberg.exceptions import NamespaceAlreadyExistsError
|
|
61
|
+
|
|
62
|
+
namespaces = catalog.list_namespaces() # [('default',), ('logs',)]
|
|
63
|
+
catalog.create_namespace("logs", properties={"owner": "team"})
|
|
64
|
+
catalog.drop_namespace("logs") # Must be empty
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Table Operations
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
from pyiceberg.schema import Schema
|
|
71
|
+
from pyiceberg.types import NestedField, StringType, IntegerType
|
|
72
|
+
|
|
73
|
+
schema = Schema(
|
|
74
|
+
NestedField(1, "id", IntegerType(), required=True),
|
|
75
|
+
NestedField(2, "name", StringType(), required=False),
|
|
76
|
+
)
|
|
77
|
+
table = catalog.create_table(("logs", "app_logs"), schema=schema)
|
|
78
|
+
tables = catalog.list_tables("logs")
|
|
79
|
+
table = catalog.load_table(("logs", "app_logs"))
|
|
80
|
+
catalog.rename_table(("logs", "old"), ("logs", "new"))
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Data Operations
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
import pyarrow as pa
|
|
87
|
+
|
|
88
|
+
data = pa.table({"id": [1, 2], "name": ["Alice", "Bob"]})
|
|
89
|
+
table.append(data)
|
|
90
|
+
table.overwrite(data)
|
|
91
|
+
|
|
92
|
+
# Read with filters
|
|
93
|
+
scan = table.scan(row_filter="id > 100", selected_fields=["id", "name"])
|
|
94
|
+
df = scan.to_pandas()
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Schema Evolution
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
from pyiceberg.types import IntegerType, LongType
|
|
101
|
+
|
|
102
|
+
with table.update_schema() as update:
|
|
103
|
+
update.add_column("user_id", IntegerType(), doc="User ID")
|
|
104
|
+
update.rename_column("msg", "message")
|
|
105
|
+
update.delete_column("old_field")
|
|
106
|
+
update.update_column("id", field_type=LongType()) # int→long only
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Time-Travel
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from datetime import datetime, timedelta
|
|
113
|
+
|
|
114
|
+
# Query specific snapshot or timestamp
|
|
115
|
+
scan = table.scan(snapshot_id=table.snapshots()[-2].snapshot_id)
|
|
116
|
+
yesterday_ms = int((datetime.now() - timedelta(days=1)).timestamp() * 1000)
|
|
117
|
+
scan = table.scan(as_of_timestamp=yesterday_ms)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Partitioning
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
124
|
+
from pyiceberg.transforms import DayTransform
|
|
125
|
+
from pyiceberg.types import TimestampType
|
|
126
|
+
|
|
127
|
+
partition_spec = PartitionSpec(
|
|
128
|
+
PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day")
|
|
129
|
+
)
|
|
130
|
+
table = catalog.create_table(("events", "actions"), schema=schema, partition_spec=partition_spec)
|
|
131
|
+
scan = table.scan(row_filter="day = '2026-01-27'") # Prunes partitions
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Table Maintenance
|
|
135
|
+
|
|
136
|
+
### Compaction
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
files = table.scan().plan_files()
|
|
140
|
+
avg_mb = sum(f.file_size_in_bytes for f in files) / len(files) / (1024**2)
|
|
141
|
+
print(f"Files: {len(files)}, Avg: {avg_mb:.1f} MB")
|
|
142
|
+
|
|
143
|
+
table.rewrite_data_files(target_file_size_bytes=128 * 1024 * 1024)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**When:** Avg <10MB or >1000 files. **Frequency:** High-write daily, medium weekly.
|
|
147
|
+
|
|
148
|
+
### Snapshot Expiration
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
from datetime import datetime, timedelta
|
|
152
|
+
|
|
153
|
+
seven_days_ms = int((datetime.now() - timedelta(days=7)).timestamp() * 1000)
|
|
154
|
+
table.expire_snapshots(older_than=seven_days_ms, retain_last=10)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Retention:** Production 7-30d, dev 1-7d, audit 90+d.
|
|
158
|
+
|
|
159
|
+
### Orphan Cleanup
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
three_days_ms = int((datetime.now() - timedelta(days=3)).timestamp() * 1000)
|
|
163
|
+
table.delete_orphan_files(older_than=three_days_ms)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
⚠️ Always expire snapshots first, use 3+ day threshold, run during low traffic.
|
|
167
|
+
|
|
168
|
+
### Full Maintenance
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
# Compact → Expire → Cleanup (in order)
|
|
172
|
+
if len(table.scan().plan_files()) > 1000:
|
|
173
|
+
table.rewrite_data_files(target_file_size_bytes=128 * 1024 * 1024)
|
|
174
|
+
seven_days_ms = int((datetime.now() - timedelta(days=7)).timestamp() * 1000)
|
|
175
|
+
table.expire_snapshots(older_than=seven_days_ms, retain_last=10)
|
|
176
|
+
three_days_ms = int((datetime.now() - timedelta(days=3)).timestamp() * 1000)
|
|
177
|
+
table.delete_orphan_files(older_than=three_days_ms)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Metadata Inspection
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
table = catalog.load_table(("logs", "app_logs"))
|
|
184
|
+
print(table.schema())
|
|
185
|
+
print(table.current_snapshot())
|
|
186
|
+
print(table.properties)
|
|
187
|
+
print(f"Files: {len(table.scan().plan_files())}")
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Error Codes
|
|
191
|
+
|
|
192
|
+
| Code | Meaning | Common Causes |
|
|
193
|
+
| ---- | ------------ | -------------------------------------------- |
|
|
194
|
+
| 401 | Unauthorized | Invalid/missing token |
|
|
195
|
+
| 404 | Not Found | Catalog not enabled, namespace/table missing |
|
|
196
|
+
| 409 | Conflict | Already exists, concurrent update |
|
|
197
|
+
| 422 | Validation | Invalid schema, incompatible type |
|
|
198
|
+
|
|
199
|
+
See [gotchas.md](gotchas.md) for detailed troubleshooting.
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
How to enable R2 Data Catalog and configure authentication.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Cloudflare account with [R2 subscription](https://developers.cloudflare.com/r2/pricing/)
|
|
8
|
+
- R2 bucket created
|
|
9
|
+
- Access to Cloudflare dashboard or Wrangler CLI
|
|
10
|
+
|
|
11
|
+
## Enable Catalog on Bucket
|
|
12
|
+
|
|
13
|
+
Choose one method:
|
|
14
|
+
|
|
15
|
+
### Via Wrangler (Recommended)
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx wrangler r2 bucket catalog enable <BUCKET_NAME>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Output:**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
✅ Data Catalog enabled for bucket 'my-bucket'
|
|
25
|
+
Catalog URI: https://<account-id>.r2.cloudflarestorage.com/iceberg/my-bucket
|
|
26
|
+
Warehouse: my-bucket
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Via Dashboard
|
|
30
|
+
|
|
31
|
+
1. Navigate to **R2** → Select your bucket → **Settings** tab
|
|
32
|
+
2. Scroll to "R2 Data Catalog" section → Click **Enable**
|
|
33
|
+
3. Note the **Catalog URI** and **Warehouse name** shown
|
|
34
|
+
|
|
35
|
+
**Result:**
|
|
36
|
+
|
|
37
|
+
- Catalog URI: `https://<account-id>.r2.cloudflarestorage.com/iceberg/<bucket-name>`
|
|
38
|
+
- Warehouse: `<bucket-name>` (same as bucket name)
|
|
39
|
+
|
|
40
|
+
### Via API (Programmatic)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
curl -X POST \
|
|
44
|
+
"https://api.cloudflare.com/client/v4/accounts/<account-id>/r2/buckets/<bucket>/catalog" \
|
|
45
|
+
-H "Authorization: Bearer <api-token>" \
|
|
46
|
+
-H "Content-Type: application/json"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Response:**
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"result": {
|
|
54
|
+
"catalog_uri": "https://<account-id>.r2.cloudflarestorage.com/iceberg/<bucket>",
|
|
55
|
+
"warehouse": "<bucket>"
|
|
56
|
+
},
|
|
57
|
+
"success": true
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Check Catalog Status
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npx wrangler r2 bucket catalog status <BUCKET_NAME>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Output:**
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Catalog Status: enabled
|
|
71
|
+
Catalog URI: https://<account-id>.r2.cloudflarestorage.com/iceberg/my-bucket
|
|
72
|
+
Warehouse: my-bucket
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Disable Catalog (If Needed)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx wrangler r2 bucket catalog disable <BUCKET_NAME>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
⚠️ **Warning:** Disabling does NOT delete tables/data. Files remain in bucket. Metadata becomes inaccessible until re-enabled.
|
|
82
|
+
|
|
83
|
+
## API Token Creation
|
|
84
|
+
|
|
85
|
+
R2 Data Catalog requires API token with **both** R2 Storage + R2 Data Catalog permissions.
|
|
86
|
+
|
|
87
|
+
### Dashboard Method (Recommended)
|
|
88
|
+
|
|
89
|
+
1. Go to **R2** → **Manage R2 API Tokens** → **Create API Token**
|
|
90
|
+
2. Select permission level:
|
|
91
|
+
- **Admin Read & Write** - Full catalog + storage access (read/write)
|
|
92
|
+
- **Admin Read only** - Read-only access (for query engines)
|
|
93
|
+
3. Copy token value immediately (shown only once)
|
|
94
|
+
|
|
95
|
+
**Permission groups included:**
|
|
96
|
+
|
|
97
|
+
- `Workers R2 Data Catalog Write` (or Read)
|
|
98
|
+
- `Workers R2 Storage Bucket Item Write` (or Read)
|
|
99
|
+
|
|
100
|
+
### API Method (Programmatic)
|
|
101
|
+
|
|
102
|
+
Use Cloudflare API to create tokens programmatically. Required permissions:
|
|
103
|
+
|
|
104
|
+
- `Workers R2 Data Catalog Write` (or Read)
|
|
105
|
+
- `Workers R2 Storage Bucket Item Write` (or Read)
|
|
106
|
+
|
|
107
|
+
## Client Configuration
|
|
108
|
+
|
|
109
|
+
### PyIceberg
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
113
|
+
|
|
114
|
+
catalog = RestCatalog(
|
|
115
|
+
name="my_catalog",
|
|
116
|
+
warehouse="<bucket-name>", # Same as bucket name
|
|
117
|
+
uri="<catalog-uri>", # From enable command
|
|
118
|
+
token="<api-token>", # From token creation
|
|
119
|
+
)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Full example with credentials:**
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
import os
|
|
126
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
127
|
+
|
|
128
|
+
# Store credentials in environment variables
|
|
129
|
+
WAREHOUSE = os.getenv("R2_WAREHOUSE") # e.g., "my-bucket"
|
|
130
|
+
CATALOG_URI = os.getenv("R2_CATALOG_URI") # e.g., "https://abc123.r2.cloudflarestorage.com/iceberg/my-bucket"
|
|
131
|
+
TOKEN = os.getenv("R2_TOKEN") # API token
|
|
132
|
+
|
|
133
|
+
catalog = RestCatalog(
|
|
134
|
+
name="r2_catalog",
|
|
135
|
+
warehouse=WAREHOUSE,
|
|
136
|
+
uri=CATALOG_URI,
|
|
137
|
+
token=TOKEN,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
# Test connection
|
|
141
|
+
print(catalog.list_namespaces())
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Spark / Trino / DuckDB
|
|
145
|
+
|
|
146
|
+
See [patterns.md](patterns.md) for integration examples with other query engines.
|
|
147
|
+
|
|
148
|
+
## Connection String Format
|
|
149
|
+
|
|
150
|
+
For quick reference:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
Catalog URI: https://<account-id>.r2.cloudflarestorage.com/iceberg/<bucket>
|
|
154
|
+
Warehouse: <bucket-name>
|
|
155
|
+
Token: <r2-api-token>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Where to find values:**
|
|
159
|
+
|
|
160
|
+
| Value | Source |
|
|
161
|
+
| -------------- | ----------------------------------------------- |
|
|
162
|
+
| `<account-id>` | Dashboard URL or `wrangler whoami` |
|
|
163
|
+
| `<bucket>` | R2 bucket name |
|
|
164
|
+
| Catalog URI | Output from `wrangler r2 bucket catalog enable` |
|
|
165
|
+
| Token | R2 API Token creation page |
|
|
166
|
+
|
|
167
|
+
## Security Best Practices
|
|
168
|
+
|
|
169
|
+
1. **Store tokens securely** - Use environment variables or secret managers, never hardcode
|
|
170
|
+
2. **Use least privilege** - Read-only tokens for query engines, write tokens only where needed
|
|
171
|
+
3. **Rotate tokens regularly** - Create new tokens, test, then revoke old ones
|
|
172
|
+
4. **One token per application** - Easier to track and revoke if compromised
|
|
173
|
+
5. **Monitor token usage** - Check R2 analytics for unexpected patterns
|
|
174
|
+
6. **Bucket-scoped tokens** - Create tokens per bucket, not account-wide
|
|
175
|
+
|
|
176
|
+
## Environment Variables Pattern
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
# .env (never commit)
|
|
180
|
+
R2_CATALOG_URI=https://<account-id>.r2.cloudflarestorage.com/iceberg/<bucket>
|
|
181
|
+
R2_WAREHOUSE=<bucket-name>
|
|
182
|
+
R2_TOKEN=<api-token>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
import os
|
|
187
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
188
|
+
|
|
189
|
+
catalog = RestCatalog(
|
|
190
|
+
name="r2",
|
|
191
|
+
uri=os.getenv("R2_CATALOG_URI"),
|
|
192
|
+
warehouse=os.getenv("R2_WAREHOUSE"),
|
|
193
|
+
token=os.getenv("R2_TOKEN"),
|
|
194
|
+
)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Troubleshooting
|
|
198
|
+
|
|
199
|
+
| Problem | Solution |
|
|
200
|
+
| ----------------------- | -------------------------------------------------- |
|
|
201
|
+
| 404 "catalog not found" | Run `wrangler r2 bucket catalog enable <bucket>` |
|
|
202
|
+
| 401 "unauthorized" | Check token has both Catalog + Storage permissions |
|
|
203
|
+
| 403 on data files | Token needs both permission groups |
|
|
204
|
+
|
|
205
|
+
See [gotchas.md](gotchas.md) for detailed troubleshooting.
|