Skip to content

Limits

These are the physics, not a temporary bug list.

Envelope

ConstraintValue
DuckDB memory_limit64 MB
Threads1
Parquet working-set gate48 MB
WASM binary~41 MB (~9.9 MiB gzip)
Paid Worker gzip cap10 MiB

Cross the working-set gate and the engine should refuse with a graduate-to-native style error. On Cloudflare that native path is not wired yet (HTTP 501).

What fits

  • TPC-H SF0.1 (~21 MB, 600k lineitems)
  • ClickBench-style 1M hits (~5 MB)
  • Warm count / groupby / modest joins in hundreds of ms
  • Many idle tenants

What does not

  • Multi-GB hot working sets on Workers
  • High-cardinality aggs that spill past 64 MB (pnpm memory-boundary)
  • Firehose ingest (batch Parquet into R2)
  • Hard sub-50ms p99 SLOs

Platform

Workers Paid is required. Free tier dies at 3 MiB gzip. DuckDB alone is basically the whole 10 MiB budget, which is why the engine is its own Worker.

Latency shape

Warm engine wall ~150–300ms on sample groupbys. Client often 400–800ms. Occasional 2–3s outliers with a still-fast wallTimeMs means routing / cold isolate / view reload, not “Parquet is slow.”

MotherDuck-shaped architecture. Not a warehouse.