Overview
The root q object
The q object (created in the Configuration section) has 3 main purposes:
Start a query chain
All query chains start with either q.star or q.project(...).
All methods of a query chain return a new chainable instance of GroqBuilder. Every chain is immutable, and can be reused if needed.
See the Filters and Projections documentation for more details.
Provide Zod's validation functions
The root q object has shortcuts for Zod's validation functions, like q.string() and q.number(). These are identical to zod.string() and zod.number(), and are added to the q object for convenience.
See the Validation documentation for more details.
Create reusable fragments
You can also define reusable "projection fragments" using the q.fragment<T>() method.
See the Fragments documentation for more details.
An example query
const top10ProductsQuery = (
q.star
.filterByType("product")
.order("price asc")
.slice(0, 10)
.project(sub => ({
title: q.string(),
price: q.number(),
images: sub.field("images[]").field("asset").deref().project({
url: q.string(),
altText: q.string(),
})
}))
);