When you define an API route with typed parameters, payloads, and responses, KosmoJS derives a corresponding fetch client - automatically, as part of the same build step.
The result is a fully-typed client that mirrors your route definition exactly. Parameters, payload shape, response type - all derived from the same source. Change your API, and the client updates with it. No manual sync required.
The client is derived into lib/<folder>/fetch/ and reached as _/fetch. You import it; you never edit it - lib/ is regenerated on every change.
What Gets Derived
Each route's client module exports:
🔹 HTTP method functions - GET, POST, PUT, etc., accepting parameters and payloads typed to match your route definition and returning typed response promises. Details ›
🔹 path and href utilities - construct relative or absolute URLs with proper parameter substitution and optional query string support. Details ›
🔹 validationSchemas - the same schemas used for server-side validation, exposed for client-side form validation with check, errors, errorMessage, errorSummary, and validate methods. Details ›
Using the Client
Import the fetch map and pick the client for your route by path:
import fetchClients from "_/fetch";
const response = await fetchClients["users/[id]"].GET([123]);Clients land in the lib directory alongside other derived artifacts (validation routines, OpenAPI spec). Everything is updated automatically in the background as you modify routes during development.
Isomorphic Clients
The same client works in both CSR and SSR - identical code, no server functions or RPC layer to define. In the browser it issues a normal same-origin request; during SSR it dispatches to the matched API route in-process, with no network layer and no round-trip latency.