Any engine can implement Warp SQL, and any HTTP client can call it. These implement version 1.
A server is conformant when it passes the conformance suite; clients are tested
by their own suites against conformant servers.
| Server |
What it is |
| Hardcharger |
A production server for DuckDB 2.0, built on libwarpsql, with access control, TLS and mutual TLS, browser sign-in and token exchange |
warp-duckdb |
The reference server, in this protocol’s repository: DuckDB 2.0 through its C API, on libwarpsql. For testing and development only, not production |
| SDK |
What it is |
libwarpsql (C++20) |
The protocol’s server side. An engine implements a Backend; the SDK owns authentication, handles bound to their principal, idempotency, retention, partitioned results, cancellation and draining, and streams every result through an asynchronous pipeline. It serves the OpenAPI document (§3.3) too |
| Client |
Language |
What it is |
warp-sql-adbc |
Go, Python |
An ADBC driver in Go, with Python bindings, loadable by any ADBC driver manager |
warp-sql-jdbc |
Java 17+ |
A JDBC driver in one jar, with no gRPC or Netty |
warp-sql-js |
TypeScript |
@gizmodata/warp-sql, over plain fetch and Arrow JS, for Node, browsers, Deno, Bun and Cloudflare Workers |
libwarpsql_client |
C++20 |
The protocol’s client side, synchronous: sign-in, both statement paths, prepared statements, ingest, metadata, cancellation from another thread, TLS and mutual TLS. Needs Arrow, Boost and OpenSSL |
curl and any HTTP library |
any |
Every flow on this site runs with curl, jq and an Arrow reader |
The drivers read a large result as 8 partitions at once by default (§6.10). The
JavaScript client also resumes dropped downloads of retained results (§6.5), retries
idempotently (§6.7) and cancels through an AbortSignal.
- Start from the specification and its OpenAPI document,
which describes every endpoint’s requests, responses, headers and errors for tools.
- A server lists in discovery (
GET /warp) the optional features it has; everything else is core
(§3.1). Names of its own (capabilities, session options, server-info keys, error
codes) carry a prefix naming the implementation (§2.7).
- Run the conformance suite against it. It starts the server itself, or talks
to a running one, and fails, never skips, without one.