<< All versions
Skill v1.0.1
currentAutomated scan100/100secondsky/claude-skills/bun-http-server
1 files
──Details
PublishedMay 24, 2026 at 03:31 PM
Content Hashsha256:de8cf1c892df8ed8...
Git SHA5e92b7170451
Bump Typepatch
──Files
Files (1 file, 5.7 KB)
SKILL.md5.7 KBactive
SKILL.md · 290 lines · 5.7 KB
version: "1.0.1" name: bun-http-server description: Use when building HTTP servers with Bun.serve, handling requests/responses, implementing routing, creating REST APIs, or configuring fetch handlers. metadata: version: "1.0.0" license: MIT
Bun HTTP Server
Bun has a built-in high-performance HTTP server via Bun.serve().
Quick Start
typescript
const server = Bun.serve({port: 3000,fetch(req) {return new Response("Hello World!");},});console.log(`Server running at http://localhost:${server.port}`);
Request Handling
typescript
Bun.serve({fetch(req) {const url = new URL(req.url);// Methodconsole.log(req.method); // GET, POST, etc.// Pathconsole.log(url.pathname); // /api/users// Query paramsconsole.log(url.searchParams.get("id")); // ?id=123// Headersconsole.log(req.headers.get("Content-Type"));return new Response("OK");},});
Body Parsing
typescript
Bun.serve({async fetch(req) {// JSONconst json = await req.json();// Form dataconst form = await req.formData();// Textconst text = await req.text();// ArrayBufferconst buffer = await req.arrayBuffer();// Blobconst blob = await req.blob();return new Response("Received");},});
Response Types
typescript
Bun.serve({fetch(req) {const url = new URL(req.url);switch (url.pathname) {case "/json":return Response.json({ message: "Hello" });case "/html":return new Response("<h1>Hello</h1>", {headers: { "Content-Type": "text/html" },});case "/redirect":return Response.redirect("/new-location", 302);case "/file":return new Response(Bun.file("./image.png"));case "/stream":return new Response(new ReadableStream({start(controller) {controller.enqueue("chunk1");controller.enqueue("chunk2");controller.close();},}));default:return new Response("Not Found", { status: 404 });}},});
Simple Routing
typescript
Bun.serve({fetch(req) {const url = new URL(req.url);const path = url.pathname;const method = req.method;// Static routesif (method === "GET" && path === "/") {return new Response("Home");}if (method === "GET" && path === "/api/users") {return Response.json([{ id: 1, name: "Alice" }]);}// Dynamic routesconst userMatch = path.match(/^\/api\/users\/(\d+)$/);if (method === "GET" && userMatch) {const userId = userMatch[1];return Response.json({ id: userId });}// 404return new Response("Not Found", { status: 404 });},});
Error Handling
typescript
Bun.serve({fetch(req) {try {// Handle requestthrow new Error("Something went wrong");} catch (error) {return new Response(JSON.stringify({ error: error.message }),{status: 500,headers: { "Content-Type": "application/json" }});}},error(error) {// Global error handlerreturn new Response(`Error: ${error.message}`, { status: 500 });},});
Server Options
typescript
const server = Bun.serve({port: 3000, // Default: 3000hostname: "0.0.0.0", // Default: "0.0.0.0"development: true, // Pretty errors in browser// TLS/HTTPStls: {key: Bun.file("./key.pem"),cert: Bun.file("./cert.pem"),},// Unix socketunix: "/tmp/my-socket.sock",// Max request body size (default 128MB)maxRequestBodySize: 1024 * 1024 * 10, // 10MBfetch(req) {return new Response("OK");},});
Server Methods
typescript
const server = Bun.serve({ ... });// Server infoconsole.log(server.port); // 3000console.log(server.hostname); // "0.0.0.0"console.log(server.url); // URL object// Stop serverserver.stop();// Reload with new configserver.reload({fetch(req) {return new Response("Updated!");},});// Pending requests countconsole.log(server.pendingRequests);
Static Files
typescript
Bun.serve({fetch(req) {const url = new URL(req.url);// Serve static files from public/if (url.pathname.startsWith("/static/")) {const filePath = `./public${url.pathname.replace("/static", "")}`;const file = Bun.file(filePath);if (await file.exists()) {return new Response(file);}return new Response("Not Found", { status: 404 });}return new Response("API");},});
CORS
typescript
function corsHeaders() {return {"Access-Control-Allow-Origin": "*","Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers": "Content-Type, Authorization",};}Bun.serve({fetch(req) {// Handle preflightif (req.method === "OPTIONS") {return new Response(null, { headers: corsHeaders() });}// Add CORS headers to responsereturn new Response("OK", { headers: corsHeaders() });},});
Common Errors
| Error | Cause | Fix | |
|---|---|---|---|
EADDRINUSE | Port in use | Use different port or kill process | |
Cannot read body | Body already consumed | Read body once only | |
CORS error | Missing headers | Add CORS headers | |
413 Payload Too Large | Body exceeds limit | Increase maxRequestBodySize |
When to Load References
Load references/tls-config.md when:
- HTTPS/TLS setup
- Certificate configuration
- mTLS authentication
Load references/streaming.md when:
- Server-sent events
- Streaming responses
- Chunked transfer encoding