better-sqlite3
SQLite driver using better-sqlite3
Installation
pnpm add better-sqlite3Configuration
import { createClient } from "viborm/drivers/sqlite3";
const client = createClient({
dataDir: "./database.sqlite",
schema,
});Options
| Option | Type | Description |
|---|---|---|
client | Database | Existing better-sqlite3 database |
dataDir | string | Path to SQLite file (:memory: for in-memory) |
options | object | Database options |
Options Object
| Option | Type | Description |
|---|---|---|
readonly | boolean | Open in read-only mode |
fileMustExist | boolean | Throw if file doesn't exist |
timeout | number | Busy timeout in milliseconds |
verbose | function | Logging function |
In-Memory Database
import { createClient } from "viborm/drivers/sqlite3";
// Default is in-memory
const client = createClient({
schema,
});Using Existing Database
import Database from "better-sqlite3";
import { createClient } from "viborm/drivers/sqlite3";
const db = new Database("./database.sqlite");
const client = createClient({
client: db,
schema,
});Transactions
better-sqlite3 supports full transactions with savepoints for nested transactions.
await client.$transaction(async (tx) => {
await tx.user.create({ data: { name: "Alice" } });
await tx.post.create({ data: { title: "Hello", authorId: "..." } });
});Features
- Synchronous API (fastest SQLite driver for Node.js)
- Full transaction support with savepoints
RETURNINGclause support (SQLite 3.35+)
Limitations
- SQLite dialect - no
LATERALjoins, limitedFULL OUTER JOIN - JSON columns return as strings and are parsed automatically
- Boolean values stored as integers (0/1)
- Node.js only (native module)