egrpc is a Python framework for transparent inter-process communication over gRPC.
It generates protobuf definitions and gRPC services automatically from Python type hints at import time, eliminating the need for .proto files or manual code generation.
Just add decorators and your functions and classes become callable across process boundaries.
pip install egrpc@egrpc.function makes a function callable over gRPC.
Arguments and return values are serialized automatically based on type hints.
import egrpc
@egrpc.function
def add(x: int, y: int) -> int:
return x + ySupported types include int, float, str, bool, None, list, dict, tuple, Union, Optional, slice, and nested combinations.
@egrpc.dataclass defines a value type that is passed by value (serialized by field) across the RPC boundary.
@egrpc.dataclass
class Point:
x: float
y: float
@egrpc.function
def distance(p1: Point, p2: Point) -> float:
return ((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2) ** 0.5@egrpc.remoteclass defines a stateful object that lives on the server.
The client holds a lightweight reference and calls methods via gRPC.
@egrpc.remoteclass
class Counter:
@egrpc.method
def __init__(self, initial: int = 0):
self._count = initial
@egrpc.property
def count(self) -> int:
return self._count
@egrpc.method
def increment(self) -> None:
self._count += 1Server:
egrpc.serve(port=12345)Client:
egrpc.connect("localhost", 12345)
print(add(1, 2)) # 3
print(distance(Point(0, 0), Point(3, 4))) # 5.0
c = Counter(10)
c.increment()
print(c.count) # 11
egrpc.disconnect()This project is managed using uv.
Test:
uv run pytestType check:
uv run mypy --strict src/ test/This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Copyright 2025 TOYOTA MOTOR CORPORATION.