Controllers you already know
validateBody() throws a 422, findOrFail() a 404, auth.userOrFail() a 401. Write the happy path — the framework answers for the rest.
紅蓮·/gu·ren/·crimson lotus
Guren is a fullstack framework for Bun. Controllers, models, queues, mail — the conventions you know from Laravel, with type safety that runs from the route definition to the React component. And your AI agent gets the same map you do, shipped with every new app.
The shape of a Guren app
A route points at a controller. The controller validates input, queries a model, and returns a typed Inertia page. That's the whole loop — no serializers, no resolvers, no hand-written API client.
import { Router } from '@guren/core'
export function routes(router: Router) {
router.get('/posts', [PostController, 'index'])
router.post('/posts', [PostController, 'store'])
router.middleware('auth').group((g) => {
g.get('/dashboard', [DashCtrl, 'index'])
})
}Why Guren
validateBody() throws a 422, findOrFail() a 404, auth.userOrFail() a 401. Write the happy path — the framework answers for the rest.
Codegen turns routes, page props, and the API client into compile-time contracts. Rename a route and the build fails — not your users.
Post.where('published', true).get() rides on Drizzle ORM. Models when you want conventions, raw SQL when you don't.
Inertia.js hands controller props straight to your React components. One repo, one deploy, zero REST/GraphQL glue.
Auth, queues, mail, cache, events, scheduling, storage, i18n — first-party subsystems, not a shopping list of npm packages.
guren context maps your app, guren check verifies route–controller–page wiring, guren audit gates security. Your agent reads the same docs you do — every page is served as Markdown.
Agent-native
One command hands an agent your whole project map. Three mechanical gates catch its mistakes before you read the diff. And every new app ships a full agent harness — CLAUDE.md, path-scoped rules, skills, and hooks — whose effect is measured in a public, reproducible evaluation: a 40% cut in agent cost over an undocumented baseline.
Every Guren trial in the evaluation shipped a working feature — scored blind by typecheck, tests, and a hidden HTTP smoke the agent never saw.
Agent cost for the same feature
Median USD per trial — Claude Code building a full tagging feature on Guren
Bare repo
Big CLAUDE.md
Shipped guidance
The guidance in the last bar — a lean auto-loaded CLAUDE.md plus path-scoped rules — is exactly what create-guren-app ships today.
Measured, not promised
The same spec app on Guren and on the equivalent Node.js MVC stack, benchmarked under identical conditions. The app code is held constant, so the gap is Bun itself — and that is the point: keep the Laravel-style architecture, change the engine. Every number is reproducible with one command.
2.3×
SSR throughput
Full Inertia SSR pages, same app on a Node.js MVC framework
3.5×
JSON API throughput
The plain JSON path, same-app comparison
1.8×
Faster cold starts
Process start to first response
Guren (紅蓮) is Japanese for “crimson lotus” — the color of a blazing flame.
It is also a nod to where the framework comes from: Laravel's conventions, re-grown in TypeScript soil. Same flower, different pond.
Guren is stable at v1.0. SQLite by default — no Docker, no config, no boilerplate.