Plume executes data analytics queries on Dandelion leveraging DuckDB. It parses SQL queries using the standard DuckDB query parser and optimizer, then converts the resulting DuckDB LogicalPlan to a Plume PhysicalPlan (Dandelion composition DAG). The plan is executed using a set of operators built on top of DuckDB's internal compute kernels without using a full-fledged DuckDB instance to keep the functions lightweight.
The repository is structured as follows:
core/— the query engine + SQL compiler, built as theplumelibrary shared byfunctions/andclient/.functions/— the Dandelion-invoked function executables (plume_stage,plume_{csv,pq}_{prepare,stage}) and their host ABI.client/— the SQL -> Dandelion-composition compiler plus theplume_export/plumebinariesbenchmarks/— the TPC-H harness + a simple micro-benchmark tool, built againstclient.cmake/— shared CMake modules (DuckDB, cpr, nlohmann_json) and the tracked DuckDB extraction patches.dandelion/— the Dandelion preload config listing the function binaries to deploy.scripts/— setup and build scripts, including the two below.
scripts/build_dandelion.sh cross-compiles functions/ with the Dandelion SDK compiler and builds DuckDB for the target platform. Output binaries land in <build_dir>/functions/.
# (optionally) install LLVM, Cmake, libssl-dev, ninja
./scripts/setup_cloudlab.sh
# fetches the dsdk compiler if not provided (all flags have defaults)
./scripts/build_dandelion.sh -p <platform> -b <build_dir> -c <dsdk_compiler_path> -t <cpu_arch>scripts/build_client.sh builds client + benchmarks with the host compiler. Output binaries land in <build_dir>/plume/client/ and <build_dir>/plume/benchmarks/.
# (optionally) install LLVM, Cmake, libssl-dev, ninja
./scripts/setup_cloudlab.sh
# builds
./scripts/build_client.sh -b <build_dir> -d <duckdb_dir>