From 3d7a31c7a32b4009450d98baace8f7ade356a428 Mon Sep 17 00:00:00 2001 From: Zachary Whitley Date: Thu, 9 Jul 2026 07:48:49 -0400 Subject: [PATCH] ducklink: update to v4.2.0 Six perf batches + a cold-start UX fix + an optional binary-size feature since v4.1.1. No API breaks, no WIT contract changes. USER-VISIBLE WINS (measured on darwin/aarch64): - Aggregate throughput on 1M-row workloads: 82 ms -> 38 ms (-54%) - Parallel scalar dispatch: 12.9 ms -> 5.75 ms (-55%) - Cold-start (offline / bad-DNS): 15 s -> 3 s - Extension binary (offline build variant): 25.9 MB -> 21.7 MB (-4 MB) Dispatch architecture: column-native aggregate UPDATE (G1/H1) with per-column typed accumulators; Weak on CallbackEntry so dispatch prologue is one atomic upgrade instead of HashMap lookup; per-thread scratch reuse for Colvec buffers (F4, G2, I1); every docs/discovery TF caches flat_vector handles above its row loop (F2, G4). Cold-start: catalog HTTP fetch timeout shortened from 15 s to 3 s; Engine2::new spawns a background thread that populates the catalog OnceLock so the first query usually pays zero wait. New optional `network` feature (default enabled) gates reqwest + rustls + sha2 out; `--no-default-features --features loadable,advanced` sheds 4 MB from the binary for air-gapped / minimum-size distributions. The community-extensions CI runs default features so the distributed artifact keeps network support. --- extensions/ducklink/description.yml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/extensions/ducklink/description.yml b/extensions/ducklink/description.yml index 60ab9f6a9..3811eadbe 100644 --- a/extensions/ducklink/description.yml +++ b/extensions/ducklink/description.yml @@ -3,7 +3,7 @@ extension: name: ducklink description: Load portable WebAssembly extension modules into DuckDB from SQL - version: 4.0.0 + version: 4.2.0 language: Rust build: cargo license: MIT @@ -19,7 +19,7 @@ extension: repo: github: tegmentum/ducklink-extension - ref: v4.0.0 + ref: v4.2.0 docs: hello_world: | @@ -49,11 +49,25 @@ docs: A set of system views makes everything introspectable: - * ducklink.modules — the full catalog, with a `loaded` flag - * ducklink.functions — every function with its full SQL signature - * ducklink.capabilities — what this host build supports - * ducklink.cache — the local component cache - * ducklink.versions — module generations and compatibility + * ducklink.modules — the full catalog, with a `loaded` flag + * ducklink.functions — every function with its full SQL signature + * ducklink.docs — searchable per-function documentation + * ducklink.host_capabilities — capability kinds this host build satisfies + * ducklink.host — this host's WIT contract version + DuckDB build info + * ducklink.cache — the local component cache + * ducklink.module_compatibility — per module × generation: runnable, selected, lifecycle + + Two companion helpers make the doc surface interactive: + `ducklink_search('query')` returns ranked function matches across name, + tags, summary, and description; `ducklink_help('name')` renders the + markdown block for a single function or every function in a module — + so the catalog is discoverable from SQL without leaving the session. + + Components can also ship their own docs bundled in the `.wasm` binary + via a `duckdb.docs` custom section (JSON per function). Ducklink reads + the section at load and merges it with the catalog docs — component + summary/description/example override the catalog, tags union — so + third-party modules can keep their own docs authoritative. On Linux and macOS an advanced tier also enables a `LOAD WASM ''` statement — an explicit, sandbox-aware alternative to `ducklink_load` that