DuckDB 2.0.0 LTS Cinnamon Teal Release Notes

DuckDB 2.0.0 LTS Overview

DuckDB 2.0.0, codenamed “Cinnamon Teal,” is a major feature release that transitions the project into a long-term support (LTS) phase, with support guaranteed until at least October 2027. Built from nearly 20,000 commits since version 1.5, this release focuses on expanding the database's capabilities as both an in-process engine and a server-side analytics platform.

Client-Server Architecture via Quack

DuckDB 2.0.0 formalizes the Quack protocol, enabling a native client-server architecture. Users can now run a DuckDB server using CALL quack_serve() and connect to it from remote clients using the new CONNECT statement. This functionality simplifies distributed workflows, allowing users to attach to remote databases—including PostgreSQL and MySQL—with a remote pushdown optimizer that executes queries on the source server rather than pulling data over the network.

Performance and Asynchronous I/O

Asynchronous I/O is now the default for reading Parquet and CSV files, decoupling the I/O layer from query processing. This improvement allows the database to keep multiple read requests in flight, significantly increasing throughput for object storage like S3. Early adopters report that this change enables DuckDB to scale effectively on high-core-count cloud instances, with some users noting performance gains on machines with up to 192 vCPUs where previous versions would have plateaued at 64.

SQL Features and Data Handling

Triggers and Materialized Views

DuckDB 2.0 introduces CREATE TRIGGER support, including BEFORE and AFTER events with FOR EACH ROW and FOR EACH STATEMENT capabilities. This addition allows for audit logging and the implementation of incrementally maintained materialized views, bridging a significant gap in DuckDB’s utility for complex data warehousing tasks.

VARIANT Type

The VARIANT type is now a first-class citizen, designed to store semi-structured data like JSON while maintaining columnar execution performance. The engine automatically "shreds" common structures within the VARIANT data, allowing for efficient compression and high-speed querying compared to raw text-based JSON.

SQL Dialect Enhancements

  • Agent Mode: The CLI now detects when it is being driven by AI coding assistants, automatically formatting output as compact Markdown tables and providing query cost estimates to reduce token usage.
  • Parser: A new, extensible PEG-based parser is now the default, allowing for future syntax extensions while maintaining backward compatibility.
  • New Syntax: Support for data-modifying CTEs, NEAREST joins for vector similarity search, and nested schemas (e.g., finance.reports) have been added.

Migration and Internals

Upgrading to 2.0 requires attention to storage compatibility, as older versions cannot read database files created by 2.0.0. Key internal changes include:

  • Compiler Requirements: The project now requires a C++17 compiler.
  • ICU Removal: The ICU library has been replaced by a native, lightweight implementation for timezone and collation support.
  • Deprecations: The old single-arrow lambda syntax and amalgamation builds are deprecated, and support for macOS x86_64 is being phased out.

Community Insights

Users have highlighted the versatility of DuckDB 2.0 in production environments. One user noted using the engine to compress 7 terabytes of logs into Parquet format in under two hours, creating a "frozen" data lake accessible via signed URLs. Another developer emphasized the value of the new client-server capabilities, suggesting that it provides a lightweight alternative to traditional, resource-heavy data stacks. While the Quack protocol is the native choice, some community members are also leveraging custom extensions to bridge DuckDB with the Postgres wire protocol or Arrow Flight for broader ecosystem compatibility.

Sources

Related