The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
Most of the time a DuckLake lives in one place and one person works with it. But data analysis is usually a team activity: a few statisticians share the same study data, an analytics group works from one set of cleaned tables, several people review the same numbers before a deliverable goes out. The usual answer is to copy files around (a CSV here, an XPT there) and hope everyone is looking at the same version.
Quack offers a different answer. It is a protocol, shipped as a core DuckDB extension in DuckDB 1.5.3, that lets one DuckDB instance act as a server while other DuckDB instances connect to it as clients. A DuckLake held by the server can then be read and updated by other R sessions over the network, with the same snapshots and time travel you get locally. Several people can write at the same time without locking each other out.
This vignette shows the two halves of that picture: connecting to a lake someone else is serving, and serving a lake of your own. The audience here is the everyday R user, so the examples stay close to ordinary analysis work and do not assume any server administration experience.
The code below is shown with its expected output but is not run when
the vignette is built, because Quack needs a live server and a recent
DuckDB. To follow along you need the duckdb R package at
version 1.5.3 or newer:
Quack is a core extension, so DuckDB loads it automatically the first time it is used. On a machine that has no internet access at query time you can install it ahead of time:
The other half of the picture is publishing a lake so others can connect to it. Say you have built a small medallion lake and a few colleagues want to read from it. You attach the lake as usual, then start a server.
attach_ducklake("trial", lake_path = "~/lakes/trial")
with_transaction(
create_table(mtcars, "vehicles"),
author = "You",
commit_message = "Seed the shared lake"
)The server runs in the background of the DuckDB instance, so your R session stays free for other work. Anyone who can reach the address can now connect with the client code from the previous section, pointing at your machine and using the same token.
Choose the address to match who should reach the server.
"quack:localhost" (the default) stays on your own machine,
which is useful for trying things out. To accept connections from other
machines, listen on a host name or address they can route to.
When you are finished, stop the server:
A token is the only thing standing between your data and anyone who
can reach the server. Pick a strong one. If you start a server without a
token, quack_serve() warns you, because an open server lets
any client that can reach it read and write the lake. On an untrusted
network, put the server behind TLS or a reverse proxy rather than
exposing it directly. The DuckDB Quack
documentation covers these deployment options.
Quack is in beta. The DuckDB team expects to settle the protocol, function names, and default settings before a stable release in DuckDB 2.0, so pin your versions if you depend on it in a pipeline. It needs DuckDB 1.5.3 or newer on both the server and the client; ducklake’s Quack functions check this and stop with a clear message on older engines. For very high write volumes a purpose built database is still the better tool, but for sharing a study lake across a small team Quack is a light way to get everyone onto the same versioned data.
?quack_serve, ?attach_quack, and
?quack_query for the function reference.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.