skill

Durable Objects

cloudflare82,643+ تثبيتموثوق

نبذة

# Durable Objects

Build stateful, coordinated applications on Cloudflare's edge using Durable Objects.

## Retrieval Sources

Your knowledge of Durable Objects APIs and configuration may be outdated. **Prefer retrieval over pre-training** for any Durable Objects task.

| Resource | URL | |----------|-----| | Docs | https://developers.cloudflare.com/durable-objects/ | | API Reference | https://developers.cloudflare.com/durable-objects/api/ | | Best Practices | https://developers.cloudflare.com/durable-objects/best-practices/ | | Examples | https://developers.cloudflare.com/durable-objects/examples/ | | Roles and permissions | https://developers.cloudflare.com/workers/authorization/durable-objects/ |

Fetch the relevant doc page when implementing features.

## When to Use

- Creating new Durable Object classes for stateful coordination - Implementing RPC methods, alarms, or WebSocket handlers - Reviewing existing DO code for best practices - Configuring wrangler.jsonc/toml for DO bindings and migrations - Writing tests with Cloudflare’s Vitest integration - Designing sharding strategies and parent-child relationships

## Reference Documentation

- `./references/rules.md` - Core rules, storage, concurrency, RPC, alarms - [Testing reference](./references/testing.md) - Current Vitest documentation, migration choices, and test selection - `./references/workers.md` - Workers handlers, types, wrangler config, observability

Search: `blockConcurrencyWhile`, `idFromName`, `getByName`, `setAlarm`, `sql.exec`

## Core Principles

### Use Durable Objects For

| Need | Example | |------|---------| | Coordination | Chat rooms, multiplayer games, collaborative docs | | Strong consistency | Inventory, booking systems, turn-based games | | Per-entity storage | Multi-tenant SaaS, per-user data | | Persistent connections | WebSockets, real-time notifications | | Scheduled work per entity | Subscription renewals, game timeouts |

### Do NOT Use For

- Stateless request handling (use plain Workers) - Maximum global distribution needs - High fan-out independent requests

## Quick Reference

### Wrangler Configuration

```jsonc // wrangler.jsonc { "durable_objects": { "bindings": [{ "name": "MY_DO", "class_name": "MyDurableObject" }] }, "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyDurableObject"] }] } ```

### Basic Durable Object Pattern

```typescript import { DurableObject } from "cloudflare:workers";

export interface Env { MY_DO: DurableObjectNamespace<MyDurableObject>; }

export class MyDurableObject extends DurableObject<Env> { constructor(ctx: DurableObjectState, env: Env) { super(ctx, env); ctx.blockConcurrencyWhile(async () => { this.ctx.storage.sql.exec(` CREATE TABLE IF NOT EXISTS items ( id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT NOT NULL ) `); }); }

async addItem(data: string): Promise<number> { const result = this.ctx.storage.sql.exec<{ id: number }>( "INSERT INTO items (data) VALUES (?) RETURNING id", data ); return result.one().id; } }

export default { async fetch(request: Request, env: Env): Promise<Response> { const stub = env.MY_DO.getByName("my-instance"); const id = await stub.addItem("hello"); return Response.json({ id }); }, }; ```

## Critical Rules

1. **Model around coordination atoms** - One DO per chat room/game/user, not one global DO 2. **Use `getByName()` for deterministic routing** - Same input = same DO instance 3. **Use SQLite storage** - Configure `new_sqlite_classes` in migrations 4. **Initialize in constructor** - Use `blockConcurrencyWhile()` for schema setup only 5. **Use RPC methods** - Not fetch() handler (compatibility date >= 2024-04-03) 6. **Persist first, cache second** - Always write to storage before updating in-memory state 7. **One alarm per DO** - `setAlarm()` replaces any existing alarm

## Authorization

Durable Objects do not have separate roles or permissions; access follows the Worker that implements them. Retrieve the current [Durable Objects authorization guidance](https://developers.cloudflare.com/workers/authorization/durable-objects/) before granting observability or Data Studio access, and scope the Workers role to the intended Worker or Workers product.

## Anti-Patterns (NEVER)

- Single global DO handling all requests (bottleneck) - Using `blockConcurrencyWhile()` on every request (kills throughput) - Storing critical state only in memory (lost on eviction/crash) - Using `await` between related storage writes (breaks atomicity) - Holding `blockConcurrencyWhile()` across `fetch()` or external I/O

## Stub Creation

```typescript // Deterministic - preferred for most cases const stub = env.MY_DO.getByName("room-123");

// From existing ID string const id = env.MY_DO.idFromString(storedIdString); const stub = env.MY_DO.get(id);

// New unique ID - store mapping externally const id = env.MY_DO.newUniqueId(); const stub = env.MY_DO.ge

التثبيت

شغل هذا الأمر

npx skills add cloudflare/skills

يعمل مع

claude appclaude codeclaude apicursorcodexwindsurfclinezed

خطوات التثبيت

Install with `npx skills add cloudflare/skills`, or clone the repository and copy the `skills/durable-objects` folder into your Claude skills directory.

عرض المصدر

أصول ذات صلة

مختارات أخرى في التطوير والبرمجة.

mcp serverclaude_codecursorcodex
npm install @modelcontextprotocol/server-fetch
خادم جلب الويب (Fetch)
خادم لجلب محتوى الويب وتحويله لاستخدام فعال مع نماذج اللغة. يجلب الروابط ويحولها إلى ماركداون نظيف.★ 4.9 · 5,000+
mcp serverclaude_codecursorcodex
npm install @modelcontextprotocol/server-memory
خادم الذاكرة (Memory)
نظام ذاكرة دائمة قائم على رسم بياني معرفي. يتيح للوكلاء تذكر المعلومات عبر المحادثات.★ 4.9 · 5,000+
mcp serverclaude_codecursorcodex
npm install @modelcontextprotocol/server-filesystem
خادم نظام الملفات (Filesystem)
عمليات ملفات آمنة مع ضوابط وصول قابلة للضبط. قراءة الملفات المحلية وكتابتها وسردها والبحث فيها.★ 4.9 · 5,000+
mcp serverclaude_codecursorcodex
npm install @modelcontextprotocol/server-git
خادم Git
أدوات لقراءة مستودعات Git والبحث فيها والتحكم بها — السجل والفروقات وتتبع المؤلفين والفروع والمزيد.★ 4.9 · 5,000+
mcp serverclaude_codecursorcodex
npm install @modelcontextprotocol/server-everything
خادم الاختبار الشامل (Everything)
خادم مرجعي للاختبار يجرب كل ميزات بروتوكول MCP — الأوامر والموارد والأدوات.★ 4.9 · 5,000+
mcp serverclaude_codecursorcodex
npm install @modelcontextprotocol/server-sequentialthinking
خادم التفكير المتسلسل (Sequential Thinking)
حل ديناميكي للمشكلات عبر تسلسلات تفكير منظمة مع التفرع والمراجعة والتأمل.★ 4.9 · 5,000+

افحص قبل التثبيت

شغل أي مصدر عبر فحوصاتنا - الظهور في الذكاء الاصطناعي والأمان والأداء واكتشاف التقنيات.

المزيد في التطوير والبرمجة