Set up with Next.js
Recommended file structure
We recommend a file structure like this one, although it is not enforced by tRPC. This is what you'll see in our examples. The rest of this page will take you through the process of adding tRPC in to this structure.
graphql
graphql
Add tRPC to existing Next.js project
1. Install deps
- npm
- yarn
- pnpm
- bun
sh
sh
sh
sh
sh
sh
sh
sh
The Next.js integration is actually a combination of our React Query Integration and some Next.js specific integrations.
2. Enable strict mode
If you want to use Zod for input validation, make sure you have enabled strict mode in your tsconfig.json:
tsconfig.jsondiff
tsconfig.jsondiff
If strict mode is too harsh, you'll at least want to enable strictNullChecks:
tsconfig.jsondiff
tsconfig.jsondiff
3. Create a tRPC router
Initialize your tRPC backend in src/server/trpc.ts using the initTRPC function, and create your first router. We're going to make a simple "hello world" router and procedure here - but for deeper information on creating your tRPC API you should refer to:
- the Quickstart guide and Backend usage docs for tRPC information
- the Next.js Adapter docs for mounting tRPC within your Next.js server.
View sample backend
server/trpc.tsts
server/trpc.tsts
server/routers/_app.tsts
server/routers/_app.tsts
pages/api/trpc/[trpc].tsts
pages/api/trpc/[trpc].tsts
The backend above is using the recommended file structure, but you can keep it simple and put everything in an API handler directly if you prefer.
4. Create tRPC hooks
use the createTRPCNext function to create a set of strongly-typed hooks from your API's type signature.
utils/trpc.tstsx
utils/trpc.tstsx
createTRPCNext does not work with the tRPC-v9 interop mode. If you are migrating from v9 using interop, you should continue using the old way of initializing tRPC.
5. Configure _app.tsx
Wrap your root app page in the trpc.withTRPC HOC, similar to this:
pages/_app.tsxtsx
pages/_app.tsxtsx
6. Make an API request
You're all set!
You can now use the React hooks you have just created to invoke your API. For more detail see the React Query Integration
pages/index.tsxtsx
pages/index.tsxtsx
createTRPCNext() options
config-callback
The config-argument is a function that returns an object that configures the tRPC and React Query clients. This function has a ctx input that gives you access to the Next.js req object, among other things. The returned value can contain the following properties:
- Required:
- linksto customize the flow of data between tRPC Client and the tRPC Server. Read more.
- Optional:
- queryClientConfig: a configuration object for the React Query- QueryClientused internally by the tRPC React hooks: QueryClient docs
- queryClient: a React Query QueryClient instance- Note: You can only provide either a queryClientor aqueryClientConfig.
 
- Note: You can only provide either a 
- transformer: a transformer applied to outgoing payloads. Read more about Data Transformers
- abortOnUnmount: determines if in-flight requests will be cancelled on component unmount. This defaults to- false.
overrides: (default: undefined)
Configure overrides for React Query's hooks.
ssr-boolean (default: false)
Whether tRPC should await queries when server-side rendering a page. Defaults to false.
responseMeta-callback
Ability to set request headers and HTTP status when server-side rendering.
Example
utils/trpc.tstsx
utils/trpc.tstsx
Next steps
Browse the rest of the docs to learn more about things like authorization, middlewares, and error handling.
You can also find information about queries and mutations now that you're using @trpc/react-query.