gRPC is a remote procedure call framework originally developed by Google. Services are defined in .proto files using Protocol Buffers (protobuf), which generate strongly-typed client and server code in many languages. Communication runs over HTTP/2 (binary, multiplexed, streaming) with protobuf-encoded messages. Common in microservice architectures and any environment where the per-request overhead of REST + JSON matters.
Developers write .proto files defining services, methods, and message types. The protoc compiler generates client stubs and server skeletons in Go, Java, Python, C#, Rust, etc. Calls look like local function invocations to the application code; the generated stubs handle serialization and HTTP/2 transport.
gRPC supports four call types: unary (request/response, like REST), server streaming (one request, many responses), client streaming (many requests, one response), and bidirectional streaming (both sides stream concurrently). The streaming modes are where gRPC genuinely beats REST; unary alone offers more typing and binary efficiency but most of the same patterns as REST.
gRPC is dominant in internal-service communication where performance matters: 5-10x faster than REST + JSON for typical workloads, with strongly-typed contracts that catch breakage at build time. For public APIs facing browsers, REST + JSON is still simpler. For service meshes, machine learning, and high-volume internal traffic, gRPC is the default.
The REST vs GraphQL article covers the broader API-style landscape including gRPC's place in it.