3.5 KiB
gRPC platform support matrix
What the Stable gRPC platform (:grpc:*) is certified against, what it is only checked against, and
what is merely watched. The distinction is the point: "works with Spring Boot" is not a statement
anyone can act on.
GrpcCompatibilityMatrix.caSkeleton() is the machine-readable form of this table, and
GrpcStableReleaseGate blocks a release when a certified lane has no result or a failing one.
Lanes
| Lane | Grade | Failure blocks a release |
|---|---|---|
| Boot-managed platform (Spring Boot 4.0.8 BOM) | Certified | Yes |
proto3 with explicit optional |
Certified | Yes |
grpc-netty-shaded |
Certified | Yes |
grpc-netty (unshaded) |
Compatibility | No |
| Upstream gRPC Java version override | Compatibility | No |
| Protobuf Edition 2024 | Watch | No |
| Protobuf Edition 2026 | Watch | No |
Runtime baseline
| Java | 21 |
| Spring Boot | 4.0.8 (the repository baseline; the plans assume 4.1) |
| io.grpc | ext.grpcVersion in src/build.gradle |
| Protobuf | ext.protobufVersion in src/build.gradle |
| Stable transport | Netty (shaded) |
| Stable RPC shapes | Unary, Server Streaming |
| Stable resolvers | Static, DNS, Unix domain socket |
| Stable load balancing | pick_first, round_robin |
Evidence grades
A capability may only be advertised on evidence of a grade that can establish it.
GrpcEvidenceGrade.requireCertifies enforces this, and GrpcReleaseEvidence.supports refuses a
claim backed by the wrong lane.
| Grade | Lane | Establishes |
|---|---|---|
CONTRACT |
grpcInProcessContractTest |
adapter, interceptor order, status mapping, validation, idempotency replay, context propagation |
TRANSPORT |
grpcNettyContractTest |
HTTP/2, TLS, mTLS, metadata limit, message limit, GOAWAY, keepalive, graceful shutdown |
FAULT |
grpcFaultTest |
connection loss, completion unknown, partial stream, evidence classifier |
PERFORMANCE |
grpcPerformanceTest |
latency, stream saturation, executor saturation, drain budget |
In-process results are never transport evidence. The in-process transport does not negotiate TLS, does not frame HTTP/2 and does not enforce transport-level limits, so a suite that passes there has tested the adapter and not the transport.
What is not supported
| Where it lives | |
|---|---|
| Client streaming, bidirectional streaming | grpc-advanced-streaming |
| Manual flow control | grpc-advanced-streaming |
| Hedging | grpc-advanced-resilience |
| Custom name resolver, custom load balancer | grpc-advanced-resilience |
| xDS | grpc-advanced-resilience |
| gRPC-Web, Servlet HTTP/2, Spring Integration, Reactor, Kotlin | grpc-advanced-compat |
| Channelz / CSDS diagnostics | grpc-advanced-diagnostics |
Current release status
Not released. Every :grpc:* leaf is runtime_memberships: [] in the module registry, so the
platform is build-only: it compiles, its lanes run, and no deployed artifact carries it.
Two release gate inputs are outstanding and are the work between here and a release:
- Performance baseline. The performance lane runs and asserts shape — ordered percentiles, a gate that reads them — rather than absolute numbers. A recorded baseline on a known runner is what turns it into a regression gate.
- Schema codegen. No
protocruns in this build (ADR-GRPC-002), so the descriptor artifact and the consumer-compile fixture are governed as policy rather than produced from a compiled schema.