Architecture
Layers
Section titled “Layers”Application (your code) ↓Client (Jsorm, QueryBuilder) ↓Core (defineModel, defineConfig, types, AST) ↓Compiler (@jsorm/compiler — shared SQL generation) ↓Provider (driver + connection, delegates to compiler) ↓DatabaseUpper layers depend on lower ones. Lower layers never depend on upper ones.
Packages
Section titled “Packages”| Package | Description | Runtime |
|---|---|---|
@jsorm/core |
Types, defineModel, t.*, r.* |
Edge, Browser, Node |
@jsorm/client |
Jsorm, QueryBuilder, providers |
Edge, Browser, Node |
@jsorm/compiler |
Shared SQL generation for SQL providers | Not edge-compatible (node:crypto sync). Dialect-configurable. Depends only on @jsorm/core types |
@jsorm/cli |
jsorm configure, jsorm gen |
Node 22+ |
@jsorm/provider-sqlite-node |
SQLite provider (depends on @jsorm/compiler) |
Node 22+ |
@jsorm/provider-pg-node |
PostgreSQL provider (depends on @jsorm/compiler) |
Node 22+ |
@jsorm/provider-indexeddb |
IndexedDB provider (own non-SQL compiler) | Browser |
Strict rules
Section titled “Strict rules”- Never executes queries
- Never knows Node or Browser
- Never imports providers or client
Client
Section titled “Client”- Never generates SQL
- Never knows dialects
- Only coordinates providers via AST
Provider
Section titled “Provider”- Never knows models or config
- Only interprets AST and executes
Models
Section titled “Models”- Never contain logic or queries
- Metadata only
Relations
Section titled “Relations”- Never use cross imports
- Always reference models by name
Queries
Section titled “Queries”- Everything goes through AST
- Immutable
- Everything goes as options in execution methods
Node.js 22+
Section titled “Node.js 22+”JSORM requires Node.js 22+ minimum:
target: es2024in tsdownengines: >=22in package.jsonnode:protocol imports
