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) ↓DatabaseAvailable providers
Section titled “Available providers”| 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 |
Creating a provider
Section titled “Creating a provider”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};Registration
Section titled “Registration”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),});Interchangeability
Section titled “Interchangeability”Adding a PostgreSQL provider does not require modifying @jsorm/core or @jsorm/client. Each provider is a complete, independent unit.
