Skip to content

Architecture

Application (your code)
↓
Client (Jsorm, QueryBuilder)
↓
Core (defineModel, defineConfig, types, AST)
↓
Compiler (@jsorm/compiler — shared SQL generation)
↓
Provider (driver + connection, delegates to compiler)
↓
Database

Upper layers depend on lower ones. Lower layers never depend on upper ones.


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

  • Never executes queries
  • Never knows Node or Browser
  • Never imports providers or client
  • Never generates SQL
  • Never knows dialects
  • Only coordinates providers via AST
  • Never knows models or config
  • Only interprets AST and executes
  • Never contain logic or queries
  • Metadata only
  • Never use cross imports
  • Always reference models by name
  • Everything goes through AST
  • Immutable
  • Everything goes as options in execution methods

JSORM requires Node.js 22+ minimum:

  • target: es2024 in tsdown
  • engines: >=22 in package.json
  • node: protocol imports