Files

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 protoc runs 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.