or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

app-router.mdcache-links.mdindex.mdpages-router.mdserver-actions.mdssr.md
tile.json

tessl/npm-trpc--next

Next.js integration for tRPC that enables end-to-end type-safe APIs with enhanced server-side rendering and static site generation capabilities.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@trpc/next@11.5.x

To install, run

npx @tessl/cli install tessl/npm-trpc--next@11.5.0

index.mddocs/

@trpc/next

@trpc/next is the Next.js integration library for tRPC that enables end-to-end type-safe APIs with enhanced server-side rendering and static site generation capabilities. It provides seamless client-server communication through React Query integration, automatic provider configuration, and comprehensive support for Next.js features including SSR, SSG, and client-side hydration.

Package Information

  • Package Name: @trpc/next
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @trpc/next @trpc/react-query @tanstack/react-query

Core Imports

import { createTRPCNext, withTRPC } from "@trpc/next";
import { ssrPrepass } from "@trpc/next/ssrPrepass";

For specific App Router features:

import { experimental_createTRPCNextAppDirClient } from "@trpc/next/app-dir/client";
import { experimental_createTRPCNextAppDirServer } from "@trpc/next/app-dir/server";
import { experimental_nextCacheLink } from "@trpc/next/app-dir/links/nextCache";
import { experimental_nextHttpLink } from "@trpc/next/app-dir/links/nextHttp";

Basic Usage

Pages Router Setup

import { createTRPCNext } from "@trpc/next";
import { httpBatchLink } from "@trpc/client";
import type { AppRouter } from "../pages/api/[trpc]";

export const trpc = createTRPCNext<AppRouter>({
  config() {
    return {
      links: [
        httpBatchLink({
          url: "http://localhost:3000/api/trpc",
        }),
      ],
    };
  },
  ssr: false,
});

// In _app.tsx
const App = ({ Component, pageProps }) => {
  return <Component {...pageProps} />;
};

export default trpc.withTRPC(App);

Using tRPC in Components

import { trpc } from "~/utils/trpc";

export function UserProfile() {
  const { data, error, status } = trpc.user.getProfile.useQuery({
    userId: "123",
  });

  if (error) return <p>Error: {error.message}</p>;
  if (status !== "success") return <p>Loading...</p>;

  return <div>Welcome, {data.name}!</div>;
}

Architecture

@trpc/next is built around several key architectural components:

  • Pages Router Integration: Traditional Next.js pages with withTRPC HOC and createTRPCNext factory
  • App Router Support: Experimental features for Next.js App Router with server components and server actions
  • SSR Engine: Server-side rendering support with automatic query prefetching and hydration
  • Cache Management: Integration with Next.js caching strategies and revalidation
  • Type Safety: End-to-end TypeScript integration preserving types from server to client
  • React Query Integration: Built on @tanstack/react-query for caching and synchronization

Capabilities

Pages Router Integration

Core integration for Next.js Pages Router providing HOC wrapping and tRPC hook creation. Essential for traditional Next.js applications.

function createTRPCNext<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext>(
  opts: WithTRPCNoSSROptions<TRouter> | WithTRPCSSROptions<TRouter>
): CreateTRPCNext<TRouter, TSSRContext>;

function withTRPC<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext>(
  opts: WithTRPCNoSSROptions<TRouter> | WithTRPCSSROptions<TRouter>
): (AppOrPage: NextComponentType<any, any, any>) => NextComponentType;

Pages Router Integration

Server-Side Rendering (SSR)

Advanced SSR capabilities with automatic query prefetching, cache dehydration/hydration, and response meta handling.

export const ssrPrepass: TRPCPrepassHelper;

interface WithTRPCSSROptions<TRouter extends AnyRouter> extends WithTRPCOptions<TRouter> {
  ssr: true | ((opts: { ctx: NextPageContext }) => boolean | Promise<boolean>);
  responseMeta?: (opts: {
    ctx: NextPageContext;
    clientErrors: TRPCClientError<TRouter>[];
  }) => ResponseMeta;
  ssrPrepass: TRPCPrepassHelper;
}

Server-Side Rendering

App Router Support

Experimental features for Next.js App Router including server components, server actions, and advanced caching.

function experimental_createTRPCNextAppDirClient<TRouter extends AnyRouter>(
  opts: CreateTRPCNextAppRouterOptions<TRouter>
): TRPCClient<TRouter>;

function experimental_createTRPCNextAppDirServer<TRouter extends AnyRouter>(
  opts: CreateTRPCNextAppRouterOptions<TRouter>
): NextAppDirDecorateRouterRecord<TRouter['_def']['_config']['$types'], TRouter['_def']['record']>;

App Router Support

Server Actions

Experimental server actions integration for form handling and mutations in App Router.

function experimental_createActionHook<TInferrable extends InferrableClientTypes>(
  opts: CreateTRPCClientOptions<TInferrable>
): <TDef extends ActionHandlerDef>(
  handler: TRPCActionHandler<TDef>,
  useActionOpts?: UseTRPCActionOptions<TDef>
) => UseTRPCActionResult<TDef>;

function experimental_createServerActionHandler<TInstance extends { _config: RootConfig<AnyRootTypes> }>(
  t: TInstance,
  opts: CreateContextCallback & ServerActionHandlerOptions
): <TProc extends AnyProcedure>(proc: TProc) => TRPCActionHandler<inferActionDef<TInstance, TProc>>;

Server Actions

Cache Links

Specialized tRPC links for Next.js caching integration with cache tags and revalidation.

function experimental_nextCacheLink<TRouter extends AnyRouter>(
  opts: NextCacheLinkOptions<TRouter>
): TRPCLink<TRouter>;

function experimental_nextHttpLink<TRouter extends AnyRouter>(
  opts: NextLinkSingleOptions<TRouter['_def']['_config']['$types']> | NextLinkBatchOptions<TRouter['_def']['_config']['$types']>
): TRPCLink<TRouter>;

Cache Links

Core Types

// Base router type from tRPC
interface AnyRouter {
  _def: {
    _config: {
      $types: any;
    };
    record: any;
  };
}

// Next.js page context type
interface NextPageContext {
  req?: IncomingMessage;
  res?: ServerResponse;
  pathname: string;
  query: ParsedUrlQuery;
  asPath?: string;
}

// Configuration options for withTRPC HOC
interface WithTRPCConfig<TRouter extends AnyRouter> extends CreateTRPCClientOptions<TRouter>, CreateTRPCReactQueryClientConfig {
  abortOnUnmount?: boolean;
}

// Return type from createTRPCNext with decorated router and utilities
interface CreateTRPCNext<TRouter extends AnyRouter, TSSRContext extends NextPageContext> {
  useContext(): CreateReactUtils<TRouter, TSSRContext>;
  useUtils(): CreateReactUtils<TRouter, TSSRContext>;
  withTRPC: ReturnType<typeof withTRPC<TRouter, TSSRContext>>;
  useQueries: TRPCUseQueries<TRouter>;
  useSuspenseQueries: TRPCUseSuspenseQueries<TRouter>;
}

// Props passed during SSR prepass phase
interface TRPCPrepassProps<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext> {
  config: WithTRPCConfig<TRouter>;
  queryClient: QueryClient;
  trpcClient: TRPCUntypedClient<TRouter> | TRPCClient<TRouter>;
  ssrState: 'prepass';
  ssrContext: TSSRContext;
}

// Function signature for SSR prepass helpers
type TRPCPrepassHelper = (opts: {
  parent: WithTRPCSSROptions<AnyRouter>;
  WithTRPC: NextComponentType<any, any, any>;
  AppOrPage: NextComponentType<any, any, any>;
}) => void;

// App Router configuration options
interface CreateTRPCNextAppRouterOptions<TRouter extends AnyRouter> {
  config: () => CreateTRPCClientOptions<TRouter>;
}