Skip to content

Integrate DuckDB Quack protocol for multi-client local DuckDB access #42

@db-tycoon-stephen

Description

@db-tycoon-stephen

Summary

Add support for DuckDB Quack — the new RPC protocol (announced 2026-05-12, currently in beta) that turns DuckDB into a multi-client server. This is directly aligned with tycoon's local-first analytics story: today every consumer of the local catalog opens the DuckDB file in-process, which means only one process at a time gets a writable handle. Quack removes that constraint while staying local.

Why it matters for tycoon

  • Lets the CLI, a running tycoon ask Nao session, dbt, and Rill all talk to the same live DuckDB simultaneously — without copying or re-attaching.
  • Keeps everything on localhost; no cloud dependency, fits the local-first ethos.
  • Works with DuckLake storage too, which we already use as the Rill bridge.

Reference (from duckdb.org/quack)

Server:

INSTALL quack FROM core_nightly;
LOAD quack;
CALL quack_serve('quack:localhost', token => 'super_secret');

Client:

CREATE SECRET (TYPE quack, TOKEN 'super_secret');
ATTACH 'quack:localhost' AS remote;
FROM remote.hello;
  • Default port: 9494
  • Auth: token-based via DuckDB secret
  • Capacity (per duckdb.org): "a few thousand writes/sec on 8 CPU / 32 GB RAM"
  • Full DuckDB feature set: ACID, indexes, views; supports DuckLake

Proposed scope

  • tycoon serve (or similar) — start a Quack server bound to the active project's DuckDB / DuckLake, with a generated token persisted to project config
  • Update tycoon ask and other consumers to optionally attach via quack: instead of opening the file directly when a server is running
  • Doctor check: detect when a Quack server is up but config points at file path (or vice versa) and suggest the fix
  • Decide story for dbt + Rill: can they attach via Quack, or do we keep them on the file and serialize writes through tycoon?

Open questions

  • Is the quack extension stable enough on core yet, or are we stuck on core_nightly for now? (Affects what we tell users to install.)
  • How does Quack interact with our MotherDuck path — is there a hosted-mode equivalent, or is this strictly local?
  • Token lifecycle: regenerate per tycoon init, or per-session?

Out of scope (for this issue)

  • Remote / cross-machine Quack access — local only for now.
  • Replacing the in-process default path; Quack should be opt-in until it's GA.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions