Cloudflare Storage
The Cloudflare KV storage implementation provides a globally distributed, serverless key-value store solution using Cloudflare Workers KV.
InstallationDirect link to Installation
npm install @mastra/cloudflare@latest
UsageDirect link to Usage
import { CloudflareStore } from "@mastra/cloudflare";
// --- Example 1: Using Workers Binding ---
const storageWorkers = new CloudflareStore({
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 CloudflareStore({
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
bindings?:
Record<string, KVNamespace>
Cloudflare Workers KV bindings (for Workers runtime)
accountId?:
string
Cloudflare Account ID (for REST API)
apiToken?:
string
Cloudflare API Token (for REST API)
namespacePrefix?:
string
Optional prefix for all namespace names (useful for environment isolation)
keyPrefix?:
string
Optional prefix for all keys (useful for environment isolation)
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.