紅蓮gu·ren, crimson lotus
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.
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')
})
}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/docs.Measured on 360 runs of 20 tasks across three models, with and without the harness.
validateBody(), findOrFail() and userOrFail() send the error response themselves.
Rename a route and every page that links to the old name fails to compile.
Eloquent-style queries, run by Drizzle ORM.
Inertia passes controller props straight to React.
Auth, queues, mail, cache and more ship with the framework.
Build the pages on fixtures, show them, then write the controllers.
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.
2.3×
SSR throughput
3.5×
JSON API throughput
1.8×
Faster cold starts
Pick a target, add its plugin, ship the same app.
$ bunx guren deploy --target dockerGuide$ bunx guren plugin @guren/plugin-cloudflareGuide$ bunx guren plugin @guren/plugin-vercelGuide$ bunx guren plugin @guren/plugin-lambdaGuideGuren 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.