Skip to content

Turso.Database reference

Source: src/Turso/Connect.ts

Connect to a Turso database from a Worker, Lambda, or other host. The host gets the database’s URL and its own DatabaseToken. Your Turso API token stays on your machine.

Effect SQL over a Turso database

Effect.gen(function* () {
const conn = yield* Turso.Connect(Db);
const sql = yield* SQL.LibSQL(conn);
return {
fetch: Effect.gen(function* () {
return yield* HttpServerResponse.json(yield* sql`SELECT 1 AS value`);
}),
};
}).pipe(Effect.provide(Turso.ConnectHttp));

Drizzle over a Turso database

const conn = yield* Turso.Connect(Db);
const db = yield* Drizzle.LibSQL(conn, { relations });

AWS Lambda (install the native libSQL client)

export default class Api extends Lambda.Function<Api>()(
"Api",
{ main: import.meta.url, build: { install: ["@libsql/client"] } },
Effect.gen(function* () {
const sql = yield* SQL.LibSQL(yield* Turso.Connect(Db));
// ...
}).pipe(Effect.provide(Turso.ConnectHttp)),
) {}

Read-only access

const conn = yield* Turso.Connect(Db, { authorization: "read-only" });

Source: src/Turso/Database.ts

A Turso database: a SQLite database that lives in a Group. Connect to it from a Worker or Lambda with Connect, or create a DatabaseToken for other apps.

Database in a group

const group = yield* Turso.Group("Group", { location: "aws-us-east-1" });
const db = yield* Turso.Database("Db", { group: group.name });

Database with delete protection and an IP allowlist

const db = yield* Turso.Database("Db", {
group: group.name,
deleteProtection: true,
allowedIps: ["203.0.113.0/24"],
});
const preview = yield* Turso.Database("Preview", {
group: group.name,
seed: { type: "database", name: db.name },
});

Point migrations at a folder of .sql files (or a Drizzle.Schema). Pending migrations are applied in order on each deploy.

Apply migrations from a directory

const db = yield* Turso.Database("Db", {
group: group.name,
migrations: "./migrations",
});

Seed with SQL files

const db = yield* Turso.Database("Db", {
group: group.name,
importFiles: ["./seed/users.sql"],
});
const conn = yield* Turso.Connect(Db);
const db = yield* Drizzle.LibSQL(conn);

Source: src/Turso/DatabaseToken.ts

A token that lets an app run SQL on one Turso database. Workers and Lambdas should use Connect, which creates one for you. Use DatabaseToken for anything else, such as a container or a CI job.

You can’t cancel a single token. Changing a prop creates a new token, but the old one keeps working until it expires. Destroying the resource doesn’t stop it either. Give tokens you share an expiration, or cancel every token for the database with turso db tokens invalidate.

Full-access token

const token = yield* Turso.DatabaseToken("Token", {
database: db.name,
});

Read-only token that expires after two weeks

const token = yield* Turso.DatabaseToken("ReadOnly", {
database: db.name,
authorization: "read-only",
expiration: "2w",
});