---
title: "This Month in the DuckDB Ecosystem: December 2025"
canonical: "https://motherduck.com/blog/duckdb-ecosystem-newsletter-december-2025/"
related:
  - title: "DuckDB Ecosystem Newsletter : July 2026"
    url: "https://motherduck.com/blog/duckdb-ecosystem-newsletter-july-2026/"
  - title: "What's New in DuckDB 1.5! | MotherDuck"
    url: "https://motherduck.com/videos/whats-new-duckdb-15/"
  - title: "DuckDB breaks the lakehouse? ft. Daniel Beach | EXPLAIN ANALYZE | MotherDuck"
    url: "https://motherduck.com/explain-analyze/0003-duckdb-breaks-the-lakehouse/"
---

# This Month in the DuckDB Ecosystem: December 2025

## Hey, friend 👋

<p>I hope you're doing well. I'm&nbsp;<a href="https://www.ssp.sh/"><span>Simon</span></a>,&nbsp;and I am excited to share the last monthly newsletter 🎄 of the year with highlights and the latest updates about DuckDB, delivered straight to your inbox.</p>
<p>In this December issue, I gathered the usual highlights, including insights on key developments like data-at-rest encryption and new spatial extensions (Gaggle and osmextract), various ecosystem integrations (DuckLake, dlt, Ibis, Marimo), and data engineering advice based on Reddit.</p>
<p>If you have feedback, news, or any insights, they are always welcome. 👉🏻 <a href="mailto:duckdbnews@motherduck.com"><span>duckdbnews@motherduck.com</span></a>.</p>
<p><!-- notionvc: 85a2a616-c84e-4cbe-8896-690d9276a14f --></p>

<style type="text/css">
.newsheading {
  border: 0px;
}

.newsheading img {
  border: 0px;
  vertical-align: middle;
  margin-bottom: 16px;
}

.row {
  display: flex;
  flex-direction:column;   
  margin-bottom: 10px;
}

.rowreverse {
  flex-direction:column-reverse;
}

@media screen and (min-width: 600px) {
  .row {
    flex-direction: row;
  }
.columnTextLeft h3 {
  margin-left: 0px !important;
  margin-right: 20px !important;
}

.columnTextRight h3 {
  margin-left: 20px !important;
}

.columnTextLeft p {
  margin-left: 0px !important;
  margin-right: 20px !important;
}

.columnTextRight p {
  margin-left: 20px !important;
}  
}

.columnPic {
  flex: 30%;
}


.columnText {
  flex: 70%;
}

.columnText h3 {
  margin-top: 0px !important;
}


</style>

<table class="newsheading" style="margin-bottom: 5px;">
  <tr>
    <td class="mobileoff"><span><img src="https://22616816.fs1.hubspotusercontent-na1.net/hubfs/22616816/featured_member_graphic.png" width="64" height="64" /></span></td>
    <td><h2>Featured Community Member</h2></td>
  </tr>
</table>

<div class="row">
  <div class="columnPic"><img src="https://22616816.fs1.hubspotusercontent-na1.net/hubfs/22616816/nico.jpeg"></img></div>
  <div class="columnText columnTextRight">
    <h3>Nico Ritschel</h3>
    <p><p><a href="https://www.linkedin.com/in/nicoritschel/" rel="noopener">Nico Ritschel</a> is director&nbsp;of engineering at ATM.com and the creator of Sidequery, a privacy-first SQL analytics notebook for Mac that uses DuckDB as its core engine. He recently released two community extensions that push DuckDB into new territory.</p>
<p><a href="https://github.com/sidequery/yardstick" rel="noopener">Yardstick</a> implements Julian Hyde's "Measures in SQL" paper, adding measure-aware SQL to DuckDB. Measures are aggregations that know how to re-aggregate themselves when query context changes, enabling percent-of-total calculations and year-over-year comparisons without the usual CTE gymnastics. With syntax like AGGREGATE(revenue) AT (ALL region), you can compute totals across dimensions directly in your query.</p>
<p><a href="https://github.com/sidequery/duckdb-acp" rel="noopener">duckdb-acp</a> brings natural language querying to DuckDB via the Agent Client Protocol. Write queries like CLAUDE what is the total revenue by product? and an AI agent explores your schema and generates the SQL. It supports Claude Code, Codex, and Gemini, with built-in safety controls to block mutations by default.</p>
<p>Thanks, Nico, for tackling two hard problems and making them accessible through DuckDB extensions!</p></p>
  </div>
</div>

<table class="newsheading" style="margin-bottom: 5px;">
  <tr>
    <td class="mobileoff"><span><img src="https://22616816.fs1.hubspotusercontent-na1.net/hubfs/22616816/top_links_graphic.png" width="64" height="64" /></span></td>
    <td><h2>Top DuckDB Links this Month</h2></td>
  </tr>
</table>



### [Gaggle: A DuckDB extension for working with Kaggle datasets](https://github.com/CogitatorTech/gaggle)

<p><strong>TL;DR:</strong> Gaggle is a Rust-based DuckDB extension that enables direct SQL queries on Kaggle datasets via the Kaggle API, eliminating manual download/extraction workflows.</p>
<p>Ever had to search for a good dataset? Heard of Kaggle.com? Gaggle uses the Kaggle API to search, download, and manage datasets, supporting CSV, Parquet, JSON, and XLSX files. The extension introduces a <span style="color: #188038;">kaggle:</span> prefix for replacement scans, allowing queries like <span style="color: #188038;">SELECT * FROM 'kaggle:vikrishnan/boston-house-prices/housing.csv' LIMIT 5</span> to read files directly without explicit path management, similar to the Hugging Face extension.</p>
<p><span style="color: #000000;">Setup requires Kaggle API credentials (export </span><span style="color: #188038;">KAGGLE_USERNAME</span><span style="font-size: 11px; color: #000000;"> and </span><span style="color: #188038;">KAGGLE_KEY</span><span style="color: #000000;">). Key functions include </span><span style="color: #188038;">gaggle_ls('owner/dataset')</span><span style="color: #000000;"> for listing dataset contents, </span><span style="color: #188038;">gaggle_download()</span><span style="color: #000000;"> for explicit caching, and </span><span style="color: #188038;">gaggle_file_path()</span><span style="fcolor: #000000;"> for resolving local paths.</span></p>


### [Book on Spatial Data Management with DuckDB](https://duckdb.gishub.org/)

<p><strong>TL;DR</strong>: Qiusheng has authored a new comprehensive book, <em>Spatial Data Management with DuckDB</em>, that serves as a practical guide with open-source code for implementing geospatial analytics workflows using DuckDB's spatial capabilities.</p>
<p>The book leverages DuckDB for spatial data with SQL and Python API integration and more advanced operations. Key technical topics covered include loading and exporting spatial data formats, executing geometry operations and functions, performing advanced spatial joins, and working with cloud-native vector tiles such as PMTiles.</p>
<p>Qiusheng demonstrates these concepts using real datasets, including the US National Wetlands Inventory and global building footprints. All code examples are provided as Python notebooks, runnable directly on MyBinder or Google Colab, offering a hands-on resource for building and optimizing spatial data pipelines within the DuckDB ecosystem, and are available on <a href="https://github.com/giswqs/duckdb-spatial" style="font-size: 11px;">GitHub</a>.</p>


### [osmextract: OpenStreetMap data extraction tool powered by DuckDB](https://github.com/tobilg/osmextract)

<p><strong>TL;DR:</strong> Osmextract is a high-performance, single-binary Rust tool that leverages DuckDB's spatial extension to extract and filter OpenStreetMap PBF data directly into GeoParquet or DuckDB files.</p>
<p><span style="color: #000000;">This ties into the spatial book above and provides a tool for a zero-copy pipeline from PBF input to Parquet output. It offers flexible filtering via JSON for tags, geometry filters, and a </span><span style="color: #188038;">--custom-sql-filter</span><span style="color: #000000;"> option for applying custom DuckDB SQL </span><span style="color: #188038;">WHERE</span><span style="color: #000000;"> clauses, such as </span><span style="color: #188038;">"cardinality(tags) &gt; 5"</span><span style="color: #000000;">, directly during extraction. The application automatically detects system resources like CPU cores and memory to optimize performance settings, though these can be manually overridden.</span></p>


### [4 Senior Data Engineers Answer 10 Top Reddit Questions](https://motherduck.com/blog/data-engineers-answer-10-top-reddit-questions/)

<p><strong>TL;DR</strong>: Sharing advice on common challenges, emphasizing robust design, iterative development, and focusing on business fundamentals over chasing trends.</p>
<p>In this article, I collaborated with Ben, Julien, and Mehdi, and we answered the most frequently asked questions from the r/dataengineering subreddit. This Q&amp;A synthesizes practical knowledge we learned over the years in data engineering and common problems.</p>
<p>We go from managing schema change, such as freezing schemas and always creating new columns rather than editing existing ones to avoid downstream breaks, or discussing the cognitive debt of auto-evolution, data quality, and much more.</p>


### [Data-at-Rest Encryption in DuckDB](https://duckdb.org/2025/11/19/encryption-in-duckdb)

<p><strong>TL;DR</strong>: DuckDB v1.4 introduces transparent, data-at-rest encryption for database files, the Write-Ahead Log (WAL), and temporary files with negligible performance overhead.</p>
<p>The feature supports AES-GCM-256 and AES-CTR-256 ciphers. The implementation keeps the main database header in plaintext but adds an encryption flag, a salt, and an encrypted "canary" to verify the key. All subsequent data blocks, WAL entries, and temporary files used in out-of-core operations are fully encrypted.</p>
<p>How do I use it? Encryption is enabled via the <span style="color: #188038;">ATTACH</span> statement, e.g., <span style="color: #188038;">ATTACH 'encrypted.db' AS enc (ENCRYPTION_KEY 'secret');</span>. While a fallback Mbed TLS implementation exists, DuckDB auto-loads the <span style="color: #188038;">httpfs</span> extension to use its hardware-accelerated OpenSSL backend, which results in minimal performance impact.</p>
<p>This enables new ways of working with DuckDB, for example safely passing around DuckDB database files with all information inside or new deployment models where you put an encrypted DuckDB database file on a Content Delivery Network (CDN).</p>


### [Tech Review: DuckLake - From Parquet to Powerhouse](https://thefulldatastack.substack.com/p/tech-review-ducklake-from-parquet)

<p><strong>TL;DR</strong>: This review says that DuckLake provides core lakehouse capabilities with minimal infrastructure, making it a straightforward alternative to more complex systems for managing versioned data.</p>
<p>The article demonstrates executing ACID-compliant DML like <span style="color: #188038;">UPDATE</span> and DDL like <span style="color: #188038;">ALTER TABLE ... ADD COLUMN</span> directly on the Parquet-based table. The versioning system allows for time-travel queries to specific data states using <span style="color: #188038;">... AT (VERSION =&gt; 1)</span>. Hoyt also shows how to add detailed commit messages and author metadata to transactions for governance purposes by wrapping DDL in a transaction block and using <span style="color: #188038;">CALL my_ducklake.set_commit_message(...)</span>. Also make sure to check out <a href="https://thefulldatastack.substack.com/p/creating-a-ducklake-in-motherduck"><span>part 2</span></a>, where he showcases using MotherDuck to create a DuckLake.</p>
<p><strong>Related</strong>: Check out another deep-dive <a href="https://www.pracdata.io/p/is-ducklake-a-step-backward"><span>Is DuckLake a Step Backward?</span></a> by Alireza Sadeghi where he compares it to log-oriented formats like Iceberg by storing detailed file and column statistics in SQL tables to avoid Hive's performance pitfalls.</p>


### [KEYNOTE: Data Architecture Turned Upside Down | PyData Amsterdam 2025](https://www.youtube.com/watch?v=DxwDaoUijTc)

<p><strong>TL;DR:</strong> The keynote guides you through the history of data architecture and showcases how we arrive at compute to client devices, leveraging modern single-node query engines and lakehouse formats to eliminate centralized data warehouse bottlenecks.</p>
<p>In this great PyData Amsterdam 2025 keynote, Hannes goes back from 1985 all the way to today and demonstrates DuckDB processing a 265GB dataset (6 billion rows) with a <span style="color: #188038;">COUNT(DISTINCT l_orderkey</span> query completing in 46 seconds using only 2GB memory, thanks to larger-than-memory intermediate result handling.</p>
<p>He illustrates how his <a href="https://15721.courses.cs.cmu.edu/spring2018/papers/14-networking/p1022-muehleisen.pdf"><span>earlier research paper</span></a> showed database client-server data transfer protocols performing worse than raw <span style="color: #188038;">netcat</span> CSV transfers, which he attributes to "strategic incompetence" that creates vendor lock-in. The proposed 2025 architecture flips the traditional pyramid. Clients become first-class compute nodes while storage (S3/object stores) and metadata (via formats like Iceberg or DuckLake) become commoditized infrastructure layers.</p>


### [dlt + MotherDuck: Workshop material for Small Data SF 2025](https://github.com/dlt-hub/small-data-sf-2025)

<p><strong>TL;DR</strong>: The small-data-sf workshop repository provides a guide for building a modern ELT pipeline using Python's <span style="color: #188038;">dlt</span> library, with DuckDB for local development and MotherDuck for production deployment.</p>
<p>In the workshop material, contributors Thierry and Elvis demonstrate the full lifecycle of a data project, from ingesting data from the GitHub REST API to building a data product. The technical stack is centered around a local-first workflow, using <span style="color: #188038;">duckdb</span> for initial data exploration and transformation, complemented by tools like LLM scaffolding, Continue, Marimo, and Ibis.</p>
<p>There's a tutorial part where speakers explain and demonstrate concepts and exercises that you can go through if you like to learn how to solve data engineering tasks.</p>


### [A Deep Dive into DuckDB for Data Scientists](https://codecut.ai/deep-dive-into-duckdb-data-scientists/)

<p><strong>TL;DR</strong>: Khuyen's deep dive demonstrates how DuckDB offers a zero-configuration, high-performance alternative to pandas for local data analysis, enabling direct SQL queries on various file formats and in-memory DataFrames.</p>
<p>The article highlights DuckDB's ability to directly query pandas and Polars DataFrames using <span style="color: #188038;">duckdb.sql("SELECT * FROM my_df")</span>. A key performance benchmark on a 1-million-row dataset shows an 8.7x speedup over pandas for aggregations. Khuyen showcases streamlined file handling, including automatic delimiter detection in <span style="color: #188038;">read_csv</span>, querying multiple files with wildcards like <span style="color: #188038;">'data/sales/*.csv'</span>, and flattening nested Parquet/JSON structures with simple dot notation.</p>
<p>The piece also covers crucial database features like ACID transactions (<span style="color: #188038;">BEGIN TRANSACTION</span>, <span style="color: #188038;">COMMIT</span>) and safe, parameterized queries using <span style="color: #188038;">?</span> placeholders.</p>



<table class="newsheading" style="margin-bottom: 5px;">
  <tr>
    <td class="mobileoff"><span><img src="https://22616816.fs1.hubspotusercontent-na1.net/hubfs/22616816/upcoming_events_graphic.png" width="64" height="64" /></span></td>
    <td><h2>Upcoming Events</h2></td>
  </tr>
</table>



### [DuckDB Developer Meeting #1](https://duckdb.org/events/2026/01/30/duckdb-developer-meeting-1/)

**Pakhuis de Zwijger, Amsterdam : Jan 30, 4:00 PM GMT+1**

<p>T<span>he first ever DuckDB Developer Meeting, organized by&nbsp;</span><a href="https://duckdblabs.com/" target="_blank" rel="noopener">DuckDB Labs</a><span>. The event will feature talks from DuckDB developers, and is aimed at developers who build DuckDB extensions or complex applications on top of DuckDB.</span></p>


### [Virtual Workshop: Build a Serverless Lakehouse with DuckLake](https://luma.com/362ipnys?utm_source=duckdbnewsletter)

**Online, Dec 17, 10:00 AM PST**

<p>in this hands-on webinar (an encore of our<span>&nbsp;</span><strong>Small Data SF</strong><span>&nbsp;</span>session),<span>&nbsp;</span><strong>Jacob Matson</strong><span>&nbsp;</span>will walk you through building a serverless lakehouse from scratch using<span>&nbsp;</span><strong>DuckLake</strong>. Ditch the heavy JVM baggage and get straight to the query.</p>

