Quack connector
Quack is a remote protocol for DuckDB — it turns
DuckDB from an embedded engine into a client-server one. A DuckDB instance runs
as a server (CALL quack_serve('quack:host', …)) and clients reach it over the
network by attaching a quack: target. It's still the same duckdb driver and
the same SQL — only where the data lives changes. So this connector is a thin
subclass of the DuckDB connector: same engine, same
resilience, pointed at a remote server instead of a local file.
# sources.yaml
remote:
type: quack
host: data.example.com # the quack server host (target becomes quack:<host>)
port: 9494 # optional — omit for the server's default port
token: ${QUACK_TOKEN} # optional — ${ENV_VAR} expansion supported
database: remote # optional — ATTACH alias (default "remote")
| Key | Purpose |
|---|---|
host |
The Quack server host. Becomes the quack:<host> attach target. (Or set a full target: quack:… to pass it through verbatim.) |
port |
Optional server port, appended as quack:<host>:<port>. Omit for the default. |
token |
Optional Quack auth token, registered as a CREATE SECRET (TYPE quack …). ${ENV_VAR} is expanded. |
database |
The ATTACH … AS <alias> name you qualify remote tables with (default remote). |
install_extension |
Whether to INSTALL quack before loading it (default true). Set false if the extension is already present in your DuckDB. |
extension_repository |
Where to install from (default community; a https://… URL is also accepted). |
duckdb_config |
Optional extra settings passed to duckdb.connect (e.g. allow_unsigned_extensions). |
On connect the connector loads the Quack extension, registers the token secret
(if any), and ATTACH-es the remote. Then you query it like any DuckDB source,
qualifying remote tables with the attach alias:
SELECT region, sum(amount) AS revenue
FROM remote.sales
GROUP BY region
ORDER BY revenue DESC
Resilience: inherited from the DuckDB connector — if a query invalidates the
local connection, query() rebuilds it (re-loading the extension and re-attaching
the remote) and retries once.
Note
A ${param} always substitutes a quoted string literal (injection-safe — see
Queries), exactly as with the local
DuckDB connector.
Warning
Experimental / preview. Quack itself is in beta. This connector covers the
documented attach + token-secret flow and is not yet verified against a live Quack
server. The extension is a community extension, so a managed DuckDB build may need
duckdb_config: { allow_unsigned_extensions: true } to load it.
Extra: none — in the core install. The Quack extension is downloaded at
runtime by DuckDB (INSTALL quack FROM community), so there is no extra pip
dependency.