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.
npm install uql-ormWhy UQL?
Section titled “Why UQL?”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
.prismafile 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.