DuckDB 2.0 is coming this fall and the alpha is out. The post benchmarks three major areas on an M5 laptop and home internet to S3.
Async I/O
Querying Parquet on S3 without query changes: a 2.2 GB file (228M rows, one column) dropped from 18.8 s (DuckDB 1.5.5) to 7.7 s (2.0 alpha). A separate download pool prefetches row groups (read_ahead_depth, default -1 automatic). Tiny files see little gain due to per-file round trips.
Recursive CTEs
Rewritten engine: deep parent/child walks (e.g. 20,000-commit git history) went from 1.8–16 s (1.5.5) to ~0.10 s (2.0 alpha) by reading the table once and indexing lookups per round instead of re-scanning each round.
VARIANT vs JSON
Structured event JSON shredded into typed sub-columns at checkpoint: ~85 MB on disk vs 224 MB JSON string; filter queries ~63 ms vs 366 ms on JSON text. VARIANT in 1.5.5 without shredding was far slower (~5 s).
Other 2.0 notes
Statement-level triggers with transition tables, nested schemas, DML in CTEs, Spark dialect compatibility mode, external file cache spill, CLI formatter/history, read_json TIMESTAMPTZ with offset detection, connection-scoped secrets. Quack client-server protocol reaches 1.0.
Install alpha: curl https://install.duckdb.org | DUCKDB_VERSION=alpha bash