DuckDB 2.0.0 LTS “Cinnamon Teal”
Introducing DuckDB 2.0.0 LTS: “Cinnamon Teal”
The DuckDB team is thrilled to unveil DuckDB version 2.0.0 LTS, codenamed “Cinnamon Teal” (inspired by the Spatula cyanoptera, a vivid reddish-brown duck native to the western Americas).
This release represents our most significant leap in functionality to date. Since the launch of DuckDB 1.5, we have integrated nearly commits to bring you a polished Quack protocol, asynchronous I/O, a first-class VARIANT type, agent mode, triggers, and a more flexible SQL parser.
Core Philosophy: While the 1.0 milestone focused on backward compatibility and stability, DuckDB 2.0 is primarily a feature-driven release.
For those seeking a deeper dive, we recommend our “A Preview of DuckDB v2.0” guide or the full GitHub release notes.
🛠️ Installation & Support Lifecycle
To get started, head over to the installation page.
- CLI & Python: Available now.
- Go, R, Java: Coming in a few days (pending final reviews).
- Extensions: Rolling out shortly.
Support Matrix
We are currently maintaining three distinct release lines to ensure a seamless migration path:
| Version | Status | Support End Date | Note |
|---|---|---|---|
| 2.0.0 | LTS | October 2027 | Current flagship feature release |
| 1.5 | LTS | March 2027 | Support extended to facilitate testing |
| 1.4 | LTS | November 2026 | Legacy long-term support |
🌐 DuckDB as a Server: The Quack Protocol
DuckDB was strictly an in-process database. While it remains highly efficient in-process, DuckDB 2.0 evolves the Quack protocol (introduced in v1.5.3) to enable a traditional client-server architecture.
The CONNECT Statement
We've introduced the CONNECT command to streamline the process of attaching to and switching into a remote database.
Example Workflow:
Server Side:
-- Start the server
CALL quack_serve ( token = 'my_token' );
CREATE TABLE events ( date DATE, name VARCHAR );
INSERT INTO events VALUES ( '2027-04-07', 'DuckCon #8' );
Client Side:
-- Attach and switch session
ATTACH 'quack:localhost' AS qk ( TOKEN 'my_token' );
CONNECT qk ;
SELECT * FROM events ;
Security Note: To expose the server to other machines, place it behind a TLS-terminating reverse proxy. The allow_other_hostname setting is intended strictly for testing.
Beyond Quack: The CONNECT statement also works with PostgreSQL and MySQL. Our new remote pushdown optimizer ensures that queries are executed on the remote server, avoiding the need to pull massive tables across the network.
CLI Integration
The CLI now supports streamlined flags for server management:
duckdb -serve: Launches a Quack server.duckdb -connect: Connects to an existing server.
🚀 Performance Enhancements
Asynchronous I/O
DuckDB 2.0 implements asynchronous I/O for CSV and Parquet files. By decoupling the I/O layer from query processing, the system can maintain multiple concurrent requests in flight.
This results in a massive boost for remote storage (e.g., s3://), where network latency is a bottleneck.
Figure 1: Comparison of network throughput showing the efficiency of asynchronous reads.
🧬 The VARIANT Type: First-Class Support
The VARIANT type allows for the storage of semi-structured, schema-less data (similar to JSON) without sacrificing the speed of columnar execution.
Key Improvements:
- Shredding: DuckDB 2.0 automatically detects common structures and "shreds" them for superior compression and execution speed.
- End-to-End Pipeline: Shredded execution persists from storage through to Parquet read/write operations.
- Tooling: A new suite of
variant_*functions is now available.
Example Usage:
CREATE TABLE events ( payload VARIANT );
INSERT INTO events VALUES
( '{"user": {"id": 42, "tags": ["a", "b"]}}' :: JSON :: VARIANT ),
( '{"event": "click", "x": 10, "y": 20}' :: JSON :: VARIANT );
SELECT variant_type(payload), variant_keys(payload) FROM events;
| variant_type(payload) | variant_keys(payload) |
|---|---|
OBJECT | [user] |
OBJECT | [event, x, y] |
🤖 Agent Mode in the CLI
With the rise of AI coding assistants like Claude Code, Codex, and Cursor, the CLI now includes a specialized Agent Mode.
When DuckDB detects it is being operated by an AI agent, it automatically adjusts its output:
- Standard Mode: Pretty-printed tables for humans.
- Agent Mode: Compact Markdown tables for easier LLM parsing.