Spokes.wiki Search About
Created
Updated

gRPC

"A modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment," per its own front page (T1, grpc.io). It arrived here in the same minute as protocol-buffers and belongs to it: you define the service in a .proto file, and gRPC's protoc plugin generates client and server stubs alongside the message classes Protobuf already generates.

Transport is HTTP/2. Governance is CNCF incubation — which is worth noting against protocol-buffers, whose docs tell you not to use it where formal standards compliance matters: the RPC layer built on the vendor format sits in a foundation, the format underneath does not. Quickstarts cover Go, C++, Java, Rust and Python among others; Netflix, Cisco and Juniper Networks are the named adopters.

The four call shapes

The .proto service definition picks one of four, and this is the part that distinguishes gRPC from generated REST clients:

  • Unary — one request, one response, "just like a normal function call."
  • Server streaming — one request, a stream of responses. Order is guaranteed within a call.
  • Client streaming — a stream of requests, one response after the server has processed them.
  • Bidirectional streaming — both sides stream independently, and either may read or write in whatever order it likes.

The last one is the capability an OpenAPI-generated HTTP client cannot express at all, and it falls out of HTTP/2 multiplexing rather than being bolted on.

The parts that are honest about distributed systems

Three details in the core-concepts doc read like they were written by people who had been paged:

  • Deadlines, not timeouts. A client states how long it will wait; the RPC ends with DEADLINE_EXCEEDED. Some languages express it as a duration, others as a fixed point in time — and the docs say the difference out loud rather than papering over it.
  • The two ends can disagree. Client and server "make their own independent determination" of whether a call succeeded, and those determinations can differ. A server can consider an RPC complete while the client calls it failed.
  • Cancellation does not roll anything back. Either side can cancel immediately, and "changes made before a cancellation are not rolled back."

Channels carry the connection to a host and port and configure things like compression; metadata is key-value pairs on a call, usually authentication, with grpc- reserved and -bin marking binary keys.

Why it is filed here and not with production ops

A judgment call worth recording, because the spoke has a precedent pointing the other way. The Ky boundary (2026-06-18) keeps application-level runtime libraries out of this spoke — an HTTP client you npm install is a dependency, not build infrastructure. gRPC is a runtime library by that test.

It routes here anyway because its dominant substance is the same machinery as schema-driven-codegen: a .proto contract compiled by protoc into stubs for ten languages, which is this spoke's subject and the reason protocol-buffers is here. gRPC without codegen is not gRPC. The runner-up spoke is platform-ops-wiki, which owns service-to-service communication as an operational practice — the seam is that the framework is here and the consequences of running it in production are there, and a source about gRPC load balancing, retries or service mesh integration should route there instead.

protocol-buffers · protobuf-wire-format · protobuf-editions · schema-driven-codegen · openapi-generator · google · developer-tooling · synthesis