What is @trpc/server?
@trpc/server is a TypeScript-first framework for building end-to-end typesafe APIs. It allows you to create APIs where the client and server share the same type definitions, ensuring type safety across the entire stack.
What are @trpc/server's main functionalities?
Creating a Router
This code demonstrates how to create a basic router with a single procedure using @trpc/server. The `greeting` procedure returns a simple 'Hello, world!' message.
const { initTRPC } = require('@trpc/server');
const t = initTRPC.create();
const appRouter = t.router({
greeting: t.procedure.query(() => 'Hello, world!'),
});
module.exports = { appRouter };
Creating Procedures
This code shows how to create a procedure that takes input and performs an operation. The `add` procedure takes two numbers as input and returns their sum.
const { initTRPC } = require('@trpc/server');
const t = initTRPC.create();
const appRouter = t.router({
add: t.procedure.input((z) => z.object({ a: z.number(), b: z.number() })).query(({ input }) => input.a + input.b),
});
module.exports = { appRouter };
Middleware
This code demonstrates how to use middleware in @trpc/server. The `isAuthed` middleware checks if the user is authenticated before allowing access to the `secretData` procedure.
const { initTRPC } = require('@trpc/server');
const t = initTRPC.create();
const isAuthed = t.middleware(({ ctx, next }) => {
if (!ctx.user) {
throw new Error('Not authenticated');
}
return next();
});
const appRouter = t.router({
secretData: t.procedure.use(isAuthed).query(() => 'Secret data'),
});
module.exports = { appRouter };
Other packages similar to @trpc/server
express
Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications. Unlike @trpc/server, Express does not provide built-in type safety and requires additional libraries for type checking and validation.
apollo-server
Apollo Server is a community-driven, open-source GraphQL server that works with any GraphQL schema. It provides a powerful way to build a GraphQL API with type safety, but it requires a different approach compared to @trpc/server, which is more focused on TypeScript and end-to-end type safety.
nestjs
NestJS is a progressive Node.js framework for building efficient, reliable, and scalable server-side applications. It uses TypeScript by default and provides a lot of built-in features, including dependency injection and a modular architecture. However, it is more heavyweight compared to @trpc/server.
tRPC
End-to-end typesafe APIs made easy
@trpc/server
Create tRPC routers and connect them to a server.
Documentation
Full documentation for @trpc/server
can be found here
Installation
npm install @trpc/server@next
yarn add @trpc/server@next
pnpm add @trpc/server@next
bun add @trpc/server@next
We also recommend installing zod
to validate procedure inputs.
Basic Example
import { initTRPC } from '@trpc/server';
import {
CreateHTTPContextOptions,
createHTTPServer,
} from '@trpc/server/adapters/standalone';
import { z } from 'zod';
function createContext(opts: CreateHTTPContextOptions) {
return {};
}
type Context = Awaited<ReturnType<typeof createContext>>;
const t = initTRPC.context<Context>().create();
const appRouter = t.router({
greeting: t.procedure
.input(
z.object({
name: z.string(),
}),
)
.query(({ input }) => `Hello, ${input.name}!`),
});
export type AppRouter = typeof appRouter;
const { listen } = createHTTPServer({
router: appRouter,
createContext,
});
listen(2022);