stores/cloudflare-d1/README.md
A Mastra store for Cloudflare D1 SQL databases, supporting threads, messages, workflows, evaluations, and traces with robust SQL features.
pnpm add @mastra/cloudflare-d1
import { D1Store } from '@mastra/cloudflare-d1';
const store = new D1Store({
binding: env.DB, // D1Database binding from Worker environment
tablePrefix: 'mastra_', // optional
});
import { D1Store } from '@mastra/cloudflare-d1';
const store = new D1Store({
accountId: '<your-account-id>',
databaseId: '<your-d1-database-id>',
apiToken: '<your-api-token>',
tablePrefix: 'mastra_', // optional
});
import { D1Store } from '@mastra/cloudflare-d1';
const store = new D1Store({
client: {
query: ({ sql, params }) => {
// do something
},
},
tablePrefix: 'mastra_', // optional
});
saveThread(thread): Create or update a threadgetThreadById({ threadId }): Get a thread by IDlistThreadsByResourceId({ resourceId, offset, limit, orderBy? }): List paginated threads for a resourceupdateThread({ id, title, metadata }): Update the title and/or metadata of a thread.deleteThread({ threadId }): Delete a thread and all its messages.saveMessages({ messages }): Save multiple messages in a batch operation (uses prepared statements).listMessages({ threadId, perPage?, page? }): Retrieve messages for a thread with pagination.listMessagesById({ messageIds }): Get specific messages by their IDsupdateMessages({ messages }): Update existing messagespersistWorkflowSnapshot({ workflowName, runId, snapshot }): Save workflow state for a given workflow/run.loadWorkflowSnapshot({ workflowName, runId }): Load persisted workflow state.listWorkflowRuns({ workflowName, pagination }): List workflow runs with paginationgetWorkflowRunById({ workflowName, runId }): Get a specific workflow rundeleteMessages(messageIds): Message deletion is not currently supportedclearTable({ tableName }): Remove all records from a logical table.batchInsert({ tableName, records }): Batch insert multiple records.insert({ tableName, record }): Insert a single record into a table.The D1 store supports the following data types:
text: Stringtimestamp: ISO8601 string (converted to/from Date)uuid: Stringjsonb: JSON-encoded objectinteger: Integer (for internal counters, etc)All metadata and custom fields are automatically serialized/deserialized as JSON.
| Option | Type | Description |
|---|---|---|
| binding | D1Database | D1 Workers binding (for Workers) |
| accountId | string | Cloudflare Account ID (for REST API) |
| databaseId | string | D1 Database ID (for REST API) |
| apiToken | string | Cloudflare API Token (for REST API) |
| tablePrefix | string | Optional prefix for all table names |
Each logical Mastra table maps to a SQL table in D1 (with optional prefix):
mastra_threads — stores threadsmastra_messages — stores messagesmastra_workflow_snapshot — stores workflow snapshotsmastra_evals — stores evaluationsmastra_traces — stores traces(The prefix is configurable via tablePrefix.)
No explicit cleanup is required. Connections are managed by the platform.