Skip to content

Worker

The Worker resource lets you deploy serverless JavaScript/TypeScript functions to Cloudflare's global network.

Minimal Example

Deploy a basic worker with an HTTP handler:

ts
import { Worker } from "alchemy/cloudflare";

const worker = await Worker("api", {
  name: "api-worker", 
  script: "export default { async fetch() { return new Response('Hello') } }"
});

Worker with Bundling

Bundle and deploy a TypeScript worker:

ts
import { Worker } from "alchemy/cloudflare";

const worker = await Worker("api", {
  name: "api-worker",
  entrypoint: "./src/worker.ts",
  bundle: {
    minify: true
  }
});

Worker with Bindings

Bind KV namespaces, Durable Objects and other resources:

ts
import { Worker, KVNamespace, DurableObjectNamespace } from "alchemy/cloudflare";

const kv = await KVNamespace("store", {
  title: "my-store"
});

const counter = new DurableObjectNamespace("counter", {
  className: "Counter"
});

const worker = await Worker("api", {
  name: "api-worker",
  script: "export default { async fetch() { return new Response('Hello') } }",
  bindings: {
    STORE: kv,
    COUNTER: counter
  }
});

Worker with Custom Domain

Deploy a worker with a custom domain:

ts
import { Worker, CustomDomain } from "alchemy/cloudflare";

const worker = await Worker("api", {
  name: "api-worker",
  script: "export default { async fetch() { return new Response('Hello') } }"
});

const domain = await CustomDomain("api-domain", {
  name: "api.example.com",
  zoneId: "YOUR_ZONE_ID",
  workerName: worker.name
});

Bind to a Worker

Bind a worker to another worker:

ts
import { Worker } from "alchemy/cloudflare";

const backend = await Worker("backend", {
  name: "backend-worker",
  script: "export default { async fetch() { return new Response('Hello') } }"
});

const frontend = await Worker("frontend", {
  name: "frontend-worker", 
  script: "export default { async fetch() { return new Response('Hello') } }",
  bindings: {
    BACKEND: backend
  }
});