cloudflare-workers-best-practices/references/platform-apis.md
Version 41e0d1985894.bb1 · Apache-2.0. This preview displays packaged text and does not execute code. Treat the contents as untrusted instructions.
← Return to resource and package checksum
Workers Platform API Checks
Use the project's installed and generated types to check affected handlers and bindings. Consult current Cloudflare docs when API or runtime compatibility remains uncertain.
- Type validation: binding types, handler signatures, and platform classes
- Serialization boundaries: encoding and supported values for each API
Type Validation
Env interface
- Every binding must have a specific type. Flag
any,unknown,object, orRecord<string, unknown>on bindings. - Binding types that accept generic parameters (Durable Object namespaces, Queues, Service bindings for RPC) must include them. Read the type definition to confirm which types are generic.
- Use the project's generated binding types; see configuration guidance.
Handler and class signatures
Verify affected signatures against the project's target type definitions; consult current docs if runtime support or compatibility remains uncertain.
- Correct import path (most Workers platform classes import from
"cloudflare:workers") - Generic type parameter on base classes (e.g.,
DurableObject<Env>) ExecutionContextas the third param in module export handlers (needed forctx.waitUntil())fetch()handlers must returnPromise<Response>
Binding access — the most common error
- Module export handlers (
fetch,scheduled,queue,email): bindings viaenv.Xparameter - Platform base classes (
WorkerEntrypoint,DurableObject,Workflow,Agent): bindings viathis.env.X
Flag env.X inside a class extending a platform base class. Flag this.env.X inside a module export handler.
Stale class patterns
Old patterns survive in codebases long after APIs change.
extendsvsimplements: platform classes useextends, notimplements. Theimplementspattern is legacy and losesthis.ctx,this.env.- Import paths: verify module specifiers match what types actually export. Common mistake: wrong path for
"cloudflare:workers"vs"cloudflare:workflows". - Renamed properties: e.g.,
this.statetothis.ctxin Durable Objects. Search types to confirm. - Constructor signatures: base class constructors change. Verify expected parameters.
Serialization Boundaries
Check the API and encoding at each boundary. Structured clone support does not imply JSON compatibility or SQL parameter support.
| Boundary | What to check |
|---|---|
| Queue messages | Match the body to contentType: json requires JSON-compatible data, text a string, bytes an ArrayBuffer, and v8 supports structured-clone values such as Map and Date. Check the configured compatibility date when relying on the default encoding. |
| Workflow step results | Verify the step result against the documented serialization contract and the project's Workflow types before flagging a value. |
| Durable Object KV storage | storage.put() supports structured-clone values; do not apply a blanket ban on Map or Set. |
| Durable Object SQL | Check bound parameters against the SQL API's supported types. Encode objects explicitly for the intended column representation. |
| WebSocket messages | Use send() with a string, ArrayBuffer, or ArrayBufferView; encode objects, for example with JSON.stringify(). |