DuckDB 2.0 ships as an LTS release with a breaking storage format
The embedded analytics database adds a first-class VARIANT type, triggers and an extensible SQL parser, but older DuckDB builds cannot read files it writes.
DuckDB released version 2.0.0 on 21 October, its first long-term-support release, built from close to 20,000 commits since 1.5. Support runs until at least October 2027.
The headline additions are a first-class VARIANT type with shredded execution and Parquet support, triggers (BEFORE/AFTER, row- and statement-level, with transition tables), asynchronous I/O for Parquet, CSV and native storage reads, and a new PEG-based SQL parser that replaces the old PostgreSQL-derived one and lets extensions hook directly into the grammar.
Why it matters: DuckDB 2.0 writes a new storage format that versions before 2.0 cannot read, though 2.0 itself still reads and writes your existing files. If you ship .duckdb files between services or CI runners pinned to different versions, check they’re all on 2.0 before any of them write to a shared file. Building DuckDB from source now needs a C++17 compiler, up from C++11, and the bundled ICU library has been replaced with a native timezone implementation.
The caveat: the old single-arrow lambda syntax (x -> x + 1) is disabled by default in 2.0. Queries written against it need updating to the Python-style form, or you can re-enable the old syntax temporarily with a flag before it’s removed entirely in 2.1.
SELECT list_transform([1, 2, 3], lambda x: x + 1);