A minimal, opinionated framework built on top of Oak. Zero magic, explicit over implicit.
- KISS — Simple solutions over clever abstractions
- YAGNI — No speculative features
- DRY — Consolidate, don't duplicate
- Explicit — No hidden behavior
| Package | Description |
|---|---|
| @r3rc/oku-core | App, router, error handling, validation helpers |
| @r3rc/oku-middleware | CORS, rate limit, security headers, logging, etc. |
| @r3rc/oku-jwt | JWT token creation and verification |
| @r3rc/oku-identity | Identity/auth context utilities |
bun add @r3rc/oku-core @r3rc/oku-middlewareimport {
createApp,
createRouter,
errorHandler,
validateBody,
Status
} from "@r3rc/oku-core";
import {
cors,
requestId,
requestLogger,
secureHeaders
} from "@r3rc/oku-middleware";
import * as v from "valibot";
const app = createApp();
const router = createRouter();
const CreateUserSchema = v.object({
email: v.pipe(v.string(), v.email()),
name: v.pipe(v.string(), v.minLength(2))
});
router.post("/users", async (ctx) => {
const body = await validateBody(ctx, CreateUserSchema);
ctx.response.status = Status.Created;
ctx.response.body = { id: "123", ...body };
});
app.use(errorHandler());
app.use(requestId());
app.use(secureHeaders());
app.use(cors());
app.use(requestLogger());
app.use(router.routes());
app.use(router.allowedMethods());
await app.start({ port: 3000 });createApp()— Oak app with graceful shutdowncreateRouter()— Oak routererrorHandler()— Catches HttpError, ValiError, Oak errorsHttpError— Standard error factories with codesvalidateBody/Query/Params/Headers()— Valibot validation helpersdefineContext()— AsyncLocalStorage-based contextlogger— Simple colored logger
secureHeaders()— Security headers (OWASP)cors()— CORS with Vary header supportrateLimit()— Request rate limitingrequestId()— Request ID generationrequestLogger()— Request loggingtimeout()— Request timeoutbodyLimit()— Body size limitetag()— ETag for optimistic concurrencyhealthCheck()— Health endpoint
All errors follow a consistent format:
{
"code": "USER_NOT_FOUND",
"message": "User not found",
"field": "id"
}Validation errors include details:
{
"code": "VALIDATION_FAILED",
"message": "Validation failed",
"details": [
{
"code": "INVALID_EMAIL",
"field": "email",
"message": "Invalid email"
}
]
}MIT