bklar (pronounced buh-klar) is a minimalist, high-performance web framework built specifically for Bun.
Designed for production excellence, it combines the raw speed of Bun with a robust ecosystem, first-class TypeScript support, and a developer experience inspired by the best modern frameworks.
- 🚀 Native Speed: Built directly on
Bun.serveandBun.file. No Node.js compatibility overhead. - 🛡️ Type-Safe Validation: Integrated Zod support. Inputs and outputs are validated and strongly typed automatically.
- 🔌 Native WebSockets: Real-time support integrated directly into the core router.
- 🔋 Batteries Included: A complete ecosystem of official packages for Security, Performance, and Utilities.
- 📝 Auto-Documentation: Generate OpenAPI 3.1 specs and Swagger UI automatically from your code.
- 🎨 Minimalist API: A clear, expressive syntax that stays out of your way.
The best way to start is using the official CLI. It provides interactive templates for different use cases.
bun create bklar my-appNavigate to your new project and start the server:
cd my-app
bun install
bun run devHere is a complete API endpoint with validation, parameters, and JSON response.
import { Bklar } from "bklar";
import { z } from "zod";
const app = Bklar();
// GET /users/123
app.get(
"/users/:id",
(ctx) => {
// ctx.params.id is strictly typed as a number here!
return ctx.json({
id: ctx.params.id,
name: "Bun User"
});
},
{
schemas: {
// Automatic validation and coercion
params: z.object({ id: z.coerce.number() })
}
}
);
app.listen(3000);Bklar v2 supports WebSockets natively. No external plugins required.
app.ws("/chat", {
open(ws) {
console.log("Client connected");
ws.subscribe("global-chat");
},
message(ws, msg) {
// Native Pub/Sub support
ws.publish("global-chat", `New message: ${msg}`);
}
});Bklar v2 comes with a suite of official, high-performance packages designed to work perfectly together.
- @bklarjs/helmet: Secure your app with essential HTTP headers (CSP, HSTS, XSS).
- @bklarjs/cors: Cross-Origin Resource Sharing middleware.
- @bklarjs/jwt: JSON Web Token authentication.
- @bklarjs/rate-limit: Protection against brute-force and DDoS attacks.
- @bklarjs/cache: Server-side caching with ETag support and pluggable stores (Redis/Memory).
- @bklarjs/compression: Gzip/Deflate compression using Bun's native APIs.
- @bklarjs/logger: Production-ready structured logging (JSON) with request correlation.
- @bklarjs/upload: Handle multipart file uploads (Memory or Disk).
- @bklarjs/swagger: Auto-generated OpenAPI documentation and Swagger UI.
- @bklarjs/cron: Schedule background tasks and jobs.
- @bklarjs/static: Serve static files efficiently.
Throw standard errors from anywhere in your application, and Bklar will handle the response codes for you.
import { NotFoundError } from "bklar/errors";
app.get("/item/:id", (ctx) => {
const item = db.find(ctx.params.id);
if (!item) {
// Automatically returns 404 with JSON body
throw new NotFoundError("Item not found");
}
return ctx.json(item);
});Contributions are welcome! If you have ideas, suggestions, or find a bug, please open an issue or submit a Pull Request.
This project is licensed under the MIT License.