Skip to content

Providers

Each provider is a self-contained unit that contains: driver + connection manager. SQL providers (pg, sqlite) delegate SQL generation to @jsorm/compiler; IndexedDB has its own non-SQL compiler.

QueryAST
↓
@jsorm/compiler (shared SQL generation)
↓
Driver (pg / better-sqlite3 / IndexedDB)
↓
Database
Provider Package Runtime
SQLite (Node) @jsorm/provider-sqlite-node Node 22+
PostgreSQL (Node) @jsorm/provider-pg-node Node 22+
IndexedDB (Browser) @jsorm/provider-indexeddb Browser

A provider is a factory function that receives models and returns:

type ProviderResult = {
provider: Provider; // For Jsorm
raw: (sql: string, params?: unknown[]) => unknown; // Raw SQL
all: (sql: string, params?: unknown[]) => unknown[]; // Raw SQL (multiple rows)
close: () => void; // Close connection
syncSchema: () => SchemaReport; // Create missing tables
getMissingTables: () => string[]; // List missing tables
};
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),
});

Adding a PostgreSQL provider does not require modifying @jsorm/core or @jsorm/client. Each provider is a complete, independent unit.