DuckDB 2.0 status below is measured, not asserted. "2.0 released" means a 2.0-keyed artifact is published and installable from the community registry (community-extensions.duckdb.org/v2.0.0/...). An HTTP request confirmed each artifact on 2026-10-30, on both linux_amd64 and osx_arm64. A read of one binary's metadata footer checked that the path key is truthful; it reports v2.0.0. "2.0 ready" means that repo's CI builds green on the 2.0 line, but no 2.0 artifact is published. "2.0 untested" means the repo has no 2.0 build leg, which is an absence of evidence rather than a known failure. Fifteen of the sixteen extensions below now serve a 2.0 artifact. Every extension here also remains installable on v1.5.6.

Document Processing

Project
Description
Status
webbed 2.0 released
Comprehensive XML and HTML processing with XPath extraction, schema inference, and format conversion
25.6k/wk 78 Build Issues

Comprehensive XML and HTML processing with XPath extraction, schema inference, and format conversion

Features

  • XML/HTML parsing with XPath
  • Smart schema inference
  • HTML table extraction
  • XML to JSON conversion

Already builds against the registry's own DuckDB 2.0 commit, not just the 2.0 branch.

duckdb_markdown 2.0 released
Comprehensive Markdown processing with file reading, content extraction, and block-level parsing
1.8k/wk 33 Build Issues

Comprehensive Markdown processing with file reading, content extraction, and block-level parsing

Features

  • Read and parse Markdown files
  • Extract frontmatter, code blocks, links, and headings
  • Block-level AST access
duckdb_yaml 2.0 released
YAML file reading with native type support and multi-document handling
26.7k/wk 24 Build Issues

YAML file reading with native type support and multi-document handling

Features

  • Read YAML files as structured data
  • Multi-document stream support
  • Type coercion and validation
duck_block_utils 2.0 released
Format-agnostic document block utilities with unified duck_block type and Pandoc AST conversion
1.1k/wk 6 Build Issues

Format-agnostic document block utilities with unified duck_block type and Pandoc AST conversion

Features

  • Unified block representation
  • Block builders and transformers
  • Pandoc AST interoperability
duckdb_read_lines 2.0 released
Simple parsers for fast extraction from line-based files
1.1k/wk 6 Build Issues

Simple parsers for fast extraction from line-based files

Features

  • Line-based file parsing
  • Fast extraction patterns
panduck 2.0 released
Native in-process document conversion and AST extraction for DuckDB
906/wk 5 Build Issues

Native in-process document conversion and AST extraction for DuckDB

Features

  • In-process document conversion
  • Document AST extraction

Code & Development

Project
Description
Status
duckent experimental 2.0 untested
Tree semantics for ordered relations: the ROWS contract and CSS-selector MATCH that sitting_duck and...
0 Issues

Tree semantics for ordered relations: the ROWS contract and CSS-selector MATCH that sitting_duck and duck_block_utils build on

Features

  • One selector semantics under every parser
  • CREATE TREE / USING TREE / MATCH design for DuckDB 2.0
  • Any adjacency list conforms via one recursive CTE
  • Interactive lesson: from grep to CREATE TREE

Not published to the community registry, so no artifact exists to key to 2.0 -- it returns 404 under both the v1.5.6 and the v2.0.0 key. Its pipeline still pins DuckDB v1.5.4.

sitting_duck 2.0 released
AST analysis using Tree-sitter for 27 programming languages with semantic type extraction
1.1k/wk 36 Build Issues

AST analysis using Tree-sitter for 27 programming languages with semantic type extraction

Features

  • Parse source code to AST
  • 27 language support
  • Pattern matching and queries
  • Semantic type extraction
duck_hunt 2.0 released
Log parsing extension for 90+ development tools and CI/CD systems
1.1k/wk 8 Build Issues

Log parsing extension for 90+ development tools and CI/CD systems

Features

  • Parse logs from 90+ tools
  • Format auto-detection
  • CI/CD workflow parsing
  • Context extraction

First of the fleet with a published DuckDB 2.0 artifact: its descriptor merged after the registry switched its default build to the 2.0 line, which triggered a 2.0-keyed deploy. It is still the only extension with an artifact under the pre-release key v2.0.0-alpha46057.

duck_tails 2.0 released
Git-aware data analysis with version control integration and repository queries
2.7k/wk 29 Build Issues

Git-aware data analysis with version control integration and repository queries

Features

  • git:// protocol support
  • Git LFS integration
  • Diff analysis
  • Repository metadata queries

Data & Formats

Project
Description
Status
duckdb_urlpattern 2.0 released
WHATWG URLPattern API implementation for URL matching and component extraction
1.2k/wk 9 Build Issues

WHATWG URLPattern API implementation for URL matching and component extraction

Features

  • URLPattern matching
  • URL component extraction
  • WHATWG standard compliant
duckdb_scalarfs 2.0 released
Scalar filesystem for in-memory content including variables, inline literals, and data URIs
2.2k/wk 10 Build Issues

Scalar filesystem for in-memory content including variables, inline literals, and data URIs

Features

  • In-memory file content
  • Data URI support
  • Variable storage
duckdb_zim 2.0 released
DuckDB extension for reading ZIM files — the offline web-archive format used by Kiwix/Wikipedia
885/wk 7 Build Issues

DuckDB extension for reading ZIM files — the offline web-archive format used by Kiwix/Wikipedia

Features

  • Read ZIM archive files
  • Query offline web content as tables

AI & Integration

Project
Description
Status
duckdb_mcp 2.0 released
Model Context Protocol server/client integration for AI agent connectivity
3.1k/wk 68 Build Issues

Model Context Protocol server/client integration for AI agent connectivity

Features

  • MCP server implementation
  • HTTP transport
  • Custom tool definitions
  • Multiple output formats
duckdb_func_apply 2.0 released
Dynamic function application allowing runtime invocation of functions by name
905/wk 5 Build Issues

Dynamic function application allowing runtime invocation of functions by name

Features

  • Runtime function dispatch
  • Dynamic invocation
  • Metaprogramming support
fledgling
MCP tools that help AI agents get their bearings in a codebase — unified SQL views over code, git,...
6 Issues

MCP tools that help AI agents get their bearings in a codebase — unified SQL views over code, git, docs, and conversations, powered by DuckDB

Features

  • Unified SQL views over code
  • Git history analysis
  • Documentation indexing
  • Conversation context
ducklog
Policy as a database — compiles umwelt agent-permission views into queryable DuckDB schemas
0 Issues

Policy as a database — compiles umwelt agent-permission views into queryable DuckDB schemas

Features

  • Compile umwelt policy to DuckDB
  • Query agent permissions with SQL
  • Policy-as-data introspection

Science & Research

Project
Description
Status
plinking_duck 2.0 released
DuckDB tools for Plink2 genetic data analysis
960/wk 7 Build Issues

DuckDB tools for Plink2 genetic data analysis

Features

  • Plink2 file format support
  • Genetic data analysis

Composition

These extensions are built to be used together. Readers turn different formats into the same duck_block type, and other extensions supply the filesystems those readers open -- git refs, ZIM archives, data: URLs -- with no extension depending on any other.

INSTALL markdown FROM community; INSTALL webbed FROM community; INSTALL duck_block_utils FROM community;

A markdown file's table of contents

markdownduck_block_utils

LOAD markdown; LOAD duck_block_utils;

SELECT level, title
FROM duck_blocks_toc_rows(
       (SELECT list(b) FROM read_markdown_blocks('README.md') b)
     );
┌───────┬───────────────────────────┐
│ level │           title           │
├───────┼───────────────────────────┤
│ 1     │ DuckDB Markdown Extension │
│ 2     │ Features                  │
│ 2     │ Installation              │
│ 3     │ Loading the Extension     │
└───────┴───────────────────────────┘

Run in the duckdb_markdown checkout. markdown parses the file; duck_block_utils walks the structure. The reader knows nothing about tables of contents, and the walker knows nothing about markdown.

HTML, through the same type

webbedduck_block_utils

LOAD webbed; LOAD duck_block_utils;

SELECT b.element_type, b.content
FROM (SELECT unnest(
        html_to_duck_blocks('<h1>Title</h1><p>Hi there</p><h2>Sub</h2>')
      ) AS b)
WHERE b.kind = 'block';
┌──────────────┬──────────┐
│ element_type │ content  │
├──────────────┼──────────┤
│ heading      │ Title    │
│ paragraph    │ Hi there │
│ heading      │ Sub      │
└──────────────┴──────────┘

Same element types, same columns, different format. A query written against one reader's output runs against the other's.

The table of contents as of any git commit

duck_tailsmarkdownduck_block_utils

LOAD duck_tails; LOAD markdown; LOAD duck_block_utils;

SELECT level, title
FROM duck_blocks_toc_rows(
       (SELECT list(b) FROM read_markdown_blocks('git://README.md@HEAD') b)
     );
┌───────┬───────────────────────────┐
│ level │           title           │
├───────┼───────────────────────────┤
│ 1     │ DuckDB Markdown Extension │
│ 2     │ Features                  │
│ 2     │ Installation              │
└───────┴───────────────────────────┘

duck_tails registers a git:// filesystem and markdown opens it through DuckDB's FileSystem API, so the reader needs no git support at all -- swap @HEAD for a tag and you get that release's structure. Three extensions, no dependency between them.

An offline Wikipedia article's structure

zimwebbedduck_block_utils

LOAD zim; LOAD webbed; LOAD duck_block_utils;

SELECT level, title
FROM duck_blocks_toc_rows(
       (SELECT html_to_duck_blocks(decode(zim_get_content('wikipedia.zim', path)))
        FROM read_zim('wikipedia.zim')
        WHERE NOT is_redirect AND title = 'Amphibian' LIMIT 1)
     );
┌───────┬───────────┐
│ level │   title   │
├───────┼───────────┤
│ 1     │ Amphibian │
└───────┴───────────┘

zim serves the article out of the archive, webbed turns its HTML into blocks, and duck_block_utils walks them -- the same walker as the markdown example above. Run against a 100-article mini archive, which is why the outline is short.

A document with no file at all

scalarfswebbedduck_block_utils

LOAD scalarfs; LOAD webbed; LOAD duck_block_utils;

SELECT element_type, content
FROM read_html_blocks('data:,%3Ch1%3EInline%3C/h1%3E%3Cp%3ENo%20file%20needed%3C/p%3E')
WHERE kind = 'block'
ORDER BY element_order;
┌──────────────┬────────────────┐
│ element_type │    content     │
├──────────────┼────────────────┤
│ heading      │ Inline         │
│ paragraph    │ No file needed │
└──────────────┴────────────────┘

scalarfs is what serves the data: URL -- controlled by running the same query without it loaded, where it errors. webbed's reader opens whatever path DuckDB can resolve, with no check on the file extension, so a URL carrying no filename works.

A live web page, straight into blocks

httpfswebbedduck_block_utils

LOAD httpfs; LOAD webbed; LOAD duck_block_utils;

SELECT element_type, left(content, 42) AS content
FROM read_html_blocks('https://example.com/')
WHERE kind = 'block'
ORDER BY element_order;
┌──────────────┬────────────────────────────────────────────┐
│ element_type │                  content                   │
├──────────────┼────────────────────────────────────────────┤
│ paragraph    │ This domain is for use in documentation ex │
└──────────────┴────────────────────────────────────────────┘

Core httpfs fetches it, webbed parses it, duck_block_utils types it -- and the same slot takes any filesystem extension, so a caching or object-storage layer drops in without the reader knowing. Ran against the live page; example.com is one paragraph of body content, which is why the outline is a single row.

Two formats in one query, validated by a third extension

markdownwebbedduck_block_utils

LOAD markdown; LOAD webbed; LOAD duck_block_utils;

WITH md   AS (SELECT list(b) AS blocks FROM read_markdown_blocks('README.md') b),
     html AS (SELECT html_to_duck_blocks('<h1>Title</h1><p>Hi</p>') AS blocks)
SELECT 'markdown' AS source, len(blocks) AS blocks,
       (duck_blocks_validate(blocks)).valid AS conforms FROM md
UNION ALL
SELECT 'html', len(blocks), (duck_blocks_validate(blocks)).valid FROM html;
┌──────────┬────────┬──────────┐
│  source  │ blocks │ conforms │
├──────────┼────────┼──────────┤
│ markdown │ 1339   │ true     │
│ html     │ 2      │ true     │
└──────────┴────────┴──────────┘

This is the part that makes the suite a suite. Two independently built extensions emit the identical STRUCT, a third validates both against a published spec, and a UNION ALL across them type-checks -- with no dependency between any of the three.

They agree because the vocabulary is versioned, not because they are linked: there is a published spec, one vendorable header of constants, and a drift check that fails CI when a consumer's copy disagrees by value -- a rename is a compile error, but a changed value is silent.

DuckDB Contributions

Extensions I've contributed to or maintain forks of

Project
Description
Status
parser_tools contributor
SQL parsing extension exposing DuckDB's native parser for query analysis
3.3k/wk 0 Issues

SQL parsing extension exposing DuckDB's native parser for query analysis

Features

  • Extract tables, functions, columns from SQL
  • Query structure analysis
  • DuckDB-native parsing
duckdb_iceberg contributor
Apache Iceberg table format support for DuckDB
0 Build Issues

Apache Iceberg table format support for DuckDB

Features

  • Read Iceberg tables
  • Time travel queries
  • Partition pruning

Originally developed by RelationalAI

duckdb_rdkit contributor
RDKit cheminformatics integration for molecular data analysis
0 Build Issues

RDKit cheminformatics integration for molecular data analysis

Features

  • Molecular structure handling
  • Chemical property calculations
  • Substructure search

Original author: bodowd