A Rust-based server that runs a local DuckDB instance and support queries over Web Sockets or HTTP/HTTPS, returning data in either Apache Arrow or JSON format.
Note: This package provides a local DuckDB server. To instead use DuckDB-WASM in the browser, use the wasmConnector in the mosaic-core package.
Install and run the server with
cargo install duckdb-server
duckdb-serverYou can disable or customize logging with the RUST_LOG environment variable.
env RUST_LOG="" duckdb-serverThe server can reuse existing sockets with listenfd.
systemfd --no-pid -s http::3000 -- duckdb-serverTo use HTTPS and HTTP/2, you need localhost.pem and localhost-key.pem in the current directory or at the env variable CARGO_MANIFEST_DIR.
Create certificates for localhost with mkcert
mkcert localhostThe server supports queries via HTTP GET, POST, and Arrow Flight. The GET endpoint is useful for debugging. For example, you can query it with this url.
Each endpoint takes a JSON object with a command in the type. The server supports the following commands.
Executes the SQL query in the sql field.
Executes the SQL query in the sql field and returns the result in Apache Arrow format.
Executes the SQL query in the sql field and returns the result in JSON format.
Build the release binary with
cargo build --releaseTo run the server and restart it when the code changes, install cargo-watch and systemfd with
cargo install cargo-watch systemfdThen run the server with
systemfd --no-pid -s https::3000 -- cargo watch -x runOr just use (but this won't restart when the code changes)
cargo runBefore sending a pull request, run the tests with
cargo test
cargo clippy
cargo fmtRun the benchmarks with
cargo benchUpdate the lockfile with cargo update and look for outdated dependencies with cargo-outdated cargo outdated -d 1.
Bump the version in Cargo.toml and then run cargo publish.