// the find
ts-rest/ts-rest
RPC-like client, contract, and server implementation for a pure REST API
ts-rest lets you define an API contract once in TypeScript, then use it to type-check both the server implementation and the client calls — no code generation, no separate schema language. It's tRPC's closest relative for teams that need to stay on standard REST HTTP rather than a custom protocol. Aimed at TypeScript shops building full-stack apps with Next.js, NestJS, or Fastify.
Contract-first without code generation is the real win — the same Zod schema validates at runtime and drives compile-time types, so you get both safety and correctness without a build step. React Query integration is first-class: the client wraps fetch and maps directly to useQuery/useMutation, which removes a lot of repetitive glue code. Framework coverage is genuine: Express, Fastify, NestJS, Next.js App Router, Azure Functions, and Cloudflare Workers all have working examples with tests, not just stub files. OpenAPI output is built in, so you can generate docs or hand the spec to a non-TypeScript consumer without a second tool.
Activity has stalled — last push was February 2026 and the .changeset directory is full of unreleased changesets, suggesting PRs that merged but never shipped a version. At 3300 stars it has real users but the maintainer bus factor looks thin from the contributor table. Error handling across the boundary is underspecified: when your server returns a 400 with a body that doesn't match the contract's response schema, the client silently widens to unknown rather than surfacing a validation error, which defeats half the point. Binary uploads and multipart forms are awkward — the contract model assumes JSON bodies, so file upload endpoints end up as workarounds rather than first-class citizens.