Skip to content

ADBC: Arrow-native client access

XTDB exposes ADBC, the Arrow Database Connectivity standard. If your pipeline is Arrow-shaped throughout (pandas, polars, DuckDB, DataFusion, arrow-rs, pyarrow), ADBC fits straight in: query results land in your client as Arrow batches with no row-by-row decode, and bulk-ingesting an Arrow table happens in a single round trip.

XTDB’s storage layer, query engine, and wire format are all Arrow-native, and ADBC carries that through to the client.

  • Tutorial: an end-to-end walkthrough covering install, connect, ingest, query, transactions, and prepared statements.
  • Reference: the supported ADBC surface in detail. Which calls work, which don’t, and the per-client caveats (Python vs Rust vs Java).
  • How-to guides: task-shaped recipes. “Bulk-load Parquet via ADBC”, “round-trip a pandas DataFrame”, “stream results into DuckDB”.
  • Examples: minimal runnable hello-world programs in each supported language.

XTDB also exposes a PostgreSQL wire-compatible server. Use whichever fits your stack:

pgwireADBC (FlightSQL)
Toolingpsql, JDBC, psycopg, every PG clientADBC clients (Python, Rust, Go, C, R, Java)
Wire formatPostgres text/binaryArrow
Bulk ingestrow-at-a-time INSERT / executemanycur.adbc_ingest(arrow_table), one round trip
Result formatrows decoded one at a timeArrow batches streaming straight into your client
Type fidelityPostgres-mappedArrow-native (preserves Arrow types)

Both backends talk to the same XTDB node, so you can pick per workload and mix freely.