mrkeyoor.com_
Tue 08 Sept 06:43 UTC
Dev Toolsevaluationupdated 08 Sept 2026

trpc review

tRPC lets a TypeScript client call a TypeScript server with matching input, output, and error types, without maintaining a separate API schema or generated client. It is meant to catch broken API calls in the editor and at compile time while keeping the programming model close to ordinary functions.

trackingstars / 7d
Verdict

Our build finished in 31 seconds, and all 1,131 tests passed. Use tRPC when one TypeScript team controls both ends of an application and values fast feedback over a language-neutral contract. The trade is architectural coupling: if outside consumers or OpenAPI are core requirements, choose a contract-first REST or GraphQL option instead.

We ran it

Install✓ · 242s3578 packages · 2429 MB
Build✓ · 31s
Tests✓ · 146s1131 passed · 0 failed of 1131 (vitest)
Repo1568 files~119,556 lines of source · 7 MB · 12 CI workflows

Answers from our run

Does trpc build from source?

Dependencies installed in 242 seconds (3578 packages), and the build succeeded in 31 seconds. We cloned commit 66d0544 into a clean Debian container with 3 CPUs and no project-specific setup.

Do trpc's tests pass?

Yes: 1131 of 1131 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use trpc?

Public APIs serving many languages, because tRPC's strongest benefits depend on shared TypeScript types

What are the alternatives to trpc?

ts-rest, oRPC, GraphQL.js. Our build finished in 31 seconds, and all 1,131 tests passed.

Setup4/5Starter is easy; repo install took 242s and 2,429 MB
Docs4/5Clear quickstart, linked docs, examples, and adapter coverage
Community5/540,588 stars and a push five days before review
Maturity5/5v11.18.0 and all 1,131 measured tests passed

Who it’s for

TypeScript teams that own both the client and server
Next.js or React teams that want typed API calls and autocomplete
Existing Express or Fastify projects that need an incremental typed layer
Applications that benefit from batching or subscriptions without a separate schema workflow

Who it’s NOT for

Public APIs serving many languages, because tRPC's strongest benefits depend on shared TypeScript types
Teams that require an OpenAPI contract as the primary source of truth
Small projects unwilling to carry a large contributor toolchain
Organizations that need a protocol independent of one application codebase

Setup reality

In our sandbox run, pnpm installation succeeded in 242 seconds, adding 3,578 packages and consuming 2,429 MB; the build then succeeded in 31 seconds, and Vitest passed all 1,131 tests in 146 seconds. That is a clean result, but it describes the full contributor monorepo, not the lightweight experience of adding the library to an app. The README's starter command is credible for trying tRPC, while working on the repository itself is a much heavier download and install than the short quickstart suggests.

tRPC turns one TypeScript codebase into the API contract

tRPC addresses a familiar full-stack problem: the server changes an input or response, but the client still compiles against an outdated assumption. Its answer is to let the client import type declarations from the server and infer inputs, outputs, and errors. The README explicitly says the client does not import server code, only those declarations. That distinction matters. You get editor autocomplete and static checking without shipping server implementation into the browser, maintaining a second schema, or waiting for a generated client. At 40,588 GitHub stars, this is an established approach rather than a niche experiment.

The fit is deliberately narrower than a universal API standard. tRPC is most persuasive when the same team owns a TypeScript frontend and backend, deploys them in coordination, and wants application work to feel like calling typed procedures. The README names React, Next.js, Express, and Fastify adapters, while also saying the core is not tied to React. Brownfield adoption is a stated goal, so an existing service can add routers gradually instead of accepting a full rewrite. Version v11.18.0 is the latest release in the supplied data.

What happened when we ran it

We cloned commit 66d0544 into an unprivileged Debian container with 3 CPUs and 8 GB of RAM. The pnpm install succeeded in 242 seconds and brought in 3,578 packages, occupying 2,429 MB on disk. The build succeeded in another 31 seconds. Vitest then completed in 146 seconds with 1,131 passing tests and 0 failures. Those are strong reproducibility results: there was no hidden credential requirement, no unexplained native-package failure, and no test breakage on the measured Node 22 image.

The successful run also exposes a difference between consuming tRPC and contributing to it. The checked-out repository was only 7 MB, with 1,568 files and roughly 119,556 lines of source, but its installed dependency tree grew beyond 2.4 GB. It is a workspace monorepo with 12 CI workflow files, and our scanner found no Dockerfile or conventional tests directory. That last detail is organizational, not evidence that tests are absent, because Vitest found and passed 1,131 of them. The repository setup is dependable, but it is not tiny.

The strongest feature is removing synchronization work

The practical win is not merely autocomplete. With no schema-generation stage, there is one fewer artifact that can go stale between server and client. The README promises static types for inputs, outputs, and errors, which covers the boundaries where frontend assumptions usually drift. Request batching can combine calls made at the same time, subscriptions are supported, and official adapters cover several common TypeScript server shapes. The core also claims zero dependencies and a small client footprint, although our measurements did not independently benchmark the installed package or browser bundle.

The onboarding path is unusually concrete. The README provides create-next-app commands for yarn, npm, pnpm, Bun, and Deno, all pointing to a full-stack Next.js and Prisma starter. It links full documentation, community adapters, and a directory of examples instead of pretending one snippet covers production architecture. For maintainers, it names project leads, an active contributor, contributing guidelines, Discord, code coverage, and 12 automated workflows. That combination gives a new adopter several routes for learning and a clear sign that changes are reviewed in a structured project.

The convenience comes with real boundaries

The main weakness is coupling. tRPC works best when clients can consume the server's TypeScript declarations, so it is less natural for mobile teams in other languages, public partner APIs, or independently versioned consumers. A procedure router is also not the same thing as an OpenAPI document that an external organization can inspect and implement against. You can solve some of that around tRPC, but the README evidence here does not establish a first-party, contract-first OpenAPI workflow. If language neutrality is a requirement on day 1, this is the wrong default.

The contributor footprint is another rough edge. Installing 3,578 packages to work on a 7 MB checkout is substantial, even though the process passed. The README's quickstart focuses on creating an example application, not on explaining that full repository development consumed 2,429 MB in our clean container. The project also has 277 open issues. That number is not automatically alarming for software with 40,588 stars, but adopters should search the queue for their framework, runtime, and version before committing to a migration.

Recent activity matters more than the release date alone

The latest supplied release, v11.18.0, was published on June 18, 2026, while the repository was pushed on September 3, just 5 days before this review. We cannot calculate a true release cadence from one tag, but the fresh push makes it unreasonable to call the project abandoned merely because the release is older. The 277 open issues show meaningful support load, while the passing build and 1,131-test run provide current evidence that the checked commit is internally coherent. Health looks good, with the normal caution that a large community produces a large queue.

It belongs inside a TypeScript application boundary

In a real stack, tRPC should sit between a TypeScript user interface and the application server that owns its business rules. Authentication, authorization, database access, queues, and observability still remain separate responsibilities. Batching and subscriptions help with transport behavior, but they do not replace a gateway or define a public integration strategy. At v11.18.0, choose tRPC for a coordinated web product where compile-time feedback saves daily friction. Choose ts-rest when REST and OpenAPI are the contract, oRPC when its contract and validator options fit better, or GraphQL.js when clients need a language-neutral schema.

Alternatives

ProjectWhat it isPick it when
ts-restA contract-first TypeScript approach that keeps ordinary REST semantics and can produce OpenAPI.pick this instead when REST routes and an explicit shared contract matter more than tRPC's procedure model.
oRPCA type-safe API toolkit with contract-first options, multiple validators, and OpenAPI support.pick this instead when you want tRPC-like calls but need first-class OpenAPI compatibility or validator choice.
GraphQL.jsThe JavaScript reference implementation of GraphQL's explicit, language-neutral API schema.pick this instead when multiple client languages, schema tooling, or independently developed consumers are central requirements.

What people are saying

  1. [velocity-scout] trpc/trpc

Sources

  1. tRPC GitHub repository
  2. tRPC documentation and homepage

More dev tools reviews

awesome-react · hetty · vtracer · How-To-Secure-A-Linux-Server · gpuix · openscreen · the whole board →