Skip to content

tRPC v12 isn’t on npm yet. The @trpc12/* packages on this site can’t be installed until it’s released. Use v11 today

tRPC

API changes

Each v11 API next to its v12 form: init, errors, transformers, handlers, adapters, clients, links, callers and subscriptions.

What each v11 API is in v12. The codemod rewrites the ones with one v12 form and lists the rest.

v11v12
@trpc/server, @trpc/client@trpc12/trpc/server, @trpc12/trpc/client
initTRPC.context<Ctx>().meta<Meta>().create()initTrpc<{ ctx: Ctx; meta: Meta }>()
t.router({ … }), t.mergeRouters(a, b)a plain object, { ...a, ...b } (router() and mergeRouters() still exist)
throw new TRPCError({ code })return error({ code }), or throw new TrpcError({ code })
create({ errorFormatter })declared errors (.errors(), TrpcError.Tagged) with typed data
create({ transformer: superjson }) and each link's transformerserializer on the handler and every link; plain JSON by default, danSON with createSerializer() (Dates, Maps, BigInts, files)
fetchRequestHandler({ endpoint, req, router, createContext })createFetchHandler({ endpoint, router, createContext }).fetch(req)
createContext({ req, resHeaders })createContext({ request, info }); headers go on the procedure's response handle
adapters (standalone, express, next, aws-lambda, ws)one handler: see Adapters
createTRPCClient<AppRouter>({ links })createTrpcClient({ router: routerType<AppRouter>(), links })
httpBatchLink, httpBatchStreamLink, httpSubscriptionLinkhttpLink({ url, batch: true }) streams and subscribes too
createWSClient + wsLink({ client })wsLink({ url })
TRPCClientErrorTrpcError; safe() for [data, error]
t.createCallerFactory(router)(ctx)createRouterClient(router, { ctx })
subscriptions returning observable()an async generator or an Effect Stream
input.lastEventId in a subscriptionthe resolver's lastEventId option
.subscribe(input, { onData, onError })for await (const event of client.x.subscribe(input))
@trpc/react-query, @trpc/tanstack-react-query@trpc12/tanstack-react-query
abortOnUnmount: truealways on: queries pass TanStack's signal, so one nothing observes is cancelled