Spin up a Turso database for every user, agent, and tenant — provisioned on demand, no dashboards. On Turso Cloud or your own infrastructure (BYOC).
Turso · Docs · Blog & Tutorials
Name a database and start querying — it's provisioned the first time you touch it:
import { resolve } from "@tursodatabase/sdk-experimental";
import { connect } from "@tursodatabase/serverless";
// One database per agent — provisioned on first use.
const db = connect(await resolve(`agent-${agentId}`));
await db.exec("CREATE TABLE IF NOT EXISTS memories (content TEXT NOT NULL)");
await db.run("INSERT INTO memories (content) VALUES (?)", "User prefers concise answers.");- Zero-config provisioning — Databases are created on first use. No dashboards, no setup steps.
- A database for everyone — Give every user, agent, or tenant their own database. Lightweight enough to multiply into millions.
- Bring your own driver —
resolve()returns a config you pass straight toconnect()from@tursodatabase/serverless, an ORM, or any libsql-compatible client. - Cloud or BYOC — Works against Turso Cloud or your own infrastructure (Bring Your Own Cloud).
npm install @tursodatabase/sdk-experimental @tursodatabase/serverless-
Get your Turso API token:
turso auth api-tokens mint my-app-token
-
Get your organization slug:
turso org list
-
Create a database group for your app (or use an existing one):
turso group create my-project
-
Set these environment variables for your app:
TURSO_API_TOKEN=your-api-token TURSO_ORG=your-org-slug TURSO_GROUP=my-project
All databases are scoped to the configured group. You can create as many databases as you like within it, and they can only be created in and accessed from that group.
import { resolve } from "@tursodatabase/sdk-experimental";
import { connect } from "@tursodatabase/serverless";
// One database per tenant — provisioned automatically on first use.
const db = connect(await resolve(`tenant-${tenantId}`));
// Create tables
await db.exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
`);
// Insert data
await db.run(
"INSERT INTO users (name, email) VALUES (?, ?)",
"Alice", "alice@example.com"
);
// Query data
const users = await db.all("SELECT * FROM users");
console.log(users);Everything after connect() is the @tursodatabase/serverless SDK — prepared statements, batches, and transactions all work as documented there.
See the Manual for the full API reference — resolve and its options, including encryption.
Visit our official documentation for more details.
Join us on Discord to get help using this SDK. Report security issues via email.