Command Palette

Search for a command to run...

Page Inspect

https://trpc.io/
Internal Links
23
External Links
41
Images
41
Headings
18

Page Content

Title:tRPC - Move Fast and Break Nothing. End-to-end typesafe APIs made easy. | tRPC
Description:End-to-end typesafe APIs made easy. Automatic typesafety & autocompletion inferred from your API-paths, their input data, & outputs ๐Ÿง™โ€โ™‚๏ธ
HTML Size:99 KB
Markdown Size:9 KB
Fetched At:November 18, 2025

Page Structure

h1Move Fast and Break Nothing. End-to-end typesafe APIs made easy.
h2Supported by
h3Automatic typesafety
h3Snappy DX
h3Framework agnostic
h3Autocompletion
h3Light bundle size
h3Batteries included
h2As used by
h2Simple to use with unmatched developer experience
h2Define your procedures
h2Create your HTTP server
h2Connect your client and start querying!
h2Try it out for yourself!
h2You may not need a traditional API
h3Alex/KATT
h2Don't take our word for it!
h2All Sponsors

Markdown Content

tRPC - Move Fast and Break Nothing. End-to-end typesafe APIs made easy. | tRPC

Skip to main content

๐ŸŽ‰ tRPC v11 is now released! Check out **the blog post now**.

**tRPC**

DocsQuickstartAwesome tRPC CollectionUsing Next.js

11.x

- 11.x
- 10.x
- 9.x

Search

# Move Fast and Break Nothing. End-to-end typesafe APIs made easy.

Experience the full power of TypeScript inference to boost productivity
for your full-stack application.

Star

Quickstart

You need a browser that supports HTML5 video to view this video.You need a browser that supports HTML5 video to view this video.

## Supported by

20 more

Many thanks to all of our amazing sponsors!

### Automatic typesafety

Made a server side change? TypeScript will warn you of errors on your client before you even save the file!

### Snappy DX

tRPC has no build or compile steps, meaning no code generation, runtime bloat or build step.

### Framework agnostic

Compatible with all JavaScript frameworks and runtimes. It's easy to add to your existing projects.

### Autocompletion

Using tRPC is like using an SDK for your API's server code, giving you confidence in your endpoints.

### Light bundle size

tRPC has zero dependencies and a tiny client-side footprint making it lightweight.

### Batteries included

We provide adapters for React, Next.js, Express, Fastify, AWS Lambda, Solid, Svelte, and more.

## As used by

tRPC is tried and trusted by leading tech teams and many Fortune 500 companies.

-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-

## Simple to use with
unmatched developer experience

It's quick and easy to get started with tRPC to build a typesafe API.

ts

``   const t = initTRPC.create();  const router = t.router;  const publicProcedure = t.procedure;  const appRouter = router({    greeting: publicProcedure      .input(z.object({ name: z.string() }))      .query((opts) => {        const { input } = opts;                   const input: {     name: string; }        return `Hello ${input.name}` as const;    }),  });  export type AppRouter = typeof appRouter;   ``

Copy

ts

``   const t = initTRPC.create();  const router = t.router;  const publicProcedure = t.procedure;  const appRouter = router({    greeting: publicProcedure      .input(z.object({ name: z.string() }))      .query((opts) => {        const { input } = opts;                   const input: {     name: string; }        return `Hello ${input.name}` as const;    }),  });  export type AppRouter = typeof appRouter;   ``

Copy

1

## Define your procedures

The first step to creating a tRPC API is to define your procedures.

Procedures are the functions we will use to build your backend. They're *composable* and can be queries, mutations, or subscriptions. Routers contain multiple procedures.

In this procedure, we use a Zod validator to ensure the input from the client has exactly the shape that our procedure expects. We will also return a simple text string from the query.

At the end of the file, we export the type of the router so we can use it in our frontend code in just a few moments.

ts

`   const { listen } = createHTTPServer({    router: appRouter,  });  // The API will now be listening on port 3000!  listen(3000);   `

Copy

ts

`   const { listen } = createHTTPServer({    router: appRouter,  });  // The API will now be listening on port 3000!  listen(3000);   `

Copy

2

## Create your HTTP server

Next, we create our HTTP server using our `appRouter`. We now have a tRPC server running!

tRPC has many adapters so it can meet you where you are. Next.js, Express, the Fetch API (Astro, Remix, SvelteKit, Cloudflare Workers, etc.), Fastify, AWS Lambda, or a vanilla Node HTTP server.

ts

``   const trpc = createTRPCClient<AppRouter>({    links: [      httpBatchLink({        url: 'http://localhost:3000',      }),    ],  });  const res = await trpc.greeting.query({ name: 'John' });          const res: `Hello ${string}`   ``

Copy

ts

``   const trpc = createTRPCClient<AppRouter>({    links: [      httpBatchLink({        url: 'http://localhost:3000',      }),    ],  });  const res = await trpc.greeting.query({ name: 'John' });          const res: `Hello ${string}`   ``

Copy

3

## Connect your client and start querying!

Now that we have the server running, we can create a client and start querying data.

We pass the `AppRouter` type when creating the client to give us TypeScript autocompletion and Intellisense that matches the backend API without requiring any code generation!

## Try it out for yourself!

Node.jsReactNext.js

This is a minimal Node.js application using tRPC.

Loading sandbox...

โš ๏ธ

Heads up!

WebContainers require modern Web APIs that likely aren't supported by your browser. Either open this page in a Chrome, or download this sandbox from StackBlitz and run it locally.

You can dismiss this warning to see the code, although you'll likely see unexpected errors.

Open in StackBlitzShow me the code

Loading sandbox...

โš ๏ธ

Heads up!

WebContainers require modern Web APIs that likely aren't supported by your browser. Either open this page in a Chrome, or download this sandbox from StackBlitz and run it locally.

You can dismiss this warning to see the code, although you'll likely see unexpected errors.

Open in StackBlitzShow me the code

Loading sandbox...

โš ๏ธ

Heads up!

WebContainers require modern Web APIs that likely aren't supported by your browser. Either open this page in a Chrome, or download this sandbox from StackBlitz and run it locally.

You can dismiss this warning to see the code, although you'll likely see unexpected errors.

Open in StackBlitzShow me the code

GitHubUse this template

## You may not need a traditional API

> "I built tRPC to allow people to **move faster** by removing the need of a traditional API-layer, while still having confidence that our apps won't break as we rapidly iterate."
>
> Try it out for yourself and let us know what you think!

### Alex/KATT

Creator of tRPC

## Don't take our word for it!

Many developers are loving tRPC and what it brings to them.

Theo - t3.gg

@theo

Sep 19

> The amount that tRPC has improved the quality of our code, the speed of our delivery, and the happiness of our devs is hard to comprehend. I know I shill it a lot but seriously, please try @trpcio

R. Alex Anderson ๐Ÿš€

@ralex1993

Sep 23

> ๐Ÿคฏ tRPC 10 enables VS Code's "Change All Occurrences" feature to work \_across the client/server boundary\_! In this video, I rename a procedure input using "Change All Occurrences", and that change propagates to anywhere the input is used across the entire app. ๐Ÿคฉ cc @trpcio

Kent C. Dodds ๐ŸŒŒ

@kentcdodds

Sep 20

> If I didn't already get end-to-end type safety from @remix\_run, I would 100% be investigating @trpcio very seriously. If you're not on Remix, I suggest you give it a look ๐Ÿ‘€

Sock, the dev ๐Ÿงฆ

@sockthedev

Sep 13

> If you are all in on TypeScript you MUST use tRPC for your API. No ifs, no buts. tRPC destroys the boundary between frontend and backend. You get to focus on building features for your app. Best tool for time to market hyper mode. Marry me @alexdotjs ๐Ÿ’

Lee Byron

@leeb

Dec 15

> Hearing @theo and @mxstbr #tRPC and @GraphQL and find they agree that both are awesome and thereโ€™s a time and a place for each ๐Ÿ’–

Jรถkull Solberg

@jokull

Aug 23

> tRPC is insane. Iโ€™m building a Stripe integration โ€“ I return Stripe API payloads from the server I get the response data typed for my React components without even saving the files, as if Iโ€™m using the Stripe library on the frontend not backend. /cc @alexdotjs

Christian Legge

@christian\_legge

Sep 11

> Spent all of yesterday learning and implementing @trpcio and wow, what a great investment. I can't believe how much time I spent (read: wasted) validating and parsing queries and responses!

Dominik ๐Ÿ‡บ๐Ÿ‡ฆ

@TkDodo

Sep 23

> That being said, we \_are\_ starting a production project right now, and we're using @nextjs with @trpcio . It's so good I don't even know where to start ๐Ÿ”ฅ. Probably with the e2e type-safety ๐Ÿ˜ Haven't thought about client state much but the former probably applies.

Cory House

@housecor

Sep 11

> @trpcio Love it. Simple, strong types. Feels like a more elegant choice than plain REST or GraphQL when using TS in a monorepo.

Anders Bech Mellson

@andersmellson

Sep 12

> Spent today playing with @trpcio v10 and I'm officially in love ๐Ÿ˜ ps. Don't tell my wife ๐Ÿ™Š

Mike | grabbou.eth ๐Ÿš€

@grabbou

Sep 19

> @theo @trpcio Totally. I am literally smiling every time I write a procedure, because it reminds of how hard it used to be in the past. Built-in errors, typed middleware (that can alter context), input validation. It's just massive!

Osama Qarem

@osamaqarem

Sep 10

> Iโ€™ve been playing with @trpcio and Solito together and this is without a doubt the fastest way to iterate on an api/website/mobile app there is today ๐Ÿ”ฅ

## All Sponsors

We really love all of our amazing sponsorsย who help make sure tRPC is here to stay.

Become a Sponsor!

Docs

- Docs
- Usage with Next.js
- FAQ / Troubleshooting

Community

- GitHub
- Twitter
- Discord

More

- Blog
- GitHub
- โค๏ธ Sponsor tRPC