pkgdocs/compare/immer vs @trpc/server

Comparing

npm

immer

Create your next immutable state by mutating the current one

41.7M/ wk
v11.1.4
vs
npm

@trpc/server

End-to-end type-safe APIs — share TypeScript types between server and client without code generation.

1.2M/ wk
v11.0.0
Metricimmer@trpc/server
Ecosystemnpmnpm
DifficultyBeginner ✓Advanced
Weekly downloads41.7M↑1.2M
Latest versionv11.1.4v11.0.0
Recipes12↑

Tags

immer only

immutablestatereduxreactmutationsmutablecopy-on-writeimmutablesreducer

Shared

typescript

@trpc/server only

apirpcfullstacknextjs

When to use each

immer

Use Immer whenever you have deeply nested state updates that are painful to write immutably: Redux reducers, Zustand's set function, or React useState with complex objects. It's built into Redux Toolkit's createSlice, so you're probably already using it.

@trpc/server

Full-stack TypeScript monorepos, Next.js apps where frontend and backend share a codebase, projects where you want type safety without REST/GraphQL ceremony.

When to skip each

immer

For flat, simple state (a counter, a boolean toggle), immer's overhead isn't worth it — just spread the object. Immer also has edge cases with classes, Maps, and Sets that require using enableMapSet() and enableAllPlugins().

@trpc/server

Public APIs consumed by third parties (use REST or GraphQL). Polyglot teams where some consumers aren't TypeScript. Microservices with many separate repos.

Sample recipes

immer

  • Install immer

@trpc/server

  • Define a tRPC router with queries
  • Call procedures from a client