Skip to main content
Mastra v1 is coming in January 2026. Get ahead by starting new projects with the beta or upgrade your existing project today.

LibSQL Storage

The LibSQL storage implementation provides a SQLite-compatible storage solution that can run both in-memory and as a persistent database.

InstallationDirect link to Installation

npm install @mastra/libsql@latest

UsageDirect link to Usage

import { LibSQLStore } from "@mastra/libsql";

// File database (development)
const storage = new LibSQLStore({
url: "file:./storage.db",
});

// Persistent database (production)
const storage = new LibSQLStore({
url: process.env.DATABASE_URL,
});

ParametersDirect link to Parameters

url:

string
Database URL. Use ':memory:' for in-memory database, 'file:filename.db' for a file database, or any LibSQL-compatible connection string for persistent storage.

authToken?:

string
Authentication token for remote LibSQL databases.

Additional NotesDirect link to Additional Notes

In-Memory vs Persistent StorageDirect link to In-Memory vs Persistent Storage

The file configuration (file:storage.db) is useful for:

  • Development and testing
  • Temporary storage
  • Quick prototyping

For production use cases, use a persistent database URL: libsql://your-database.turso.io

Schema ManagementDirect link to Schema Management

The storage implementation handles schema creation and updates automatically. It creates the following tables:

  • mastra_workflow_snapshot: Stores workflow state and execution data
  • mastra_evals: Stores evaluation results and metadata
  • mastra_threads: Stores conversation threads
  • mastra_messages: Stores individual messages
  • mastra_traces: Stores telemetry and tracing data
  • mastra_scorers: Stores scoring and evaluation data
  • mastra_resources: Stores resource working memory data

InitializationDirect link to Initialization

When you pass storage to the Mastra class, init() is called automatically before any storage operation:

import { Mastra } from "@mastra/core";
import { LibSQLStore } from "@mastra/libsql";

const storage = new LibSQLStore({
url: "file:./storage.db",
});

const mastra = new Mastra({
storage, // init() is called automatically
});

If you're using storage directly without Mastra, you must call init() explicitly to create the tables:

import { LibSQLStore } from "@mastra/libsql";

const storage = new LibSQLStore({
url: "file:./storage.db",
});

// Required when using storage directly
await storage.init();

// Now you can use the storage
await storage.getThread({ threadId: "..." });
warning

If init() is not called, tables won't be created and storage operations will fail silently or throw errors.