A Laravel-inspired framework for Rust.

Routing and controllers, an Eloquent-style ORM, an artisan-like CLI — plus two things no other Rust framework offers: an opt-in event-sourced ORM and htmx-native server-rendered views, no JS build step required.

Routing & controllers

#[controller] and #[get]/#[post]/#[put]/#[delete] macros generate an Axum router from a plain impl block.

Eloquent-style ORM

#[derive(Model)] gives you find, all, create, save, delete — no boilerplate SQL.

Event sourcing, opt-in

#[derive(Aggregate)] gives any model a full, replayable event history with optimistic concurrency — used only where you want it.

htmx + Askama views

Server-rendered HTML with partial-swap responses. No SPA, no API layer, no separate frontend repo.

Session auth built in

Argon2 password hashing and DB-backed sessions via rustavel-auth, wired into a cookie-based AuthUser extractor.

Artisan-like CLI

make:controller, make:model, make:aggregate, make:projection, make:view, migrate, serve.

Two ways to model data, in the same app

Most things are plain Active Record. Things that need an audit trail don't need a separate system — just a different derive.

// Plain CRUD — most things
#[derive(Model, sqlx::FromRow, Serialize, Deserialize)]
#[model(table = "comments", timestamps)]
pub struct Comment {
    #[model(primary_key, skip_on_insert)]
    pub id: i64,
    pub post_id: String,
    pub body: String,
}

// Event-sourced — things that need history
#[derive(Debug, Default, Aggregate)]
#[aggregate(stream = "post", event = "PostEvent")]
pub struct Post {
    pub title: String,
    pub body: String,
}
Build something in 15 minutes →