Skip to content

Note open source

All posts
Oct 25, 202610 min readopen source · duckdb · databases · sql · analyticsRead in:ENID

DuckDB 2.0: The In-Process Database That Learned to Be a Server

DuckDB 2.0.0 LTS adds a real server mode via Quack and CONNECT, a first-class VARIANT type, asynchronous I/O, agent mode, and triggers, with support until at least October 2027.

A mallard duck swimming on a body of water.

DuckDB started as the database you embed in your application, not the server you run beside it. Version 2.0 keeps that idea and adds the option it always refused: a real server mode. DuckDB 2.0.0 LTS, codenamed Cinnamon Teal, was released on October 21, 2026, and the DuckDB team calls it its biggest feature release so far, built from close to 20,000 commits since DuckDB 1.5 (DuckDB team announcement, DuckDB, retrieved 2026-10-25). Alongside server mode come a polished Quack protocol, asynchronous I/O, a first-class VARIANT type, agent mode, triggers, and a new extensible SQL parser. It is also a long-term support release, supported until at least October 2027.

Key Takeaways

  • DuckDB 2.0.0 LTS, codenamed Cinnamon Teal, was released on October 21, 2026, and is the biggest feature release in the project so far, built from close to 20,000 commits since DuckDB 1.5.

  • The polished Quack protocol and the new CONNECT statement turn DuckDB into a full client-server option, including connections to PostgreSQL and MySQL with remote pushdown, while the in-process mode stays available.

  • A first-class VARIANT type shreds semi-structured data such as JSON into columns, so it compresses and queries like typed data without a declared schema.

  • Agent mode in the CLI detects when a coding agent is driving it and switches to compact output; in the team's TPC-H experiments it cut the output the model had to read by 59% (DuckDB team announcement).

  • The upgrade carries real breaking changes, above all a new storage format that older versions cannot read, so the team advises testing on a shadow system and waiting for the November patch release for mission-critical workloads.

This release did not arrive unannounced. The team previewed its headline features in August 2026, including DuckDB as a server, triggers, the VARIANT type, asynchronous I/O, and a new SQL parser (DuckDB 2.0 preview). Where DuckDB 1.0 was about stability and backward compatibility, the announcement presents 2.0 plainly as a feature release. That framing matters: this release widens what DuckDB is for, not merely polishes what it already did.

What Is DuckDB?

DuckDB is an open source, in-process analytical database. It runs inside your application or script instead of as a separate server, and it is built for analytical work: scanning large files, aggregating columns, and joining tables, rather than handling many small transactions. That design made it popular for querying CSV, Parquet, and JSON files directly. Version 2.0 does not abandon it. It adds a second way to use the same engine.

Aspect

DuckDB 2.0.0 LTS

Released

October 21, 2026

Codename

Cinnamon Teal

Support

Long-term support until at least October 2027

Commits since 1.5

Close to 20,000

Headline features

Quack server protocol, asynchronous I/O, VARIANT, agent mode, triggers, PEG parser

License and model

Open source, in-process by default, client-server as an option

DuckDB as a Server: Quack and CONNECT

Quack is DuckDB's native client-server protocol. It first appeared in DuckDB 1.5.3 in May 2026, and version 2.0 ships a polished version with substantial performance and stability improvements, according to the announcement. The new CONNECT statement is what makes it usable in everyday SQL: one command attaches to a remote database and switches your session to it. The statement is not limited to Quack. It also points your session at PostgreSQL and MySQL, and a new remote pushdown optimizer ships queries directly to the remote server instead of pulling whole tables over the network.

The command line gains matching shortcuts. Running duckdb with the -serve flag starts a Quack server, and duckdb with -connect connects to one. By default the server only listens on localhost. To accept connections from other machines, the team advises keeping it on localhost behind a TLS-terminating reverse proxy, describing the option that exposes it directly as meant for testing only. Use it as a shared instance reached through infrastructure you already trust, not a database left open on the internet.

Hannes Muhleisen, co-creator of DuckDB and CEO and co-founder of DuckLabs, put the design goal this way in the release announcement carried by EIN Presswire: "With DuckDB 2.0, you can keep running it inside your application or connect to a shared instance when that makes more sense. The choice is yours." (DuckLabs release announcement). The quote is the release in one sentence. Nothing about the in-process mode goes away. The server is an option you pick when sharing matters more than embedding.

Faster Remote Reads and a Real Type for Messy Data

Two engine changes matter most for people who query data that lives somewhere else. First, DuckDB 2.0 introduces asynchronous I/O for reading Parquet and CSV files and DuckDB's own storage format. The I/O layer now scales independently from query processing, issuing reads in the background and keeping multiple requests in flight, for far more parallelism on remote reads and dramatically faster queries on object storage such as S3.

VARIANT is DuckDB's first-class type for semi-structured, schema-less data such as JSON. Think of it as JSON with columnar execution behind it: a VARIANT column can hold differently shaped data in every row, but unlike JSON text it is not stored as text. DuckDB 1.5 already introduced VARIANT, but 2.0 fully integrates it. The engine detects common structure and shreds it into columns, so it compresses well and executes fast, and the pipeline works end to end, including shredded VARIANT reading and writing for Parquet. Event payloads, API responses, and log records that never shared one schema can now be queried as typed columns without a load step that forces them into a shape they never had.

Built for Agents: Agent Mode in the CLI

Agent mode is a CLI mode that detects when a coding agent is driving DuckDB and changes how it prints results. Coding agents such as Claude Code, Codex, and Cursor increasingly drive the DuckDB CLI on their users' behalf, and the padded box tables a human likes are expensive noise for a model. In agent mode the CLI prints compact Markdown tables instead of padded boxes, says clearly when a result was truncated, stops runaway queries early, and reports errors as JSON. Long-running queries also report their expected cost before running, so the agent can decide whether to wait. In the team's experiments on TPC-H, agent mode cut the amount of DuckDB output the model had to read by 59% (DuckDB team announcement). You can turn it on for manual testing with the -agent flag, or instruct your agent to turn it off with the -no-agent flag.

This small feature carries a large signal: databases are becoming tools agents operate, not just tools humans query. It is the same shift our Microsoft Scope article describes from the other side: measuring how agents behave when they use your software. DuckDB 2.0 simply makes the agent's job cheaper and more predictable.

Triggers and a Growing SQL Dialect

DuckDB 2.0 delivers triggers through a CREATE TRIGGER statement, with BEFORE and AFTER triggers, FOR EACH ROW and FOR EACH STATEMENT variants, transition tables through REFERENCING OLD and NEW TABLE, multiple triggers per event, RETURNING on triggered tables, and DROP TRIGGER. The classic use case is audit tables, where a trigger records what changed in response to a table modification. Triggers can also maintain summary tables incrementally, as in the announcement's example of keeping an average age per nationality up to date. That moves DuckDB closer to materialized views, a long-standing roadmap item.

Two gaps deserve a check before you port trigger logic from another database: the announcement lists BEFORE triggers FOR EACH ROW and UPDATE triggers FOR EACH ROW as not yet supported, and independent coverage repeats the warning (Netics Labs coverage). The SQL dialect grows elsewhere too: a $variable shorthand, data-modifying common table expressions that let INSERT, UPDATE, DELETE, and COPY act as pipeline steps, NEAREST joins for top-k similarity search over embeddings, nested schemas, JSON mutation functions named json_set, json_insert, json_replace, and json_remove, support for the SQL-standard FETCH FIRST clause, and UNNEST in the GROUP BY clause.

Under the Hood: a New Parser, a New C API, and Signed Extensions

DuckDB has always used a parser derived from PostgreSQL's. In 2.0, its own modern, extensible PEG-based parser, which debuted as an opt-in feature in DuckDB 1.5, becomes the default. Extensions can now hook into the grammar itself, error messages now come with precise source locations, and the parser is designed to be compatible with the old one apart from a few deliberate changes in the migration guide. You can switch back with the legacy_parser extension.

Extension developers get two more things. A revamped C API v2 exposes components such as file systems and table functions to extensions, and is presented as powerful but still being tested in the field before it is marked stable. And you can now register and host your own trusted extension repositories, so an organization can host and sign its own extensions and have them install and load just like the built-in ones. A repository is a name, a URL prefix, and RSA public keys pinned at creation time, with each key's SHA-256 fingerprint printed for out-of-band comparison. The team notes this feature is still a work in progress. Core extensions move too: DuckLake reaches 1.1, Iceberg adds REST catalog ATTACH options, and Delta can create tables and supports time travel.

What Breaks, and How to Upgrade Safely

A major version bump earns its number here. The storage format is the most likely source of problems: DuckDB versions before 2.0 cannot read database files created by DuckDB 2.0. DuckDB 2.0 can still read and write your existing database files, and those files remain readable by older versions, so the breakage runs in one direction only. Even so, the team recommends testing 2.0.0 on a shadow system before switching production over, and says that if your workload is mission-critical you may want to wait for the first patch release, coming in November 2026.

The rest of the breaking list is shorter but still worth a scan. DuckDB 2.0 now requires a C++17 compiler, after its long stint on C++11, and release builds switch to Clang as the default compiler on Linux and macOS. The ICU library is gone: the icu extension now implements timezones, calendars, and collations itself, with IANA timezone data compressed to around 45 kB. Single-arrow lambda syntax is disabled by default in favor of Python-style syntax, re-enableable temporarily until removal in 2.1. The amalgamation build is deprecated, and osx_amd64 is being phased out, with community extensions no longer built for it.

What Independent Coverage Says

Independent coverage has been consistent on excitement and caution. Netics Labs frames 2.0 as a release you can plan around because the support label carries a date, laying out the overlapping windows: 2.0 until at least October 2027, 1.5 extended to March 2027, and 1.4 until November 17, 2026 (Netics Labs coverage). Glonce's walkthrough stresses the same practical shape: Quack plus CONNECT make client-server use a built-in option, asynchronous I/O targets remote data, and triggers add a feature set DuckDB previously lacked, while the storage change means migration should be tested rather than assumed (Glonce coverage). Neither outlet disputes the headline features. Both treat the upgrade path, not the feature list, as the decision that matters.

Who Should Upgrade, and Who Should Wait

Upgrade soon if you query Parquet or CSV from object storage, wrangle semi-structured JSON payloads, want a shared instance for a team, or want your agents' CLI token bills down. The LTS label means this line will be supported long enough to build on. Wait for the November patch release if your deployment is mission-critical, many processes share files, or you depend on third-party extensions not yet rebuilt for 2.0. Test first either way: the one-direction storage change is exactly the breakage a shadow system catches and a production deploy does not forgive.

Frequently Asked Questions

Is DuckDB 2.0 free? DuckDB is open source software, and version 2.0.0 is available as a long-term support release. Your costs are the infrastructure you run it on and the storage you query, not a license for the engine itself.

Does DuckDB 2.0 replace the in-process mode with a server? No. The in-process mode stays. Quack and CONNECT add a client-server option for cases where a shared instance makes more sense, and you choose per workload which mode to use.

Can older DuckDB versions open files created by DuckDB 2.0? No. Versions before 2.0 cannot read database files created by DuckDB 2.0. DuckDB 2.0 can read and write your existing files, and those files remain readable by older versions, so test the upgrade on a shadow system first.

What does the VARIANT type do that JSON text does not? VARIANT stores semi-structured data as a first-class type, not as text. DuckDB detects common structure and shreds it into columns, so it compresses well, executes fast, and reads and writes as shredded data in Parquet.

How long is DuckDB 2.0 supported? DuckDB 2.0 is a long-term support release with support until at least October 2027. DuckDB 1.4 remains supported until November 17, 2026, and DuckDB 1.5 support was extended to March 2027.

The Bottom Line

DuckDB 2.0 is the release where the embedded database stops insisting on being embedded. Server mode, remote pushdown, asynchronous I/O, and VARIANT all point the same way: DuckDB is following its users from the notebook to the pipeline to the shared service, without giving up the zero-setup mode that made it popular. The storage break and the November patch advice are the honest price of that step, and the LTS window is what makes paying it reasonable. Start with the GitHub repository and the official announcement, or read the Indonesian version of this article.

Tags: open source · duckdb · databases · sql · analytics

All posts