Build type-safe APIs with tRPC.
Share types between frontend and backend seamlessly.
Why tRPC?
✅ End-to-end type safety
✅ No code generation
✅ Auto-completion
✅ Runtime validation
Server Setup
import { initTRPC } from ‘@trpc/server’;
const t = initTRPC.create();
const appRouter = t.router({
user: t.router({
get: t.procedure.query(async () => {
return [{ id: 1, name: ‘John’ }];
}),
create: t.procedure
.input(z.object({ name: z.string() }))
.mutation(async ({ input }) => {
return { id: 2, name: input.name };
})
})
});
Client
import { createTRPCProxyClient } from ‘@trpc/client’;
const client = createTRPCProxyClient(appRouter);
const users = await client.user.get.query();
Conclusion
tRPC eliminates API type errors!