紅蓮·/gu·ren/·crimson lotus

The fullstack TypeScript framework for the AI-agent era.

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.

Get started

The shape of a Guren app

Route to React, one loop

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.

Terminal
$ bunx create-guren-app my-app
$ cd my-app
$ bun run dev
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

Built for AI coding agents

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.

Terminal
$ bunx guren context User # one entity: model, routes, pages, linked docs
$ bunx guren spec:generate # ER, domain, screens — derived from code
$ bunx guren check # wiring, doc links, spec freshness
$ bunx guren audit # validation, auth, secrets

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.

turns with the harness (Sonnet 5, 60 runs each)
−28%
cost, at 60/60 vs 58/60 tasks passed
−25%
runs that ran guren check, harness vs bare (180 each)
119 vs 15
Benchmark report, tasks & raw data
The Guren docs viewer rendering a blog app's knowledge graph: decision records, generated spec views, model entities, and source files connected by verified links
Your app's knowledge graph, drawn from the blog example's real docs — plain markdown ADRs that declare the entities they govern in 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

Conventions you know. Types you didn't have.

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.

Types from route to React

Codegen turns routes, page props, and the API client into compile-time contracts. Rename a route and the build fails — not your users.

Drizzle models, Eloquent manners

Post.where('published', true).get() rides on Drizzle ORM. Models when you want conventions, raw SQL when you don't.

No API layer to babysit

Inertia.js hands controller props straight to your React components. One repo, one deploy, zero REST/GraphQL glue.

Batteries actually included

Auth, queues, mail, cache, events, scheduling, storage, i18n — first-party subsystems, not a shopping list of npm packages.

Agents are first-class users

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

Fast where it counts

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

Guren
2.3×
Node

Full Inertia SSR pages, same app on a Node.js MVC framework

3.5×

JSON API throughput

Guren
3.5×
Node

The plain JSON path, same-app comparison

1.8×

Faster cold starts

Guren
1.8×
Node

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.

Your first app is one command away

Guren is stable at v1.0. SQLite by default — no Docker, no config, no boilerplate.