DurableObjectNamespace ​
A Durable Object Namespace represents a globally unique namespace for Durable Objects that provide strongly consistent storage and coordination.
Minimal Example ​
Create a basic Durable Object namespace for stateful chat rooms.
ts
import { DurableObjectNamespace } from "alchemy/cloudflare";
const rooms = new DurableObjectNamespace("chat-rooms", {
className: "ChatRoom"
});
Create with SQLite Storage ​
Create a Durable Object with SQLite storage for user data.
ts
import { DurableObjectNamespace } from "alchemy/cloudflare";
const users = new DurableObjectNamespace("user-store", {
className: "User",
sqlite: true
});
Create in Production Environment ​
Create a Durable Object in production for game state management.
ts
import { DurableObjectNamespace } from "alchemy/cloudflare";
const game = new DurableObjectNamespace("game-state", {
className: "GameState",
scriptName: "game-worker",
environment: "production"
});
Bind to a Worker ​
Bind a Durable Object namespace to a Worker to enable access.
ts
import { Worker, DurableObjectNamespace } from "alchemy/cloudflare";
const counter = new DurableObjectNamespace("counter", {
className: "Counter"
});
await Worker("my-worker", {
name: "my-worker",
script: "console.log('Hello, world!')",
bindings: {
COUNTER: counter
}
});
Cross-Script Durable Object Binding ​
Share durable objects between workers by defining them in one worker and accessing them from another:
ts
import { Worker, DurableObjectNamespace } from "alchemy/cloudflare";
// Worker that defines and owns the durable object
const dataWorker = await Worker("data-worker", {
entrypoint: "./src/data.ts",
bindings: {
// Bind to its own durable object
STORAGE: new DurableObjectNamespace("storage", {
className: "DataStorage"
})
}
});
// Worker that accesses the durable object from another worker
const apiWorker = await Worker("api-worker", {
entrypoint: "./src/api.ts",
bindings: {
// Cross-script binding to the data worker's durable object
SHARED_STORAGE: dataWorker.bindings.STORAGE
}
});