NestJS tRPC is a library designed to integrate the capabilities of tRPC into the NestJS framework. It aims to provide native support for decorators and implement an opinionated approach that aligns with NestJS conventions.
- ✅ Supports most tRPC features out of the box with more to come.
- 🧙 Full static typesafety & autocompletion on the client, for inputs, outputs, and errors.
- 🙀 Implements the Nestjs opinionated approach to how tRPC works.
- ⚡️ Same client-side DX - We generate the AppRouter on the fly.
- 🔋 Examples are available in the ./examples folder.
- 📦 Out of the box support for Dependency Injection within the routes and procedures.
- 👀 Native support for
express
,fastify
, andzod
with more drivers to come!
To install NestJS tRPC with your preferred package manager, you can use any of the following commands:
# npm
npm install nestjs-trpc zod @trpc/server
# pnpm
pnpm add nestjs-trpc zod @trpc/server
# yarn
yarn add nestjs-trpc zod @trpc/server
Here's a brief example demonstrating how to use the decorators available in NestJS tRPC:
// users.router.ts
import { Inject } from '@nestjs/common';
import { Router, Query, Middlewares } from 'nestjs-trpc';
import { UserService } from './user.service';
import { ProtectedMiddleware } from './protected.middleware';
import { TRPCError } from '@trpc/server';
import { z } from 'zod';
const userSchema = z.object({
name: z.string(),
password: z.string()
})
@Router()
class UserRouter {
constructor(
@Inject(UserService) private readonly userService: UserService
) {}
@Middlewares(ProtectedMiddleware)
@Query({ output: z.array(userSchema) })
async getUsers() {
try {
return this.userService.getUsers();
} catch (error: unknown) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "An error has occured when trying to get users.",
cause: error
})
}
}
}
👉 See full documentation on NestJS-tRPC.io. 👈
NestJS tRPC is developed by Kevin Edry, which taken a huge inspiration from both NestJS and tRPC inner workings.