紅蓮gu·ren, crimson lotus

The Bun-first fullstack TypeScript framework.

Laravel-style conventions, types from the route to the React component, and checks your coding agent runs on its own work. Develop on Bun, deploy to Bun, AWS Lambda, Vercel or Cloudflare Workers.

Get started

Route to React, one loop

A route points at a controller, and the controller's props reach the React component type-checked. There is no API client to write.

routes/web.ts

import { Router, requireAuthenticated } from '@guren/core'

export function registerWebRoutes(base: Router) {
  const router = base.aliasMiddleware(
    'auth',
    requireAuthenticated({ redirectTo: '/login' }),
  )

  router.get('/posts', [PostController, 'index']).name('posts.index')
  router.get('/posts/:id', [PostController, 'show']).name('posts.show')

  router.middleware('auth').group((auth) => {
    auth.post('/posts', [PostController, 'store']).name('posts.store')
  })
}

Built for AI coding agents

derived where possible, declared where not, checked always

Your agent reads what the project knows from the code itself, and CI fails when the wiring, docs or spec drift.

$ guren context User
Everything about one entity
$ guren spec:generate
ER, domain and screen views from code
$ guren check
Wiring, doc links, spec drift
$ guren audit
Validation, auth, secrets
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
The blog example's docs graph. Your app gets the same view at /_guren/docs.

Measured on 360 runs of 20 tasks across three models, with and without the harness.

Benchmark report, tasks & raw data

turns with the harness (Sonnet 5, 60 runs each)
−28%
cost, at 60/60 vs 58/60 runs passed
−25%
runs that ran guren check, harness vs bare (180 each)
119vs15

Conventions you know. Types you didn't have.

Controllers you already know

validateBody(), findOrFail() and userOrFail() send the error response themselves.

Types from route to React

Rename a route and every page that links to the old name fails to compile.

Drizzle models, Eloquent manners

Eloquent-style queries, run by Drizzle ORM.

No API layer to babysit

Inertia passes controller props straight to React.

Batteries actually included

Auth, queues, mail, cache and more ship with the framework.

Prototype before the backend

Build the pages on fixtures, show them, then write the controllers.

Fast where it counts

The same app on Guren and on a Node.js MVC framework, under identical conditions. The code is held constant, so the difference is Bun.

Methodology & reproductionRead the full comparison

2.3×

SSR throughput

3.5×

JSON API throughput

1.8×

Faster cold starts

Your first app is one command away

Guren v2 is stable. New apps start on SQLite with nothing to set up.

Postgres, an API-only app, or a coding agent to set it up? Pick your options and copy the command or the prompt.