Skip to content
app.ts
await querier.findMany(User, {
$select: { id: true, name: true },
$where: { email: { $endsWith: '@uql-orm.dev' } },
$limit: 10,
});

UQL

The perfectionist TypeScript ORM. Serializable queries, no codegen, and a unified API across Postgres, CockroachDB, MySQL, SQLite, MongoDB, and the edge.
Terminal window
npm install uql-orm

graph LR
    S["Server code"] --> Q["Type-safe JSON query"]
    C["Any HTTP client"] -. "HTTP" .-> Q
    Q --> P["QuerierPool"]
    P -- "dialect SQL / commands" --> DB[("SQL · MongoDB")]
    DB -- "typed result" --> P
  • Queries are data (JSON), not method chains. Build them dynamically, store them, diff them, or send them straight from the browser, mobile or micro-service. There’s no DSL to learn and nothing to compile.
  • Unified API. The same syntax runs on PostgreSQL, CockroachDB, MySQL, MariaDB, SQLite, LibSQL, Neon, Cloudflare D1, Bun’s native SQL, and even MongoDB!
  • No codegen, no build step. Entities are TypeScript classes, so your code is the schema. There’s no .prisma file to regenerate and no generated client to keep in sync.
  • Built-in hard things. Native semantic and vector search, non-bypassable multi-tenant security filters, soft-delete with restore, and type-safe JSON/JSONB querying, and much more.
  • The fastest SQL builder! in all the 8 categories of our open-source benchmark, even vs. query builders as Knex and Kysely: ~2.1× faster on average than the runner-up, reaching over 3.9M ops/s on simple SELECTs.

See more in this blog post.