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,
}