Made for Humans
A small, fully typed API keeps routes, plugins, schemas, and handlers predictable across a growing service.
Teakit
Build TypeScript services with route handlers that return plain values, schemas that infer contracts, and plugins that compose without surprise.
import { Application, t } from "@teakit/core"; const app = new Application() .get("/", () => "Hello World") .post("/profile", ({ body }) => body, { body: t.Object({ username: t.String(), }), }) .listen(3000); Teakit keeps the API compact while still covering schemas, lifecycle hooks, plugins, OpenAPI docs, WebSockets, tests, and custom parsers.
A small, fully typed API keeps routes, plugins, schemas, and handlers predictable across a growing service.
Return a string, object, file, redirect, or error from the handler and let the framework shape the response.
Infer server contracts into clients so TypeScript catches mismatches before the request is sent.
Contract
Use route schemas on the server, export the application type, and let client calls stay aligned with the same contract.
Read kernels docsclient.ts
import { edenTreaty } from "@teakit/eden";import type { App } from "./server"; const eden = edenTreaty<App>("http://localhost");await eden.user.age.patch({ name: "saltyaom", age: 21,}); Plugins
Use Application to define HTTP methods, path parameters, groups, guards, schemas, and lifecycle hooks.
Compose plugins for docs, cookies, CORS, logging, auth, GraphQL, static files, sessions, and more.
Generate OpenAPI specs or share the application type with Eden clients for one connected type system.
Teakit keeps the first handler tiny and the later service understandable, with typed contracts and plugin boundaries carrying the weight.