Ir al contenido

Runtimes

Elige paquetes según el límite del runtime

Sección titulada «Elige paquetes según el límite del runtime»

jsorm separa las APIs de authoring, los imports runtime-safe, la propiedad del CLI y el transporte hacia la base de datos para que cada entorno use solo lo que realmente puede ejecutar.

PaqueteÚsalo paraNo lo uses para
@jsorm/corePaquete principal para modelos, queries, tipos de config y primitivas de migración en apps con NodeBundles edge que no pueden usar APIs de Node o binarios nativos
@jsorm/runtimeCódigo de aplicación universal o edge-safe, además de inyección directa de config cuando no hay acceso al filesystemSer dueño del CLI jsorm
@jsorm/nodePaquete de tooling y runtime para Node y Bun. En Node, provee el puente al motor Rust y la plomería de adaptadores nativos para migraciones y deploy. En Bun, detecta la configuración de Bun y usa las APIs nativas de Bun directamente (sin motor Rust)Propiedad del CLI o request handlers edge
@jsorm/fetchTransporte HTTP/fetch para bases de datos en runtimes sin sockets TCP o binarios nativosPropiedad de migraciones o jsorm deploy
@jsorm/pg, @jsorm/mysql, @jsorm/sqliteAdaptadores nativos para acceso directo a la base de datos desde NodeRuntimes edge sin acceso TCP crudo
  • Runtime de app en Node: @jsorm/core o @jsorm/node con un paquete de adaptador nativo
  • Runtime Bun: @jsorm/node — detecta Bun y usa las APIs nativas de Bun directamente, sin motor Rust
  • Runtime edge: @jsorm/runtime con @jsorm/fetch
  • CI, release y deploy: @jsorm/core + @jsorm/node en un entorno Node 24+

Usa adaptadores nativos cuando tu runtime puede abrir conexiones directas a la base de datos y ejecutar APIs de Node.

Ventana de terminal
pnpm add @jsorm/core @jsorm/node @jsorm/pg pg
import { createJsorm, defineConnectionSource, defineJsormConfig } from '@jsorm/core';
import { pgAdapter } from '@jsorm/pg';
const main = defineConnectionSource({
adapter: pgAdapter({
name: 'main',
connectionString: process.env.DATABASE_URL!,
}),
});
const config = defineJsormConfig({
connectionSources: { main },
defaults: { connectionSource: 'main' },
});
export const db = await createJsorm().init(config);

Este formato encaja para servidores de larga vida, workers en background y apps Node en contenedores.

Usa @jsorm/node en Bun. El paquete detecta el runtime Bun y usa las APIs nativas SQLite, MySQL y PostgreSQL de Bun directamente — sin el motor Rust.

Ventana de terminal
pnpm add @jsorm/core @jsorm/node @jsorm/pg pg
import { createJsorm, defineConnectionSource, defineJsormConfig } from '@jsorm/core';
import { pgAdapter } from '@jsorm/pg';
const main = defineConnectionSource({
adapter: pgAdapter({
name: 'main',
connectionString: process.env.DATABASE_URL!,
}),
});
const config = defineJsormConfig({
connectionSources: { main },
defaults: { connectionSource: 'main' },
});
export const db = await createJsorm().init(config);

En Bun, las llamadas al adaptador usan las bindings nativas de Bun en lugar del worker Rust. La API de consulta, inferencia de tipos y forma de la config son idénticas a Node.

Usa imports runtime-safe junto con @jsorm/fetch cuando el runtime de request no puede usar sockets TCP crudos ni binarios nativos.

Ventana de terminal
pnpm add @jsorm/runtime @jsorm/fetch
pnpm add -D @jsorm/node
import { createJsorm, defineConnectionSource, defineJsormConfig } from '@jsorm/runtime';
import { fetchAdapter } from '@jsorm/fetch';
const main = defineConnectionSource({
adapter: fetchAdapter({
name: 'main',
dialect: 'postgres',
endpoint: process.env.SQL_HTTP_ENDPOINT!,
headers: () => ({
authorization: `Bearer ${process.env.SQL_HTTP_TOKEN!}`,
}),
}),
});
const config = defineJsormConfig({
connectionSources: { main },
defaults: { connectionSource: 'main' },
});
export const db = await createJsorm().init(config);

Este es el camino recomendado para Vercel Edge, Cloudflare Workers y otros runtimes que solo exponen fetch.

Ejecuta los comandos de migración y deploy desde Node, incluso si la aplicación corre en edge.

Ventana de terminal
pnpm exec jsorm deploy --strict --verbose

Lugares típicos para ejecutarlo:

  • GitHub Actions
  • un release container o init job
  • un paso de deploy en Node antes del rollout
EntornoPaquete runtimeTransporteDueño de migraciones/deploy
API/servidor Node@jsorm/core o @jsorm/nodeadaptador nativoel mismo runtime Node o un job de CI
Servicio/script Bun@jsorm/nodeAPI nativa de Bunel mismo runtime Bun o CI (Node)
Vercel Edge / Workers@jsorm/runtime@jsorm/fetchjob separado con @jsorm/core + @jsorm/node
Pipeline de CI / release@jsorm/core + @jsorm/nodeadaptador nativo@jsorm/core + @jsorm/node

jsorm usa un proceso worker persistente por defecto en runtimes Node para eliminar el sobrecoste de crear procesos por cada query. Cuando se omite engine.mode en jsorm.config.ts, por defecto usa "worker".

// jsorm.config.ts
export default defineJsormConfig({
engine: {
// el mode por defecto es "worker"
worker: {
startupTimeoutMs: 5_000,
requestTimeoutMs: 10_000,
restartLimit: 3,
},
},
});

Puedes recurrir a la ejecución tradicional por query estableciendo explícitamente engine.mode: "spawn" si es necesario. Ten en cuenta que el modo worker es solo para el runtime Node.js — en Bun, @jsorm/node evita el motor Rust por completo y usa las APIs nativas de Bun.

Los runtimes en el mismo proceso Node comparten pools de adaptadores y procesos worker de Rust cuando su configuración efectiva coincide.

  • createJsorm(): Las instancias estándar participan automáticamente en el registro de recursos compartidos. Esto evita recrear pools de conexiones a la BD a través de importaciones repetidas.
  • createJsormTest(): Las instancias de sandbox para testing desactivan intencionalmente el descubrimiento de config por filesystem y aíslan sus recursos por defecto, previniendo que los tests colisionen usando los pools de otros.
import { createJsorm, createJsormTest } from '@jsorm/core';
// Reutiliza pools de conexiones y workers compartidos según el fingerprint de config
const appDb = await createJsorm().init();
// Usa recursos aislados por defecto
const testDb = await createJsormTest().init();

Elige el paquete de adaptador que coincide con tu base de datos:

  • PostgreSQL → @jsorm/pg
  • MySQL / PlanetScale → @jsorm/mysql
  • SQLite → @jsorm/sqlite

Instala solo los adaptadores que realmente uses. Los paquetes core no incluyen drivers de base de datos por defecto.

  1. Separa los imports de app/runtime de la propiedad del CLI.
  2. Usa adaptadores nativos en Node y @jsorm/fetch solo en runtimes fetch-only.
  3. En Bun, @jsorm/node detecta el runtime automáticamente — el mismo paquete funciona tanto en Node como en Bun.
  4. Ejecuta jsorm deploy fuera de funciones edge.
  5. Trata CI y release jobs como entornos Node con responsabilidad completa sobre migraciones.