Contained by: column <@ value (array/JSONB is subset of)
Contains: column @> value (array/JSONB contains)
Count rows matching the current filters.
Delete rows matching the current filters. At least one filter is required (no unfiltered deletes).
Case-insensitive LIKE (alias for .like()).
Insert one row or many rows. Arrays over 1000 rows are auto-chunked.
A single row object or an array of row objects.
Alias for .isNull() — matches Supabase convention is(column, null).
Case-insensitive LIKE: column ILIKE %value%
Set maximum rows to return (default: 100, max: 10000).
Fetch a single row or null. Like .single() but returns null instead of error when no match.
Negate a filter: NOT (column op value).
Optionalvalue: anyOR filter group: at least one condition must match.
// WHERE (status = 'active' OR status = 'pending')
.or([
{ column: 'status', operator: 'eq', value: 'active' },
{ column: 'status', operator: 'eq', value: 'pending' },
])
// WHERE (price > 100 OR category = 'premium')
.or([
{ column: 'price', operator: 'gt', value: 100 },
{ column: 'category', operator: 'eq', value: 'premium' },
])
Set sort column and direction.
Overlaps: column && value (arrays share elements)
Phrase search: to_tsvector(column) @@ phraseto_tsquery(value)
Fetch rows matching the current filters.
OptionalcolumnsOrFilters: string | Record<string, any>Either a column selection string ('id, name, price')
or a shorthand filter object ({ active: true }).
Fetch a single row. Returns the first match or error if none found.
Full-text search: to_tsvector(column) @@ plainto_tsquery(value)
Update rows matching the current filters. At least one filter is required (no unfiltered updates).
Fields to update.
Insert or update a row based on a conflict column.
Row data (must include the conflict column).
Column to detect conflicts on (default: id).
Fluent query builder for direct database access. Supports chainable filters, column selection, pagination, and all CRUD operations.
Example