Green Tea
beta · actively developedA zen, opinionated, type-safe framework — your API is a graph, not a middleware chain.
You declare what each step needs and provides; the framework computes the order, type-checks the wiring, and can print the whole request before it runs. A handler that reads ctx.user will not compile if no step produces user — so "it was undefined in prod" disappears at compile time.
- The pipeline is a graph, not a chain — no positional ordering, each route runs only its slice.
- You can see the request — app.explain(), a live /__graph__ diagram, and an OpenAPI 3.1 projection from the same metadata.
- Real-time as a primitive — SSE, ndjson, or WebSocket duplex; return an AsyncIterable and backpressure is handled.
- Runs everywhere — the same app on Node, Deno, Bun and the edge; swap the entry point, nothing else.