Durable Object Namespace
A Durable Object namespace is a set of Durable Objects that are backed by the same Durable Object class. There is only one Durable Object namespace per class. A Durable Object namespace can contain any number of Durable Objects.
The DurableObjectNamespace
interface is used to obtain a reference to new or existing Durable Objects. The interface is accessible from the fetch handler on a Cloudflare Worker via the env
parameter, which is the standard interface when referencing bindings declared in the Wrangler configuration file.
This interface defines several methods that can be used to create an ID for a Durable Object. Note that creating an ID for a Durable Object does not create the Durable Object. The Durable Object is created lazily after calling DurableObjectNamespace::get
to create a DurableObjectStub
from a DurableObjectId
. This ensures that objects are not constructed until they are actually accessed.
import { DurableObject } from "cloudflare:workers";
// Durable Objectexport class MyDurableObject extends DurableObject { ...}
// Workerexport default { async fetch(request, env) { // Every unique ID refers to an individual instance of the Durable Object class const id = env.MY_DURABLE_OBJECT.idFromName("foo");
// A stub is a client Object used to invoke methods defined by the Durable Object const stub = env.MY_DURABLE_OBJECT.get(id); ... }}
import { DurableObject } from "cloudflare:workers";
export interface Env { MY_DURABLE_OBJECT: DurableObjectNamespace<MyDurableObject>;}
// Durable Objectexport class MyDurableObject extends DurableObject { ...}
// Workerexport default { async fetch(request, env) { // Every unique ID refers to an individual instance of the Durable Object class const id = env.MY_DURABLE_OBJECT.idFromName("foo");
// A stub is a client Object used to invoke methods defined by the Durable Object const stub = env.MY_DURABLE_OBJECT.get(id); ... }} satisfies ExportedHandler<Env>;
idFromName
creates a unique DurableObjectId
which refers to an individual instance of the Durable Object class. Named Durable Objects are the most common method of referring to Durable Objects.
const fooId = env.MY_DURABLE_OBJECT.idFromName("foo");const barId = env.MY_DURABLE_OBJECT.idFromName("bar");
- A required string to be used to generate a
DurableObjectId
corresponding to the name of a Durable Object.
- A
DurableObjectId
referring to an instance of a Durable Object class.
newUniqueId
creates a randomly generated and unique DurableObjectId
which refers to an individual instance of the Durable Object class. IDs created using newUniqueId
, will need to be stored as a string in order to refer to the same Durable Object again in the future. For example, the ID can be stored in Workers KV, another Durable Object, or in a cookie in the user's browser.
const id = env.MY_DURABLE_OBJECT.newUniqueId();const euId = env.MY_DURABLE_OBJECT.newUniqueId({ jurisdiction: "eu" });
- An optional object with the key
jurisdiction
and value of a jurisdiction string.
- A
DurableObjectId
referring to an instance of the Durable Object class.
idFromString
creates a DurableObjectId
from a previously generated ID that has been converted to a string. This method throws an exception if the ID is invalid, for example, if the ID was not created from the same DurableObjectNamespace
.
// Create a new unique IDconst id = env.MY_DURABLE_OBJECT.newUniqueId();// Convert the ID to a string to be saved elsewhere, e.g. a session cookieconst session_id = id.toString();
...// Recreate the ID from the stringconst id = env.MY_DURABLE_OBJECT.idFromString(session_id);
- A required string corresponding to a
DurableObjectId
previously generated either bynewUniqueId
oridFromName
.
- A
DurableObjectId
referring to an instance of a Durable Object class.
get
obtains a DurableObjectStub
from a DurableObjectId
which can be used to invoke methods on a Durable Object.
This method returns the stub immediately, often before a connection has been established to the Durable Object. This allows requests to be sent to the instance right away, without waiting for a network round trip.
const id = env.MY_DURABLE_OBJECT.newUniqueId();const stub = env.MY_DURABLE_OBJECT.get(id);
- A required
DurableObjectId
- An optional object with the key
locationHint
and value of a locationHint string.
- A
DurableObjectStub
referring to an instance of a Durable Object class.
jurisdiction
creates a subnamespace from a namespace where all Durable Object IDs and references created from that subnamespace will be restricted to the specified jurisdiction.
const subnamespace = env.MY_DURABLE_OBJECT.jurisdiction("foo");const euId = subnamespace.idFromName("foo");
- A required jurisdiction string.
- A
DurableObjectNamespace
scoped to a particular geographic jurisdiction.