[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [local‑first/Schema](https://evolu.dev/docs/api-reference/common/local-first/Schema) › createQueryBuilder

```ts
function createQueryBuilder<S>(_schema: S): CreateQuery<S>;
```

Defined in: [packages/common/src/local-first/Schema.ts:425](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/local-first/Schema.ts#L425)

Creates a query builder from a [EvoluSchema](https://evolu.dev/docs/api-reference/common/local-first/Schema/type-aliases/EvoluSchema).

Supports Kysely relation-style query composition (nested objects/arrays via
JSON subqueries), such as [evoluJsonObjectFrom](https://evolu.dev/docs/api-reference/common/local-first/Query/functions/evoluJsonObjectFrom) and
[evoluJsonArrayFrom](https://evolu.dev/docs/api-reference/common/local-first/Query/functions/evoluJsonArrayFrom). These helpers are Evolu's safer SQLite variants of
the
[Kysely relations recipe](https://kysely.dev/docs/recipes/relations).

### Example

```ts
const Schema = {
  todo: {
    id: id("Todo"),
    title: NonEmptyString100,
    isCompleted: nullOr(SqliteBoolean),
  },
};

// Create a typed query builder (once per schema)
const createQuery = createQueryBuilder(Schema);

// Use it for all queries
const todosQuery = createQuery((db) =>
  db.selectFrom("todo").select(["id", "title", "isCompleted"]),
);
```