SQLite Node
Self-contained provider for SQLite in Node.js. ESM-only.
ESM-only. Only supports
import. Not compatible withrequire().
Responsibilities
Section titled “Responsibilities”- Driver: better-sqlite3
- Compiler: SQL generation via @jsorm/compiler (sqliteDialect)
- Connection manager: WAL mode + foreign keys enabled
- Execute: CRUD and aggregation
- Schema sync: creates missing tables
import { createSqliteNodeProvider } from "@jsorm/provider-sqlite-node";
const result = createSqliteNodeProvider(models, { database: "./data.db" | ":memory:" });ProviderOptions
Section titled “ProviderOptions”| Param | Type | Description |
|---|---|---|
database |
string |
Path to .db file or :memory: (default: :memory:) |
syncSchema |
boolean |
Create missing tables on instantiation (default: false) |
cursorSecret |
string |
Secret for signing cursors (required for .cursor()) |
Usage with env()
Section titled “Usage with env()”import { defineConfig, env } from "@jsorm/core";
export default defineConfig({ databases: { main: { provider: "sqlite-node", options: { database: env("DATABASE_URL_SQLITE") }, }, },});DATABASE_URL_SQLITE=./data/prod.dbIf the value is not an env var name (e.g., ./data.db or :memory:), it is used directly without resolution. Detection is by pattern: ^[A-Z_][A-Z0-9_]*$.
Return
Section titled “Return”type SqliteNodeProviderResult = { provider: Provider; raw: (sql: string, params?: unknown[]) => unknown; all: (sql: string, params?: unknown[]) => unknown[]; close: () => void; syncSchema: () => SchemaReport; getMissingTables: () => string[];};Registration with createJsorm
Section titled “Registration with createJsorm”import { createJsorm } from "@jsorm/client";import { createSqliteNodeProvider } from "@jsorm/provider-sqlite-node";
const jsorm = createJsorm<DB>(config, models, { main: (ctx) => createSqliteNodeProvider(ctx.models, ctx.options),});Schema sync
Section titled “Schema sync”syncSchema() compares model metadata against existing SQLite tables and creates missing ones.
const result = createSqliteNodeProvider(models, { syncSchema: true });// Console output: [jsorm] Created tables: users, posts, rolesIt can also be called after instantiation:
const result = createSqliteNodeProvider(models);const report = result.syncSchema();console.log(report.created); // ["users", "posts"]console.log(report.existing); // []Connection details
Section titled “Connection details”- Enables
journal_mode = WALfor better concurrency - Enables
foreign_keys = ON - All columns use native SQLite typing (TEXT, INTEGER, REAL)
