pRPC

Type-safe, Python-first RPC for modern APIs

Build end-to-end typed APIs without OpenAPI pain, codegen, or boilerplate.

Why pRPC?

Python-native

Built for asyncio, Pydantic, and modern Python — not a port of a Java idea.

End-to-end typing

Request, response, and errors stay in sync without schemas or generators.

Plugin-driven

Auth, caching, observability, and transports as composable plugins.

Modern RPC for Python

ProblemREST / OpenAPIgRPCpRPC
BoilerplateHighHighLow
Python DXMediumPoorExcellent
Type safetyPartialStrongStrong
FlexibilityMediumLowHigh

One definition. Fully typed. No schema files.

server.py

@rpc
async def get_user(user_id: int) -> User:
    return await db.users.get(user_id)

client.py

user = await client.get_user.aio(user_id=1)
# Fully typed result!