Overview
Geode uses a Protobuf-based wire protocol over QUIC (default) or gRPC for client-server communication. This document covers message formats, pagination semantics, status diagnostics, and federation result handling.
Key Features
- QUIC + TLS 1.3: Mandatory encryption for QUIC
- Protobuf Messages: Length-prefixed framing for QUIC; gRPC framing for gRPC
- Streaming Results: Paginated result sets with flow control
- Status Codes: ISO/IEC 39075 GQL status classes + diagnostics
- Federation Support: Coordinator merge of remote results
Transport Layer
QUIC Requirements
- QUIC protocol (RFC 9000)
- TLS 1.3 encryption
- ALPN:
geode/1 - Multiplexed streams + flow control
Default Port: 3141 (standard), 8443 (alternative)
gRPC (Optional)
gRPC is supported for compatibility; it uses the same Protobuf schema and runs over HTTP/2.
Message Schema
The full schema is defined in src/proto/geode.proto.
Top-level wrappers:
ClientPacket→QuicClientMessageServerPacket→QuicServerMessage
Core Requests
HelloRequest: authentication + client identityExecuteRequest: GQL query + parametersPullRequest: page retrievalBeginRequest/CommitRequest/RollbackRequestSavepointRequest/RollbackToRequest
Core Responses
ExecutionResponse wraps all responses with status + payload:
SchemaDefinitionDataPageErrorExplainPayloadProfilePayloadExecutionMetrics
Pagination Semantics
page_size=0defaults to 1000final=truemarks the last page- After
final=true, a newPULLreturnsNoResult ordered+order_keyssignal ordering guarantees
Policy: LIMIT/OFFSET without ORDER BY is rejected with diagnostic US001.
Status & Diagnostics
Each response includes a Status object:
status_class(ISO/IEC 39075 class)status_subclass(optional)additional_statuses(e.g.,US001,ExecutionGuardTrip)flagger_findings(implementation-defined or dependent behaviors)
Explain & Profile
Explain/Profile payloads are additive across releases. Clients should ignore unknown fields to remain forward-compatible.
Federation Result Handling (Internal)
Federated query execution returns one JSON line per remote shard/sub-query (internal protocol). The coordinator merges results and preserves ordering when all contributors are ordered. This result line protocol is internal/experimental and may change.