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 where your AI agent works from the same map you do. Laravel-style conventions, type safety from the route definition to the React component, and mechanical checks that verify the work. Secure by default, agent-ready by default.
The shape of a Guren app
A route points at a controller. The controller validates input, queries a model, and returns an Inertia page — and the React component receives those exact props, type-checked. 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.get('/posts/:id', [PostController, 'show'])
router.middleware('auth').group((auth) => {
auth.post('/posts', [PostController, 'store'])
})
}Agent-native
derived where possible · declared where not · checked always
One command hands an agent everything your project knows about an entity — or the whole map, verified API signatures included. The spec keeps itself honest: ER, domain, and screen views regenerate from code, decision records link to the models they govern, and CI gates catch broken links and drift. Mechanical gates catch mistakes before you read the diff.
None of this is aspirational: it is measured. Agents on Guren runs 20 bug, security and feature tasks with hidden acceptance tests across three models, with and without the harness agent:init installs — 360 runs, every event stream published.

frontmatter, and link to the code and to each other in the body. Open the example's graph — the same screen your own docs get at /_guren/docs while you develop; broken links fail guren check --docs in CI.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.
Measured, not promised
The same spec app on Guren and on the equivalent Node.js MVC stack, self-hosted and 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
Bun-first, deploy anywhere
Bun is the development experience — one toolchain for the dev server, tests, and codegen. Deployment is an adapter: pick a target, install the plugin, ship the same app.
Bun server
Self-host on any VPS or container. The runtime you develop on is the one that serves production.
Deployment guideCloudflare Workers
Workers + D1 at the edge, on the free plan if you like. This site is a Guren app running there.
Deployment guideVercel
One plugin scaffolds the build — and it runs on Vercel's Bun runtime, so the engine travels with you.
Deployment guideAWS Lambda
A handler adapter and Node-compatible defaults take the same app serverless.
Deployment guideGuren (紅蓮) 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.