Loading...
Loading...
Reviews and authors Cloudflare Workers code against production best practices. Load when writing new Workers, reviewing Worker code, configuring wrangler.jsonc, or checking for common Workers anti-patterns (streaming, floating promises, global state, secrets, bindings, observability). Biases towards retrieval from Cloudflare docs over pre-trained knowledge.
npx skill4agent add cloudflare/cloudflare-docs workers-best-practices| Source | How to retrieve | Use for |
|---|---|---|
| Workers best practices | Fetch | Canonical rules, patterns, anti-patterns |
| Workers types | See | API signatures, handler types, binding types |
| Wrangler config schema | | Config fields, binding shapes, allowed values |
| Cloudflare docs | Search tool or | API reference, compatibility dates/flags |
node_modules# Fetch latest workers types
mkdir -p /tmp/workers-types-latest && \
npm pack @cloudflare/workers-types --pack-destination /tmp/workers-types-latest && \
tar -xzf /tmp/workers-types-latest/cloudflare-workers-types-*.tgz -C /tmp/workers-types-latest
# Types at /tmp/workers-types-latest/package/index.d.tsreferences/rules.mdreferences/review.md| Rule | Summary |
|---|---|
| Compatibility date | Set |
| nodejs_compat | Enable the |
| wrangler types | Run |
| Secrets | Use |
| wrangler.jsonc | Use JSONC config for non-secret settings — newer features are JSON-only |
| Rule | Summary |
|---|---|
| Streaming | Stream large/unknown payloads — never |
| waitUntil | Use |
| Rule | Summary |
|---|---|
| Bindings over REST | Use in-process bindings (KV, R2, D1, Queues) — not the Cloudflare REST API |
| Queues & Workflows | Move async/background work off the critical path |
| Service bindings | Use service bindings for Worker-to-Worker calls — not public HTTP |
| Hyperdrive | Always use Hyperdrive for external PostgreSQL/MySQL connections |
| Rule | Summary |
|---|---|
| Logs & Traces | Enable |
| Rule | Summary |
|---|---|
| No global request state | Never store request-scoped data in module-level variables |
| Floating promises | Every Promise must be |
| Rule | Summary |
|---|---|
| Web Crypto | Use |
| No passThroughOnException | Use explicit try/catch with structured error responses |
| Anti-pattern | Why it matters |
|---|---|
| Memory exhaustion — 128 MB limit |
| Hardcoded secrets in source or config | Credential leak via version control |
| Predictable, not cryptographically secure |
Bare | Floating promise — dropped result, swallowed error |
| Module-level mutable variables for request state | Cross-request data leaks, stale state, I/O errors |
| Cloudflare REST API from inside a Worker | Unnecessary network hop, auth overhead, added latency |
| Hides bugs, makes debugging impossible |
Hand-written | Drifts from actual wrangler config bindings |
| Direct string comparison for secret values | Timing side-channel — use |
Destructuring | Loses |
| Defeats type safety for all binding access |
| Hides real type incompatibilities — fix the design |
| Legacy — loses |
| Should be |
anyreferences/review.mdnpx tsc --noEmitno-floating-promisesreferences/rules.mddurable-objectswrangler