Releases · duckdb/duckdb · GitHub
Skip to content

Releases: duckdb/duckdb

DuckDB v2.0.0 "Cyanoptera"

Choose a tag to compare

@lnkuiper lnkuiper released this 21 Oct 12:49
d54cbbe

This release of DuckDB is named "Cyanoptera" after Spatula Cyanoptera, a species of duck found in western North and South America.

Please also refer to the announcement blog post: https://duckdb.org/2026/10/21/announcing-duckdb-200.html

What's Changed

  • Make Identifier a class instead of using string everywhere by @Mytherin in #23161
  • Move to tidy-check diff again by @Mytherin in #23196
  • Step 3: Make duplicate eliminator optimizer logic work for CTE rewrite by @kryonix in #23187
  • Allow MERGE INTO in triggers by @Dtenwolde in #23179
  • RETURNING support for tables with triggers by @krleonid in #23153
  • Remove special formatting code for main CMakeLists.txt by @Mytherin in #23211
  • Expand aggregate state export to work with lists (StateListType) and sort keys (StateSortKey), and add aggregate state export to list, any_value/first/last, arg_min/arg_max by @Mytherin in #23199
  • Initial implementation of variant_array_length processing function by @sebastiaan-dev in #23167
  • Add row group count to parquet RETURN_STATS by @pdet in #23218
  • Unify ProfilerPrintFormat and ExplainFormat , remove special casing and move towards pluggable tree renderers by @Mytherin in #23222
  • Rework quantile to use list infrastructure by @Mytherin in #23228
  • Add decimal_average aggregate function by @Dtenwolde in #23097
  • Step 4: Make unnest rewriter recognize CTE-based plans by @kryonix in #23240
  • Rework ordered aggregates to use the list infrastructure by @Mytherin in #23231
  • Pluggable combine types rules by @yan-alex in #23173
  • Auto generate select.gram by @Dtenwolde in #23236
  • Unify quantile update/combine callbacks with the list aggregate by @Mytherin in #23247
  • Add JSONBench to the benchmark suite by @Mytherin in #23265
  • Add support for static linking C-API extensions by @Maxxen in #22251
  • Add vertex_extract function to get coordinates out of point-geometries by @Maxxen in #23252
  • [Dev] Resolve DEFAULTs for INSERT/UPDATE/MERGE_INTO at bind-time rather than plan-time by @Tishj in #23033
  • Consistent ordering for gen files in package_build by @staticlibs in #23267
  • Transform type literals into unbound logical types by @d-justen in #23237
  • Remove UnaryAggregateDestructor, and instead fold it into UnaryAggregate by @Mytherin in #23268
  • Add comment policy for bots by @Mytherin in #23272
  • Fix null sentinel for keys in dict vector (Arrow) by @evertlammerts in #22648
  • Parquet: add expression stats pruning for arithmetic filters by @Damon07 in #23264
  • Add init_local_state_finalize callback to aggregate functions which allows them to create a FunctionLocalState that is persisted across Finalize calls, and use this to speed up ordered aggregates by @Mytherin in #23270
  • fix out-of-bounds read in strict time parsing by @jmestwa-coder in #23266
  • Add support for string_agg to export its state by making separators part of the signature by @Mytherin in #23271
  • Remove redundancies in join filter creation by @d-justen in #23250
  • Add setting force_update_to_del_and_insert which forces updates to always be converted to delete and inserts by @Mytherin in #23281
  • [Variant] Implement SetVectorType for ShreddedVectorBuffer by @Tishj in #23280
  • Commits on top of PR #20859 by @lnkuiper in #23282
  • Dead node counting fixes by @artjomPlaunov in #23289
  • Add support for quantile, median, mad to aggregate state export by @Mytherin in #23285
  • Optimize rollup / cube / grouping sets queries by folding them into CTEs to allow for cascading aggregation by @Mytherin in #23287
  • Async Parquet Writes by @lnkuiper in #23283
  • Step 5: Make Mark to Semi join conversion more stable by @kryonix in #23296
  • Add setting: SET dialect_compatibility_mode='spark' by @yan-alex in #23251
  • Remove stale PR workflow by @DinosL in #23301
  • Fix flaky AsyncFileWriter test by @lnkuiper in #23300
  • [Variant] Fix crash for variant_extract on non-object shredded column by @Tishj in #23303
  • Add Parquet ASYNC I/O for local files by @pdet in #23290
  • Fix flaky AsyncFileWriter test by @lnkuiper in #23309
  • Simplify subquery planning for provably single-row subqueries by @lnkuiper in #23306
  • Add variant_comparator which ensures variants are ordered / compared in the same manner as native DuckDB values by @Mytherin in #23307
  • Add missing import / fix non-unity builds by @evertlammerts in #23308
  • Pass ParserOptions in default macro generation by @nicholasjng in #23288
  • [Dev] Refactor MultiFileReader::GetVirtualColumnExpression and BaseFileReader::expression_map by @Tishj in #22928
  • Allow slicing of shredded vectors, and fix issue with shredded vectors being fed into StructVector::GetEntries by @Mytherin in #23312
  • Auto generate transform expression.gram (Part 8) by @Dtenwolde in #23310
  • Add VariantIterator which allows traversal of variant values without unshredding by @Mytherin in #23317
  • Remove specialized variant comparison code by @Mytherin in #23319
  • Internal #9655: Test Vector DOUBLE[3] by @hawkfish in #23320
  • Add export/import callbacks for aggregates with non-standard state, and support approx_top_k / approx_quantile by @Mytherin in #23304
  • Avoid unnecessary call to ToUnifiedFormat in ColumnSegment filter by @Mytherin in #23324
  • CMake: Set the extension base directory to the duckdb module dir by @nicholasjng in #23328
  • Handle exceptions thrown while recovering from a failed commit by @Huey97 in #23298
  • Use optional semantic values for generated transformer rules by @Dtenwolde in #23332
  • [Parquet] Fix corrupted file invalidating the database by @Tishj in #23331
  • Report in check_peg_parser parse errors by @fallintoplace in #22975
  • Step 6: Flip the switch and have delim join as CTEs by default by @kryonix in #23333
  • Add invoke scalar function by @feichai0017 in #23185
  • Allow empty STRUCT types by @Maxxen in #23273
  • Fix uninitialized TransactionContext::invalidation_policy and auto_rollback members by @evertlammerts in #23321
  • Propagate shredded stats through variant_comparator by @Mytherin in #23336
  • AGENTS.md: Drop in-process by @szarnyasg in #23345
  • Clean-up VariantIterator API and unify it with vector iterator infrastructure by @Mytherin in #23346
  • Support AFTER INSERT FOR EACH ROW triggers by @EtgarDev in #23284
  • Add shredded_vector option to debug_verify_vector by @Mytherin in #23343
  • Fix state export finalize with non-zero offset, and update list of skipped tests by @Mytherin in #23349
  • Propagate stats in structured type -> variant casts by @Mytherin in #23347
  • Deprecate Implicit Table-Function Identifier String Conversion by @kryonix in #23350
  • Support submodules in extensions patching process by @staticlibs in #23191
  • Nicer variable syntax by @Dtenwolde in #21194
  • Remove TransformEnum by @Dtenwolde in #23355
  • Quote special object keys in json_each/json_tree fullkey and path by @truffle-dev in #23206
  • New debug_local_file_system_delay_ms setting and asynchronous file initialization/finalization by @lnkuiper in ...
Read more

DuckDB v1.5.6 Bugfix Release

Choose a tag to compare

@Maxxen Maxxen released this 28 Sep 13:35
069cc9f

This is a bug fix release for various issues discovered after we released v1.5.5

What's Changed

New Contributors

Full Changelog: v1.5.5...v1.5.6

DuckDB v1.5.5 Bugfix Release

Choose a tag to compare

@lnkuiper lnkuiper released this 22 Jul 10:51
d8cdaa3

This is a bug fix release for various issues discovered after we released v1.5.4.

What's Changed

Full Changelog: v1.5.4...v1.5.5

DuckDB v1.5.4 Bugfix Release

Choose a tag to compare

@lnkuiper lnkuiper released this 17 Jun 10:45
08e34c4

This is a bug fix release for various issues discovered after we released v1.5.3.

Please also refer to the announcement blog post: https://duckdb.org/2026/06/17/announcing-duckdb-154.html

What's Changed

Read more

DuckDB v1.4.5 Bugfix Release

Choose a tag to compare

@lnkuiper lnkuiper released this 17 Jun 10:42
f31be57

This is a bug fix release for various issues discovered after we released v1.4.4.

Please also refer to the announcement blog post: https://duckdb.org/2026/06/17/announcing-duckdb-145.html

What's Changed

Full Changelog: v1.4.4...v1.4.5

DuckDB v1.5.3 Bugfix Release

Choose a tag to compare

@lnkuiper lnkuiper released this 20 May 11:50
14eca11

This is a bugfix release for various issues discovered after we released v1.5.2.

Please also refer to the announcement blog post: https://duckdb.org/2026/05/20/announcing-duckdb-153

What's Changed

Read more

DuckDB v1.5.2 Bugfix Release

Choose a tag to compare

@pdet pdet released this 13 Apr 10:46
8a58519

This is a bug fix release for various issues discovered after we released v1.5.1

What's Changed

Read more

DuckDB v1.5.1 Bugfix Release

Choose a tag to compare

@lnkuiper lnkuiper released this 23 Mar 12:10
7dbb2e6

This is a bug fix release for various issues discovered after we released v1.5.0.

Please also refer to the announcement blog post: https://duckdb.org/2026/03/23/announcing-duckdb-151

What's Changed

Read more

DuckDB v1.5.0 "Variegata"

Choose a tag to compare

@lnkuiper lnkuiper released this 09 Mar 12:40
3a3967a

This release of DuckDB is named "Variegata" after the paradise shelduck Tadorna Variegata, also known as the paradise duck, a species of Shelduck (a group of goose-like ducks), endemic to New Zealand.

Please also refer to the announcement blog post: https://duckdb.org/2026/03/09/announcing-duckdb-150.html

What's Changed

  • Optimize LAST aggregate to iterate backward within batches by @xe-nvdk
  • Allow user type with schema defined to have array bounds by @Dtenwolde in #18342
  • Remove case-insensitive character from grammar files by @Dtenwolde in #18948
  • Fix query() function error message for PIVOT statements without explicit IN clauses by @shivampr in #18900
  • Merge v1.4-andium into main by @c-herrewijn in #18952
  • [Dev] Some light code cleanup in RemoveUnusedColumns::VisitOperator by @Tishj in #18964
  • Support renaming a database - ALTER DATABASE <> RENAME TO <> by @abramk in #18970
  • V1.4 andium by @Mytherin in #18982
  • Fix field id uniqueness for alter database by @abramk in #18988
  • Fix unused variable warnings by @mlafeldt in #18913
  • Avoid adding a TupleDataChunkPart with only one row. by @lance5401 in #18904
  • Tiny fix for ColumnDataAllocator::ColumnDataAllocator by @baolinhuang in #18990
  • Fixes for ALTER DATABASE - use serialization framework, and fix stringification of identifiers by @Mytherin in #18994
  • Expected errors 2053 by @hmeriann in #18960
  • Fix union semantics in recursive CTEs by @cryoEncryp in #19017
  • Multifile parquet_metadata and friends parallelism by @J-Meyers in #18854
  • [Optimize] use StorageLock for CompressionFunction by @baolinhuang in #19028
  • PEG grammar updates by @Dtenwolde in #19031
  • Rework Compression Function registration to avoid grabbing locks by @Mytherin in #19045
  • Merge v1.4 into main by @Mytherin in #19048
  • [C-API] default to adding overload on conflict when registering functions by @Maxxen in #19036
  • Destroy row groups in parallel by @Mytherin in #19053
  • Switching core extension upload to dedicated credentials by @hannes in #19060
  • CI: Increase stale bot timeout to 1 year by @szarnyasg in #19000
  • Revert "set default value of MAIN_BRANCH_VERSIONING to false" by @c-herrewijn in #19057
  • Fix extension load by @dentiny in #19079
  • Change core extensions bucket name by @hannes in #19082
  • Merge v1.4 into main by @Mytherin in #19098
  • Allow directory override for extension build by @Mytherin in #19110
  • Skip serialization of row_start in DataPointer when targeting latest storage by @Mytherin in #19111
  • [C-API] Initial support for accessing file system by @Maxxen in #19086
  • Rework UNION (ALL) operators (SetOperationNode/LogicalSetOperation/PhysicalUnion) to have multiple children by @Mytherin in #19109
  • pushdown filter when doing cross or lateral join with unnest by @DinosL in #19085
  • Fix unholy interaction between CREATE VIEW and CTE definitions by @kryonix in #19116
  • Add support for read_duckdb - a function that allows reading / globbing DuckDB database files by @Mytherin in #19108
  • Fix typo by @szarnyasg in #19130
  • fix: check tree depth and flatten dep join for custom operator extension by @Wal8800 in #19094
  • During optimistic writing, gather N row groups and write them at the same time column-at-a-time by @Mytherin in #19118
  • Remove unused code by @szarnyasg in #19134
  • Add support for late materialization and filter pushdown to read_duckdb by @Mytherin in #19145
  • Move storage block prefetching to an option instead of baking in testing during ALTERNATIVE_VERIFY + add a test config for this option by @Mytherin in #19146
  • Introduce parser_override_function_t by @Dtenwolde in #19126
  • Perform deduplication based on join_keys when building ht by @tianjq16 in #19097
  • Print help to stdout by @staticlibs in #19170
  • Validate filesystem registration by @dentiny in #19168
  • Fix missing replacement scan code for CTEs by @kryonix in #19159
  • Correctly set row start in WAL replay by @Mytherin in #19192
  • Use a PartialBlockManager per column, instead of sharing one over the entire row group by @Mytherin in #19194
  • Internal #5380: AsOf Join Pipeline by @hawkfish in #19169
  • Cross and lateral join pushdown with unnest or json - update by @DinosL in #19152
  • Missing error messages for test cases by @hmeriann in #19129
  • [Profiling] Move EXTRA_INFO into the metrics map by @maiadegraaf in #19124
  • Common Subplan Elimination by @lnkuiper in #19080
  • GEOMETRY Rework: Part 1 - Logical Type by @Maxxen in #19136
  • [Parquet] Implement (unshredded) VARIANT support for COPY TO parquet by @Tishj in #19125
  • Add more missing error messages to test cases by @hmeriann in #19210
  • [CI] - Fix failing Extension updating test NightlyTests job by cleaning up some space on the runner by @hmeriann in #19214
  • Inconsistent semicolon handling by @Dtenwolde in #19199
  • Internal #5383: Range Join Sorting by @hawkfish in #19174
  • [Profiling] Add QueryContext to more functions, for Reads by @maiadegraaf in #18726
  • Merge v1.4-andium into main by @Maxxen in #19225
  • [shell] Fix tilde parsing for .once statement by @dentiny in #19254
  • Partially remove BoundQueryNode - have Bind directly emit a BoundStatement by @Mytherin in #19289
  • Binder clean-up by @Mytherin in #19293
  • test: add test for CREATE TABLE with my_schema.my_enum[] by @NickCrews in #19296
  • Fix uncaught exception in test_empty_profiling_settings.test by @maiadegraaf in #19286
  • GEOMETRY Rework: Part 2 - Statistics by @Maxxen in #19203
  • Internal #5380: AsOf Sorting Conversion by @hawkfish in #19278
  • Add option for opt-in to parser override by @Dtenwolde in #19181
  • Remove BoundTableRef and make binding a TableRef directly return a BoundStatement by @Mytherin in #19294
  • Rewrite Grouped Top-N Window Functions To Aggregations by @d-justen in #19280
  • Perform optimistic reads while filling gaps in CachingFileSystem by @carlopi in #19122
  • Issue #19027: AsOf Join Predicates by @hawkfish in #19316
  • Enable experimental metadata re-use by default by @Mytherin in #19317
  • Binder: BoundQueryNode cleanup by @Mytherin in #19322
  • Remove old sort code by @lnkuiper in #19321
  • [Parquet] Implement shredded VARIANT support for COPY TO parquet by @Tishj in #19219
  • Merge andium into main by @Tishj in #19325
  • [C API] Expose column count and type for table description by @taniabogatsch in #19334
  • Relocate the python sqllogic code to the dedicated repository by @Tishj in #19340
  • Binder: Rework the way set operations work so that we can use the standard binding flow by @Mytherin in #19342
  • Rework CTE binding: remove CTENode, and bind CommonTableExpressionMap directly instead by @Mytherin in #19351
  • Avoid keeping shared ptr to ClientContext in QueryContext by @Mytherin in #19353
  • Internal #6190: AsOf Threading by @hawkfish in #19328
  • [Indexes] Buffer Managed Indexes Part 4: Segment Handles f...
Read more

v1.4.4 Bugfix Release

Choose a tag to compare

@lnkuiper lnkuiper released this 26 Jan 12:08
6ddac80

This is a bug fix release for various issues discovered after we released 1.4.3. Please excuse the erroneous release earlier.

What's Changed

New Contributors

Full Changelog: v1.4.3...v1.4.4