Skip to content
Language SDKs

Workers in your language.

One wire protocol, multiple implementations. Every SDK interoperates over the same Apache Arrow IPC format.

Every implementation speaks the same wire protocol, so a DuckDB session can attach workers written in different languages in the same query. Pick the one your team already runs.

Python

Reference implementation

Build VGI workers in Python — the reference implementation, with full feature support: strict mypy typing, all transports, streaming, introspection, shared memory, and OpenTelemetry. The vgi package is the DuckDB worker framework; vgi-rpc is the transport layer underneath.

Install

pip install vgi-python
# or: uv add vgi-python

TypeScript

Feature parity

Build VGI workers in TypeScript for Bun, Node.js, and Deno. HTTP server/client, OpenTelemetry, dispatch hooks, HTML pages, external storage with S3/GCS backends, and SHA-256 checksums.

Install

npm install @query-farm/vgi
# or: bun add @query-farm/vgi

Go

Feature parity

Build VGI workers in Go, built on apache/arrow-go. HTTP server, OpenTelemetry, dispatch hooks, HTML pages, external storage with S3/GCS backends, and SHA-256 checksums.

Install

go get github.com/Query-farm/vgi-go/vgi

Rust

Feature parity

Build VGI workers in Rust, tracking the Python reference byte-for-byte on the wire — 452 / 452 conformance tests pass across pipe, subprocess, http, and unix transports. Optional features for HTTP, JWT, OAuth-PKCE, mTLS, OpenTelemetry, and Sentry.

Install

cargo add vgi

Java

Feature parity

Build VGI workers in Java 21+ with the farm.query:vgi package. Annotation-driven scalar/table/aggregate functions, catalogs with pushdown and statistics, stdio / Unix-socket / HTTP transports, and a shared-memory side-channel on JDK 22+. Wire-compatible with the Python reference and Go port — all three pass the same integration suite.

Install

# Gradle (Kotlin DSL), Java 21+:
implementation("farm.query:vgi:0.1.0")
Don't see your language?

VGI is a protocol — anyone can implement it

The wire format is Apache Arrow IPC over a pluggable transport. If your language has Arrow bindings (R, Julia, …) it can speak VGI. The full byte-level wire-protocol spec documents the exact format.

Working on a port? Get in touch — we're happy to help, and to list it here.

Expert help

Need a custom worker built?

We build VGI workers and DuckDB extensions for clients across stacks — pick the language, we'll ship the worker.