Build type-safe APIs at the speed of thought
Thunder is a serverless-first, full-stack framework for Deno with file-based routing, Zod-validated schemas, a powerful hooks system, and instant CRUD - so you can focus on your product, not boilerplate.
git clone https://github.com/Huruf-Tech/thunder.git my-appcd my-app && deno task initdeno task devLess boilerplate. More shipping.
Define a validated route, generate a full CRUD API, or intercept requests with hooks - all with end-to-end type safety.
A fully validated route
import { Router } from "@/core/http/router.ts";import { bodyAsJson } from "@/core/http/utils.ts";import z from "zod";export default new Router("/api", function users(router) { router.post("/users", function createUser() { const $body = z.object({ name: z.string().min(1), email: z.string().email(), }); const $return = z.object({ id: z.string() }); return { shape: () => ({ body: $body, return: $return }), handler: async (req) => { const body = $body.parse(await bodyAsJson(req)); return Response.created({ id: "123" }); }, }; });}).group("Users");A complete CRUD API in one call
import { Router } from "@/core/http/router.ts";import { createCRUD } from "@/core/utils/createCRUD.ts";import { todoModel, $todo, $todoInput } from "@/schemas/todo.ts";export default new Router("/", function todos(router) { createCRUD({ router, schema: $todo, model: todoModel, insertSchema: $todoInput, });}).group("Todos");Intercept requests with hooks
import type { THook } from "@/core/http/hooks.ts";import { Response } from "@/core/http/response.ts";export default { priority: 100, // higher runs first pre: async ({ req }) => { const token = req.headers.get("Authorization"); if (!token) return Response.unauthorized(); },} satisfies THook;Everything you need, nothing you don't
File-based Routing
Drop a file in routes/ and it becomes an endpoint. Convention over configuration, with zero wiring.
End-to-end Type Safety
Zod validates params, query, body, and response - and TypeScript enforces your return shape at compile time.
Serverless-first
Stateless requests, fast cold starts, and predictable performance designed for serverless from day one.
Powerful Hooks
Pre and post interceptors with priorities for auth, logging, and rate limiting - no tangled middleware.
Instant CRUD
Generate create, read, update, delete, and count endpoints for any model with a single createCRUD call.
Plugin Ecosystem
Any Thunder project is a plugin. Install thunder-core for auth, RBAC, and security in one command.