Appearance
Limits
These are the physics, not a temporary bug list.
Envelope
| Constraint | Value |
|---|---|
DuckDB memory_limit | 64 MB |
| Threads | 1 |
| Parquet working-set gate | 48 MB |
| WASM binary | ~41 MB (~9.9 MiB gzip) |
| Paid Worker gzip cap | 10 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.”