Wire protocols overview
This section documents QuestDB's wire protocols at the byte-on-the-wire level for client implementers — engineers building a new QuestDB client from scratch. End users should see the language client guides and the connect string reference.
QWP — QuestDB Wire Protocol
QWP is QuestDB's native wire protocol for both ingest and query traffic. The specifications below are normative — if a client's behaviour conflicts with a spec, the spec wins.
| Protocol | Transport | Purpose |
|---|---|---|
| QWP Ingress (WebSocket) | WebSocket | Columnar binary ingest with optional store-and-forward |
| QWP Egress (WebSocket) | WebSocket | Streaming SQL query results |
Versioning
Each connection negotiates a protocol version during the WebSocket upgrade.
The client advertises the highest version it supports via the
X-QWP-Max-Version header; the server replies with X-QWP-Version set to
min(clientMax, serverMax). Every message on the connection then carries the
negotiated version in its header. See each protocol page for the exact headers
and the per-version message layout.
Reference implementation
The reference client implementation is the Java client
(java-questdb-client).
Each protocol page below pins the reference-implementation commit that matches
its documented version.
Source specifications
The canonical specs live in the QuestDB Enterprise repository under
docs/qwp/. The pages in this section are the public expression of those
specs; the specs themselves remain the source of truth.