I hope you're doing well. I'm Simon, and I am happy to share another monthly newsletter with highlights and the latest updates about DuckDB, delivered straight to your inbox.
In this September issue, I gathered the usual 10 updates, with the big two being the acquisitions (DuckLabs joins AWS, MotherDuck acquires Tower) and the upcoming 2.0 release, plus gains across the ecosystem, including table functions in pure Java, bulk loads into SQL Server, and Zarr for n-dimensional arrays, and the usual fun side project, such as an infinite canvas for your data.
Featured Community Member
Vladimir Gribanov
Vladimir is a software architect and the maintainer of Hugr, an open-source data mesh platform and GraphQL backend built on DuckDB. He is also the creator of the DuckDB MSSQL extension, a community extension that talks native TDS to SQL Server without ODBC or JDBC drivers, with filter pushdown, transactions, and bulk loading.
Alongside the code, he documents the journey in detail on Medium, from Azure Entra ID authentication to this month's deep dive on optimizing bulk loads into SQL Server (see below). Thanks, Vladimir, for making SQL Server a first-class citizen in the DuckDB world!
TL;DR: The two biggest ones first: AWS acquires DuckLabs, and MotherDuck acquires Tower.
MotherDuck acquired Tower.dev to integrate its runtime infrastructure into MotherDuck Flights, enabling AI agents to perform data engineering tasks and expose data as APIs. DuckLabs, the company behind DuckDB, joins Amazon Web Services (AWS), with its core open-source projects (DuckDB, DuckLake, Quack) remaining under the MIT license and stewarded by the DuckDB Foundation.
The HN consensus is a mix of concern and cautious optimism, given the independent foundation and MIT-licensed code. Read Jordan's comment on how MotherDuck thinks about it.
TL;DR: DuckDB v2.0-alpha (code-named Cyanoptera) is available, featuring a feature freeze, bug fixing, and preparation for an October release.
Key updates include the quack extension moving to v1.0, promising higher throughput for both server-to-client and client-to-server communication. The CLI and Python library have alpha releases available.
As a recap, the Preview of DuckDB v2.0 introduces a client/server mode via Quack and CONNECT, a new PEG-based SQL parser, a revised C API for extensions, and a new default storage format. Check out Mehdi's take on Why DuckDB 2.0 is faster (or video): async I/O for S3, a rewritten recursive CTE engine, and a more efficient VARIANT data type.
TL;DR: sql.garden is an open-source, Wails-based infinite canvas for data exploration that leverages an in-process DuckDB instance and the Model Context Protocol (MCP) for autonomous AI interaction.
Tony built it with a Go backend and Vue 3 frontend, querying Parquet, CSV, and JSON files at native speed alongside Postgres and MySQL connections. It imports data directly via s3:// URIs, offers a WebAssembly build for browser-based sandboxing, and ships an embedded MCP server. Try the demo in the browser.
TL;DR: The DuckDB Java client now supports registering table functions in pure Java, allowing developers to query any JVM-accessible data source directly via SQL without native C++ extensions.
Geertjan and Alex show heterogeneous joins between remote systems like MongoDB and local files using the DuckDBFunctions.tableFunction() builder. The implementation follows a vectorized lifecycle: bind defines the output schema, init establishes the connection state, and apply streams data into a DuckDBDataChunkWriter in 2048-row batches. Source-side predicate pushdown works by passing native filters, such as FROM mongo_query('coll', '{ "status": "shipped" }', ...), directly to vendor SDKs. Because functions run in-process, they eliminate intermediate export steps, giving engineers a high-performance path to integrate proprietary data sources or SOAP/REST services.
TL;DR: A new JetBrains IDE plugin leverages DuckDB's engine to provide near-instant visualization of billion-row Parquet, Avro, and ORC files with full schema support.
Less-Entertainer on Reddit built the Parquet, Avro & ORC Viewer because existing viewers render nested types or string columns as raw byte arrays. A 29 GB Parquet file with 1B rows opens in about 1039ms, and paging to the end takes roughly 800ms. Version 0.1.1 added cell editing, but an edit rewrites the whole file, 17 minutes on that 29 GB one. A not-yet-shipped branch has DuckDB rebuild only the affected row group and splice it back in, bringing that down to 1.8 seconds. JetBrains user? Check out the plugin.
TL;DR: The DuckDB MSSQL extension v0.2.3 optimizes bulk loading into SQL Server through parallel writers and schema-aware target shaping, reducing ingestion times for 38M rows from 933s to 96s.
Vladimir's (our featured member this month) primary bottleneck is the "PLP tax": unsized strings default to NVARCHAR(MAX), forcing data through a slower LOB path. Explicitly casting to MSSQL_NVARCHAR(200) gives a 2.45× speedup. SET mssql_copy_parallel_writers = 8 scales ingest across sessions, and the mssql_copy_flush_rows default of 102,400 lets rows bypass the delta store for direct compressed rowgroup entry. Raising mssql_tds_packet_size to 16,384 reduces client CPU usage by 27%.
TL;DR: Vignesh describes Streambed's shift from Apache Iceberg to DuckLake to solve the small-file problem in Postgres-to-DuckDB CDC pipelines.
Frequent small commits from the Postgres WAL create metadata overhead and high object counts in Iceberg. DuckLake stores catalog metadata in a database like DuckDB or SQLite rather than in object-store files, which slims down the Postgres WAL → Streambed → DuckDB write path. Benchmarks for 1M rows with 100k updates at flush=1,000 showed DuckLake with DuckDB finishing in 6,576 ms (405 objects) versus Iceberg COW's 269,344 ms (806 objects). Less commit work per batch means fresher analytical replicas.
TL;DR: duckdb-zarr is a Rust-based extension enabling DuckDB to query Zarr stores (an open format for chunked, compressed, N-dimensional arrays) directly using SQL, supporting both local files and remote object storage like S3 and GCS.
Alex and Dave implemented read_zarr(), read_zarr_metadata(), and read_zarr_groups(). Users can select specific arrays with array_path='0' or define dimensions with dims=['time','lat','lon'], and S3/GCS credentials come from DuckDB's secrets manager. Multi-dimensional scientific datasets become relational tables without an external query engine, which simplifies spatial and climate data analysis.
TL;DR: Rob explains how DuckDB v1.5.3 enables full read/write lifecycle management for Apache Iceberg tables through REST catalogs and native V3 support without requiring a distributed cluster.
The release unlocks MERGE INTO, ALTER TABLE, and Iceberg V3 features like VARIANT types and TIMESTAMP_NS precision. Integration goes through ATTACH 'uri' AS my_lake (TYPE ICEBERG), supporting REST, Glue, and S3 Tables. Performance relies on vectorized execution and metadata-driven pruning, but merge-on-read introduces "delete-file debt" and small-file I/O bottlenecks that degrade latency. DuckDB starts in milliseconds, yet query speed is dictated by table layout, so compaction and table maintenance still have to run outside DuckDB.
TL;DR: Jovan benchmarked DuckDB against SQLite for observability data, finding that DuckDB moves "read cliffs" 100x further while increasing write throughput on identical $16 hardware.
As Traceway's embedded storage engine, DuckDB reached 254,242 metrics/sec (4x) and 75,225 logs/sec (15x). DuckDB's columnar engine served metrics dashboards at 100M rows with a 3.0s median latency, while spans and logs hit their "cliff" at 10M rows. The benchmark ran with a 4 GB DUCKDB_MEMORY_LIMIT, while the compose file ships 2 GB. The takeaway: for single-node self-hosting, DuckDB is the better choice for high-volume logs and metrics.
The UK's largest data, analytics, and AI conference at Olympia London: two days, 400+ sessions, and exhibitors from Snowflake and Databricks to early-stage startups. Come find MotherDuck at booth P60.
LLMs writing SQL is old news. The real challenge is the infrastructure around them. Jacob Matson builds a working data agent from scratch in 60 minutes: MCP tools, a 30-line agent loop, a solid system prompt, read-only guardrails, and telemetry.
2026-11-05. h: 08:30. Convene 100 Stockton, San Francisco, CA
Editorial AI + data conference for builders at the forefront of AI + data. Two days on memory, agents, trust, interfaces, and data that can act. Small-format, high-context.
We're launching commercial support for open-source DuckDB, so every organization can get the power of a modern data engine, with direct access to database experts.