H3 is a minimal HTTP framework from UnJS that powers Nitro and Nuxt server. It is ultrafast, works everywhere (Node, Deno, Bun, Workers), and has zero dependencies.
Basic Server
import { createApp, createRouter, defineEventHandler, readBody, getQuery } from "h3";
const app = createApp();
const router = createRouter();
router.get("/api/hello", defineEventHandler(() => ({ message: "Hello World" })));
router.get("/api/users", defineEventHandler((event) => {
const { page, limit } = getQuery(event);
return { page: Number(page) || 1, limit: Number(limit) || 10 };
}));
router.post("/api/users", defineEventHandler(async (event) => {
const body = await readBody(event);
return { created: true, user: body };
}));
app.use(router);
Middleware
import { defineEventHandler, getHeader, createError } from "h3";
app.use(defineEventHandler((event) => {
const auth = getHeader(event, "authorization");
if (event.path.startsWith("/api/admin") && !auth) {
throw createError({ statusCode: 401, message: "Unauthorized" });
}
}));
WebSocket
import { defineWebSocketHandler } from "h3";
router.get("/ws", defineWebSocketHandler({
open(peer) { console.log("Connected:", peer.id); },
message(peer, message) { peer.send(`Echo: ${message}`); },
close(peer) { console.log("Disconnected:", peer.id); }
}));
Key Features
- Zero dependencies, ultrafast
- Runs everywhere (Node, Deno, Bun, Workers)
- Powers Nitro and Nuxt
- WebSocket support
- TypeScript-first
Need to scrape or monitor web data at scale? Check out my web scraping actors on Apify or email spinov001@gmail.com for custom solutions.
Top comments (0)