pRPC
Type-safe, Python-first RPC
Build end-to-end typed APIs without OpenAPI pain, codegen, or boilerplate. The bridge between Python and Next.js.
Why pRPC?
Built for performance, developer experience, and safety.
Python-native
Built for asyncio, Pydantic, and modern Python — not a port of a legacy protocol.
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.
Zero Boilerplate
Focus on your logic, not the glue. No OpenAPI pain, schema files, or manual codegen required.
Superior DX
A developer experience that feels like local function calls, with full IDE support and auto-completion.
Extreme Flexibility
Scale from simple scripts to complex microservices with support for multiple transports and protocols.
One definition. Fully typed.
No manual schema files, instant type safety, and pure Python-first RPC.
class User(BaseModel):
id: int
name: str
@rpc
async def get_user(id: int) -> User:
return User(id=id, name="pRPC User")
@rpc
async def update_user(id: int, name: str):
return await db.users.update(id, name=name)const user = await client.get_user(1);
console.log(user.name);
// Full type-safety on mutations!
await client.update_user(1, "New Name");Loved by developers
Built for performance, reliability, and the best developer experience.