The fullstack TypeScript framework for the AI-agent era.
Laravel-style conventions, end-to-end type safety, and built-in agent introspection and verification — routing, controllers, ORM, authentication, and Inertia.js + React in one cohesive experience that humans and AI coding agents navigate from the same map.
v2 — Stable. Breaking changes only in major releases, per the release policy.
# 1. Scaffold a new app with authentication (dependencies install automatically)
bunx create-guren-app my-app --auth
cd my-app
# 2. Run migrations and seed the demo user (SQLite by default — no server needed)
bun run db:migrate
bun run db:seed
# 3. Start the dev server
bun run devOpen http://localhost:3333 and sign in at /login with demo@example.com / secret.
bunx guren add auth # Authentication
bunx guren add resource posts --fields "title:string,body:text" # CRUD resource
bunx guren add queue # Background jobs
bunx guren add mail # Email sending
bunx guren add cache # Cache layer
bunx guren add notifications # Multi-channel notifications
bunx guren add storage # File storage
bunx guren add events # Events & listeners
bunx guren add broadcasting # Real-time (SSE)
bunx guren add schedule # Cron scheduling
bunx guren add lint # oxlint with the Guren rulesRun bun run codegen after adding features to regenerate types. When you are ready to ship, bun run build creates the production build.
- Agent-ready by default —
guren contexthands an agent the project map with API signatures,guren checkandguren auditverify its work mechanically, and every new app ships an agent harness — and before you have an app, the Guren skills are onenpx skills add gurenjs/agent-skills(orclaude plugin marketplace add gurenjs/agent-skills) away. In a public, blind-scored evaluation, every agent trial shipped a working feature - Laravel-style MVC — routes, controllers, and an Eloquent-inspired Model API
- Inertia.js + React — SPA-like UX without a separate frontend app
- Drizzle ORM — swap database backends through an adapter (PostgreSQL / MySQL / SQLite)
- End-to-end type safety —
bunx guren codegengenerates types from schema to frontend props - Batteries included — auth, queues, mail, cache, notifications, storage, broadcasting, scheduling
- Bun-first, deploy anywhere — develop on the Bun toolchain, then self-host on a Bun server or ship to AWS Lambda, Vercel, or Cloudflare Workers with first-party plugins
import { Controller } from '@guren/core'
import { z } from 'zod'
import { pages } from '@/.guren/pages.gen'
import { Post } from '../Models/Post'
const PostSchema = z.object({
title: z.string().min(1),
body: z.string().min(1),
})
export class PostController extends Controller {
async index() {
const posts = await Post.all()
return this.inertia(pages.posts.Index, { posts })
}
async store() {
const data = await this.validateBody(PostSchema)
const user = await this.auth.userOrFail()
await Post.create({ ...data, authorId: user.id })
return this.redirect('/posts')
}
}import { Router } from '@guren/core'
export function registerWebRoutes(router: Router): void {
router.get('/posts', [PostController, 'index'])
router.post('/posts', [PostController, 'store'])
}import { defineModel } from '@guren/orm'
import { posts } from '@/db/schema'
export class Post extends defineModel(posts) {}
const post = await Post.findOrFail(1)- Official docs — tutorials, API reference, guides
- examples/blog — reference implementation
- Bun v1.1+
- Docker (for the bundled PostgreSQL container)
Issues, discussions, and pull requests are welcome. See CONTRIBUTING.md for setup and workflow.
If Guren is useful to you or your team, consider sponsoring development on GitHub Sponsors. Sponsorships fund ongoing maintenance, documentation, and new features.