// STRYKE-DUCKDB — EMBEDDED DUCKDB SQL ENGINE FOR STRYKE // DIRECT-QUERY PARQUET / CSV / JSON

stryke package · CLI launcher duck · Rust helper stryke-duckdb-helper · opt-in (kept out of stryke core)

Report GitHub Issues
// Color scheme

>_STRYKE-DUCKDB

No import step. No schema. Just SQL. Embedded DuckDB SQL engine for stryke. Direct-query parquet / CSV / JSON from disk or URL without loading, persistent .duckdb files when you need them, full standard SQL on top. The CLI launcher is named duck.

Install

# build the helper binary, install as a stryke package
cd ~/projects/stryke-duckdb
cargo build --release
s pkg install -g .

# one-liner
make install

# verify
duck --help

After install, duck --help works from anywhere on PATH (assuming ~/.stryke/bin/ is on PATH). The stryke library is auto-discoverable to any project that depends on the package via [deps] duck = { path = "..." } or, when published, by name.

CLI: duck

query a parquet file directlyduck "SELECT COUNT(*) FROM 'sales.parquet'"
read CSV from URLduck "SELECT * FROM read_csv_auto('https://example.com/data.csv') LIMIT 10"
join parquet + CSV inlineduck "SELECT u.name, s.total FROM 'users.parquet' u JOIN 'sales.csv' s USING(id)"
persistent databaseduck --db myapp.duckdb "CREATE TABLE events AS SELECT * FROM 'events.parquet'"
export to parquetduck --output q.parquet "SELECT * FROM 'big.csv' WHERE qty > 100"

The full flag matrix lives in the README "CLI" section.

Why a package, not a builtin

DuckDB is an in-process analytical SQL engine; the duckdb crate with bundled compiles libduckdb from source into one static binary. Single-shot opt-in install.

The stryke side is a thin NDJSON-pipe wrapper; the heavy code lives in the stryke-duckdb-helper sidecar binary and is loaded on demand. Core stryke is never linked against this package's deps.

Helper protocol

The stryke-duckdb-helper sidecar speaks newline-delimited JSON over stdin/stdout. The stryke library shells out per call and pipes structured data both ways. This keeps stryke startup small while making the package's surface area available on demand.

# manual invocation (debugging only)
echo '{"op":"version"}' | stryke-duckdb-helper

Layout

stryke-duckdb/
├── Cargo.toml             # bin = stryke-duckdb-helper (publish = false)
├── src/
│   └── main.rs           # helper binary entry point
├── lib/                   # stryke .stk wrapper(s)
├── stryke.toml            # stryke package manifest
├── t/                     # zunit-style tests
├── examples/              # runnable .stk examples
├── Makefile               # `make install` builds + installs
└── docs/                  # this site (GitHub Pages)

Sibling packages

Part of the stryke connector family. Browse the others via the MenkeTechnologiesMeta umbrella repo (Tier 2):