C11 · NANOARROW · ARROW IPC
vgi-rpc for C¶
Build services around Arrow arrays. Call them from any vgi-rpc implementation.
vgi-rpc-c implements the shared Arrow IPC RPC protocol with C11 and nanoarrow.
Its public API accepts Arrow C Data arrays and schemas. Application code owns
its schema declarations and builds batches against them; the runtime owns RPC
framing, transport I/O, continuation tokens, and error/log envelopes.
From build to first call¶
git clone https://github.com/Query-farm/vgi-rpc-c.git
cd vgi-rpc-c
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
./build/vgi-rpc-example-client ./build/vgi-rpc-calculator
# 2 + 3 = 5
Install the native dependencies first. The runtime and its Arrow dependencies compile as C; Python is used only for development tooling and interoperability tests.
Choose your next step¶
| Task | Guide | Public header |
|---|---|---|
| Build, install, or embed the library | Building | CMake vgi_rpc::vgi_rpc |
| Register a unary or streaming service | Server | vgi_rpc/rpc.h |
| Make calls or consume streams | Client | vgi_rpc/client.h |
| Transfer batches through shared memory | Shared memory | vgi_rpc/shm.h |
| Reuse bounded subprocess workers | Pooling | vgi_rpc/pool.h |
| Export traces and metrics | OpenTelemetry | vgi_rpc/telemetry.h |
| Configure HTTP and identity | Hosting | vgi_rpc/http.h, identity.h, proof.h |
| Publish or fetch external batches | Hosting | vgi_rpc/external.h |
| Read and write Arrow IPC | Ownership | vgi_rpc/ipc.h, stream.h, batch.h |
| Reproduce compatibility checks | Conformance | Shared Python test harness |
Start with the compiled calculator server and client, or browse the public API reference. For the canonical protocol, use the wire specification. The framework's general documentation is at vgi-rpc.query.farm.
What the library provides¶
Unary calls, producer streams, and bidirectional exchanges run over subprocess pipes, Unix sockets, TCP, and HTTP. HTTPS clients verify certificates through libcurl. Local callers can use negotiated shared memory and bounded worker pools; HTTP services can use authenticated continuations, identity, external payloads, and response limits. OpenTelemetry exports client/server traces and metrics.
See conformance and scope for tested behavior and current gaps, including native Iroh connectors and bundled OAuth/cloud credential-provider SDKs.
The separate vgi-c SDK adds the VGI application protocol. Catalogs, DuckDB function execution, COPY, pruning, and attach tickets belong there rather than in this RPC library.
Built by Query.Farm. Available under the Query Farm Source-Available License, Version 1.0.