protoc-gen-grpc-py
protoc-gen-grpc-py generates well-typed, idiomatic gRPC stubs for protobuf-py, the ergonomic and modern Protobuf library for Python.
Fully typed clients and servicers you can read. asyncio and sync variants.
Plugs into your existing grpcio channels and servers.
It's a compatibility layer for projects already built on grpcio. The generated clients and servicers plug into your existing gRPC channels and servers, but serialize protobuf-py messages directly. This lets you upgrade to a better Protobuf package without touching your RPC stack.
[!TIP] For new projects, use Connect for Python instead. Connect speaks the gRPC and gRPC-Web protocols in addition to its own, so existing gRPC clients can call a Connect server unchanged. But you also get plain HTTP APIs you can
curl, first-class streaming, and generated clients for every major language, including your frontend.protoc-gen-grpc-pyonly exists so current gRPC codebases can get the improvements ofprotobuf-pytoday without a full rewrite.
Quickstart
Generated code requires the runtime libraries protobuf-py and grpcio. The plugin works with Protobuf compilers like buf.
$ uv add protobuf-py grpcio
$ uv add --dev protoc-gen-py protoc-gen-grpc-py buf-bin
Add protoc-gen-grpc-py alongside protoc-gen-py in your buf.gen.yaml:
version: v2
inputs:
- directory: proto
plugins:
# Generates message types (*_pb.py).
- local: protoc-gen-py
out: src/gen
# Generates gRPC service stubs (*_pb_grpc.py).
- local: protoc-gen-grpc-py
out: src/gen
To generate code for all Protobuf files within your project, run:
$ uv run -- buf generate
A *_pb_grpc.py file is generated for each proto file that declares a service. Message types come from protoc-gen-py, which also manages __init__.py files.
Feature highlights
Well-typed clients you can read
For each service, the plugin emits a client whose methods are fully typed, so editors and type checkers understand every RPC method, its request and response types, and its streaming shape:
async with grpc.aio.insecure_channel("localhost:50051") as channel:
client = ElizaServiceClient(channel)
response = await client.say(SayRequest(sentence="Hello!"))
print(response.sentence)
Servicers that register themselves
Each service also gets a servicer base class with typed method signatures and an add_to_server method:
class ElizaService(ElizaServiceServicer):
async def say(
self, request: SayRequest, context: grpc.aio.ServicerContext
) -> SayResponse:
return SayResponse(sentence=f"You said: {request.sentence}")
async def serve() -> None:
server = grpc.aio.server()
ElizaService().add_to_server(server)
server.add_insecure_port("[::]:50051")
await server.start()
await server.wait_for_termination()
asyncio and sync, side by side
Every client and servicer is generated in both asyncio (grpc.aio) and synchronous flavors:
with grpc.insecure_channel("localhost:50051") as channel:
client = ElizaServiceClientSync(channel) # synchronous servicer
response = client.say(SayRequest(sentence="Hello!"))
protobuf-py messages end to end
Requests and responses are protobuf-py messages. They have readable generated code, typed oneofs with pattern matching, real IntEnum enums, and a high-performance Rust encoder/decoder, with zero dependency on the legacy google-protobuf runtime.
Generating with protoc
The plugin also works with protoc as a standard protoc plugin:
$ uv run protoc --proto_path proto \
--py_out src/gen \
--grpc-py_out src/gen \
proto/a.proto proto/b.proto proto/c.proto
Example
See the example for a complete client and server using the generated stubs, including server, client, and bidirectional streaming.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file protoc_gen_grpc_py-0.2.1.tar.gz.
File metadata
- Download URL: protoc_gen_grpc_py-0.2.1.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e11a7613dc47d8a2d63df9291494088ac82ecec028ad80b5beb2cab4aaf30ff5
|
|
| MD5 |
7b130dbb5f59a0ae514ccadc86041155
|
|
| BLAKE2b-256 |
b255810153fa6052d752aabd46a29811ef15aaf099fadfc76af29de70f69c398
|
Provenance
The following attestation bundles were made for protoc_gen_grpc_py-0.2.1.tar.gz:
Publisher:
release.yaml on bufbuild/protoc-gen-grpc-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
protoc_gen_grpc_py-0.2.1.tar.gz -
Subject digest:
e11a7613dc47d8a2d63df9291494088ac82ecec028ad80b5beb2cab4aaf30ff5 - Sigstore transparency entry: 2281087695
- Sigstore integration time:
-
Permalink:
bufbuild/protoc-gen-grpc-py@5f6c556666d74b55cfc8d5d63d94c765abc3ef34 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bufbuild
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@5f6c556666d74b55cfc8d5d63d94c765abc3ef34 -
Trigger Event:
push
-
Statement type:
File details
Details for the file protoc_gen_grpc_py-0.2.1-py3-none-any.whl.
File metadata
- Download URL: protoc_gen_grpc_py-0.2.1-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96e8ceb51acd94d38b51e7822e17790bea7512920da41d9ca4a7b5ed7851bb67
|
|
| MD5 |
71e847f1b9d5a61bcf38362e333ea71e
|
|
| BLAKE2b-256 |
5df5871ea318f7ccdaa8d0a74a8943304e49d9cb4580e7cf0a5286399def0efd
|
Provenance
The following attestation bundles were made for protoc_gen_grpc_py-0.2.1-py3-none-any.whl:
Publisher:
release.yaml on bufbuild/protoc-gen-grpc-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
protoc_gen_grpc_py-0.2.1-py3-none-any.whl -
Subject digest:
96e8ceb51acd94d38b51e7822e17790bea7512920da41d9ca4a7b5ed7851bb67 - Sigstore transparency entry: 2281087720
- Sigstore integration time:
-
Permalink:
bufbuild/protoc-gen-grpc-py@5f6c556666d74b55cfc8d5d63d94c765abc3ef34 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/bufbuild
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@5f6c556666d74b55cfc8d5d63d94c765abc3ef34 -
Trigger Event:
push
-
Statement type: