Blog Logo
TAGS

ts-rest - RPC-like client and server helpers for a magical end to end typed experience

# ts-rest Incrementally adoptable RPC-like client and server helpers for a magical end to end typed experience 🪄 Join us on Discord for help, feedback, and discussions! ## Introduction ts-rest offers a simple way to define a contract for your API, which can be both consumed and implemented by your application, giving you end to end type safety without the hassle or code generation. ### Features - End-to-end type safety 🛟 - RPC-like client side API ⚡️ - Small Bundle Size 📉 - No Code Generation 🏃‍♀️ - Zod support for runtime validation 🔒 - Full optional OpenAPI integration 📝 👉 Start reading the official Quickstart Guide 👈 ### Super Simple Example Easily define your API contract somewhere shared ```typescript const contract = c.router({ getPosts: { method: GET, path: /posts, query: z.object({ skip: z.number(), take: z.number(), }), // <-- Zod schema responses: { 200: c.type(), // <-- OR normal TS types }, headers: z.object({ x-pagination-page: z.coerce.number().optional(), }), }, }); ``` Fulfill the contract on your server, with a type-safe router: ```typescript const router = s.router(contract, { getPosts: async ({ params: { id } }) => { return { status: 200, body: prisma.post.findUnique({ where: { id } }), }; }, }); ``` Consume the api on the client with a RPC-like interface: ```typescript const result = await client.getPosts({ headers: { x-pagination-page: 1 }, query: { skip: 0, take: 10 }, // ^-- Fully typed! }); ``` ## Quickstart Create a contract, implement it on your server then consume it in your client. Incrementally adopt, trial it with your team, then get shipping faster. 👉 Start reading the official Quickstart Guide 👈 ## Contributors ✨ MASSIVE Thanks to all of these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)), who have helped make ts-rest possible: Youssef Gaber💻 🤔 ⚠️ Per Hermansson📖 💻 Grégory Houllier📖 Michael Angelo 📖 Pieter Venter📖 Rifaldhi AW📖 Jonathan White 💻 📖 Max Brosnahan💻 🤔 Oliver Butler💻 🤔 📖 🚇 🚧 Adrian Barylski💻 📖 ⚠️ Neil A. Dobson💻 Eric Do📖 Ben💻 📖 ⚠️ LW💻 🐛 Andrew Vance📖 ## Star History Since our first commit in 2022 weve been growing steadily. Were proud of our progress and were excited about the future. Join us on Discord for help, feedback, and discussions!