Skip to main content

Type-safe RPC for NestJS

Call Nest methods like local functions. Zero boilerplate. Smart batching.

Server · Router

server/app.router.ts
import { Module } from '@nestjs/common';
import { Router, Route, defineAppRouter } from '@nestjs-rpc/server';

@Router()
export class UsersRouter {
@Route()
getUser({ id }: { id: string }) {
return { id, name: 'Ada Lovelace' };
}
}

export const appRouter = defineAppRouter({
users: UsersRouter,
});

@Module({ providers: [UsersRouter] })
export class AppModule {}

Client · Typed usage

client/rpc.ts
import { createRpcClient } from '@nestjs-rpc/client';

// Tip: export your router type from a shared package and use it here
type RpcApp = typeof appRouter; // e.g. import type { RpcApp } from '@acme/shared'

const client = createRpcClient<RpcApp>({
baseUrl: 'https://api.example.com',
apiPrefix: 'api',
});

const user = await client.users.getUser({ id: '1' });
console.log(user.name); // "Ada Lovelace"