An ORM-Agnostic Query Builder
Building type-safe queries from API request query strings. Transform ?filter[status][eq]=active into database queries.
Why qbjs?
Parser → AST → Compiler
Clean architecture with a well-defined Abstract Syntax Tree for maximum flexibility and extensibility.
Security-First
Built-in security configuration for field allowlisting, operator restrictions, and query limits.
Type-Safe
Full TypeScript support with comprehensive type definitions for a great developer experience.
Multi-Database
Works with PostgreSQL, MySQL, and SQLite through Drizzle ORM compilers.
Framework Integration
First-class support for Hono with middleware included. Easy to integrate with any framework.
Flexible Filtering
Support for comparison, string, and logical operators with nested filter expressions.
Simple & Powerful
Build secure, type-safe API endpoints with just a few lines of code. qbjs handles parsing, validation, and compilation automatically.
import { createQueryBuilder, createDrizzlePgCompiler } from "@qbjs/core";
import { users } from "./db/schema";
const queryBuilder = createQueryBuilder({
config: {
allowedFields: ["id", "name", "email", "status"],
maxLimit: 100,
},
compiler: createDrizzlePgCompiler(),
});
// GET /users?filter[status][eq]=active&sort=-createdAt&limit=10
app.get("/users", async (c) => {
const result = queryBuilder.executeFromUrl(c.req.url, users);
if (result.errors.length > 0) {
return c.json({ errors: result.errors }, 400);
}
const data = await db.query.users.findMany(result.query);
return c.json(data);
});Works With Your Stack
qbjs integrates seamlessly with popular tools and databases.
Ready to Get Started?
Install qbjs and build your first type-safe API endpoint in minutes.
pnpm add @qbjs/core