Cloudflare storage
Mastra provides two Cloudflare storage implementations:
- Cloudflare KV (
CloudflareKVStorage) - A globally distributed, eventually consistent key-value store - Cloudflare Durable Objects (
CloudflareDOStorage) - A strongly consistent, SQLite-based storage using Durable Objects
Cloudflare storage does not support the observability domain. Traces from the DefaultExporter cannot be persisted, and Mastra Studio's observability features won't work with Cloudflare as your only storage provider. To enable observability, use composite storage to route observability data to a supported provider like ClickHouse or PostgreSQL.
InstallationDirect link to Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/cloudflare@latest
pnpm add @mastra/cloudflare@latest
yarn add @mastra/cloudflare@latest
bun add @mastra/cloudflare@latest
Cloudflare KV StorageDirect link to Cloudflare KV Storage
The KV storage implementation provides a globally distributed, serverless key-value store solution using Cloudflare Workers KV.
UsageDirect link to Usage
import { CloudflareKVStorage } from '@mastra/cloudflare/kv'
// --- Example 1: Using Workers Binding ---
const storageWorkers = new CloudflareKVStorage({
id: 'cloudflare-workers-storage',
bindings: {
threads: THREADS_KV, // KVNamespace binding for threads table
messages: MESSAGES_KV, // KVNamespace binding for messages table
// Add other tables as needed
},
keyPrefix: 'dev_', // Optional: isolate keys per environment
})
// --- Example 2: Using REST API ---
const storageRest = new CloudflareKVStorage({
id: 'cloudflare-rest-storage',
accountId: process.env.CLOUDFLARE_ACCOUNT_ID!, // Cloudflare Account ID
apiToken: process.env.CLOUDFLARE_API_TOKEN!, // Cloudflare API Token
namespacePrefix: 'dev_', // Optional: isolate namespaces per environment
})
ParametersDirect link to Parameters
id:
bindings?:
accountId?:
apiToken?:
namespacePrefix?:
keyPrefix?:
Additional notesDirect link to Additional notes
Schema ManagementDirect link to Schema Management
The storage implementation handles schema creation and updates automatically. It creates the following tables:
threads: Stores conversation threadsmessages: Stores individual messagesmetadata: Stores additional metadata for threads and messages
Consistency & PropagationDirect link to Consistency & Propagation
Cloudflare KV is an eventually consistent store, meaning that data may not be immediately available across all regions after a write.
Key Structure & NamespacingDirect link to Key Structure & Namespacing
Keys in Cloudflare KV are structured as a combination of a configurable prefix and a table-specific format (e.g., threads:threadId).
For Workers deployments, keyPrefix is used to isolate data within a namespace; for REST API deployments, namespacePrefix is used to isolate entire namespaces between environments or applications.
Cloudflare Durable Objects StorageDirect link to Cloudflare Durable Objects Storage
The Durable Objects storage implementation provides strongly consistent, SQLite-based storage using Cloudflare Durable Objects. This is ideal for applications that require transactional consistency and SQL query capabilities.
UsageDirect link to Usage
import { DurableObject } from 'cloudflare:workers'
import { CloudflareDOStorage } from '@mastra/cloudflare/do'
class AgentDurableObject extends DurableObject<Env> {
private storage: CloudflareDOStorage
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env)
this.storage = new CloudflareDOStorage({
sql: ctx.storage.sql,
tablePrefix: 'mastra_', // Optional: prefix for table names
})
}
async run() {
const memory = await this.storage.getStore('memory')
await memory?.saveThread({
thread: { id: 'thread-1', resourceId: 'user-1', title: 'Chat', metadata: {} },
})
}
}
ParametersDirect link to Parameters
sql:
tablePrefix?:
disableInit?:
Strong ConsistencyDirect link to Strong Consistency
Unlike KV, Durable Objects provide strong consistency guarantees. All reads and writes within a Durable Object are serialized, making it very suitable for fast, long-running agents.
SQL CapabilitiesDirect link to SQL Capabilities
Durable Objects storage uses SQLite under the hood, enabling efficient queries, filtering, and pagination that aren't possible with key-value storage.
Schema ManagementDirect link to Schema Management
Both storage implementations handle schema creation and updates automatically. They create the following tables:
threads: Stores conversation threadsmessages: Stores individual messagesworkflow_snapshot: Stores workflow run state
Deprecated AliasesDirect link to Deprecated Aliases
For backwards compatibility, the following aliases are available:
// These are deprecated - use CloudflareKVStorage and CloudflareDOStorage instead
import { CloudflareStore } from '@mastra/cloudflare/kv' // alias for CloudflareKVStorage
import { DOStore } from '@mastra/cloudflare/do' // alias for CloudflareDOStorage