Skip to content

querymode

A pluggable columnar query library — not a query engine you push data to, but a query capability your code uses directly.

Every query engine has a boundary between your code and the engine. Your code describes a query, the engine materializes data, runs fixed operators, serializes results back. QueryMode has no boundary — your app code IS the query execution.

import { QueryMode } from "querymode/local"
const demo = QueryMode.demo()
const top5 = await demo
.filter("category", "eq", "Electronics")
.sort("amount", "desc")
.limit(5)
.collect()

Zero-copy WASM

Zig SIMD engine decodes columns directly from raw bytes. No Arrow conversion, no DataFrame construction.

Multi-format

Parquet, Lance v2, Iceberg, CSV, JSON, Arrow. Same API regardless of format.

Edge-native

Runs on Cloudflare Workers + Durable Objects + R2. Same code works locally with Node/Bun.

Composable operators

Filter, Join, Window, Aggregate, Sort, TopK — all implement the same pull-based Operator interface.

R2 spill

Memory-bounded operators spill to R2 when budget exceeded. Grace hash join, external merge sort.

Page-level skip

Min/max stats per page mean non-matching pages are never read, never downloaded, never allocated.