<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged trpc</title>
<link>https://coderlegion.com/tag/trpc</link>
<description>Powered by Question2Answer</description>
<item>
<title>nest-trpc-native: Full NestJS Power + tRPC Type Safety with Zero Runtime Overhead</title>
<link>https://coderlegion.com/13447/nest-trpc-native-full-nestjs-power-trpc-type-safety-with-zero-runtime-overhead</link>
<description>&lt;p&gt;Hey NestJS + tRPC community! &lt;/p&gt;
&lt;p&gt;I’m excited to release &lt;strong&gt;nest-trpc-native v0.3.0&lt;/strong&gt; — a decorator-first, native-feeling tRPC integration for NestJS.&lt;/p&gt;
&lt;p&gt;No adapter glue code in your app layer. No compromise on NestJS features.&lt;/p&gt;
&lt;p&gt;You write tRPC routers like Nest classes, with full support for dependency injection, guards, interceptors, pipes, filters, request-scoped providers, and end-to-end type safety.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=17248909666068432508&quot; alt=&quot;nest-trpc-native router sample&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;why-this-matters&quot;&gt;Why this matters&lt;/h4&gt;
&lt;p&gt;Most tRPC + NestJS approaches push you toward one side:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep all NestJS lifecycle features, but lose clean tRPC developer experience, or&lt;/li&gt;
&lt;li&gt;Keep pure tRPC style, but lose NestJS enhancers and request-scoped DI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;nest-trpc-native&lt;/code&gt; is designed so you can have both.&lt;/p&gt;
&lt;h4 id=&quot;core-features&quot;&gt;Core Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@Router('users')&lt;/code&gt; + &lt;code&gt;@Query()&lt;/code&gt;, &lt;code&gt;@Mutation()&lt;/code&gt;, &lt;code&gt;@Subscription()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Full support for &lt;code&gt;@UseGuards()&lt;/code&gt;, &lt;code&gt;@UseInterceptors()&lt;/code&gt;, &lt;code&gt;@UsePipes(ValidationPipe)&lt;/code&gt;, &lt;code&gt;@UseFilters()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Input()&lt;/code&gt; and &lt;code&gt;@TrpcContext()&lt;/code&gt; for parameter extraction&lt;/li&gt;
&lt;li&gt;Auto-generated router types (&lt;code&gt;autoSchemaFile: 'src/@generated/server.ts'&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Works with &lt;strong&gt;Express&lt;/strong&gt; and &lt;strong&gt;Fastify&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Zod &lt;strong&gt;or&lt;/strong&gt; classic &lt;code&gt;class-validator&lt;/code&gt; validation&lt;/li&gt;
&lt;li&gt;Zero runtime dependencies in &lt;code&gt;nest-trpc-native&lt;/code&gt; itself (host app controls Nest/tRPC peers)&lt;/li&gt;
&lt;li&gt;Monorepo-friendly sample layout&lt;/li&gt;
&lt;li&gt;Microservice transport pattern demonstrated in a focused sample&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=11621956187205643781&quot; alt=&quot;Architecture&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;router-example-nestjs-style-&quot;&gt;Router Example (NestJS style)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;@Router('users')
@UseGuards(AuthGuard)
export class UsersRouter {
  constructor(private readonly usersService: UsersService) {}

  @Query({ input: FindOneSchema, output: UserSchema.nullable() })
  @UsePipes(new ValidationPipe({ transform: true }))
  findOne(
    @Input() input: { id: number },
    @TrpcContext('requestId') requestId: string,
  ) {
    return this.usersService.findById(input.id);
  }

  @Mutation({ input: CreateUserSchema, output: UserSchema })
  create(@Input() input: { name: string; email: string }) {
    return this.usersService.create(input);
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Client side stays fully type-safe:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;const user = await trpc.users.findOne.query({ id: 123 });
// autocomplete + compile-time safety
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;installation&quot;&gt;Installation&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install nest-trpc-native @trpc/server
npm install @nestjs/common @nestjs/core reflect-metadata rxjs
# optional:
npm install zod
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then register the module:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;TrpcModule.forRoot({
  path: '/trpc',
  autoSchemaFile: 'src/@generated/server.ts',
})
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;samples-you-can-run-now&quot;&gt;Samples You Can Run Now&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sample/00-showcase&lt;/code&gt;: full integration baseline (guards, interceptors, pipes, filters, request scope, Express/Fastify, typed clients, subscriptions)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sample/11-microservice-transport&lt;/code&gt;: tRPC edge gateway + Nest microservice transport (TCP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From repo root:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run showcase
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;docs-repo-and-npm&quot;&gt;Docs, Repo, and NPM&lt;/h4&gt;
&lt;p&gt;Docs: &lt;a rel=&quot;nofollow&quot; href=&quot;https://rodrigobnogueira.github.io/nest-trpc-native/docs/introduction&quot;&gt;https://rodrigobnogueira.github.io/nest-trpc-native/docs/introduction&lt;/a&gt;&lt;br&gt;
Repo: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/rodrigobnogueira/nest-trpc-native&quot;&gt;https://github.com/rodrigobnogueira/nest-trpc-native&lt;/a&gt;&lt;br&gt;
NPM: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.npmjs.com/package/nest-trpc-native&quot;&gt;https://www.npmjs.com/package/nest-trpc-native&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Try it, break it, open issues, and share feedback.&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13447/nest-trpc-native-full-nestjs-power-trpc-type-safety-with-zero-runtime-overhead</guid>
<pubDate>Wed, 25 Mar 2026 00:48:12 +0000</pubDate>
</item>
</channel>
</rss>