Every capability is a plugin. Including auth.
Umbral gives Rust developers a complete web framework - models, migrations, admin, forms, REST, background work - with every capability delivered as a plugin you can enable, replace, or extend.
$ umbral startproject blog $ cd blog && umbral startapp posts # enable capabilities, they're plugins, wired in main.rs App::builder() .plugin(AdminPlugin::new()) .plugin(RestPlugin::new()) $ cargo run -- makemigrations && cargo run -- migrate ✓ applied 3 migrations · admin at /admin
Every official capability lives behind the same plugin contract a third party can use. Keep it, replace it, or build your own.
How Umbral works
Declare your data. Everything else - the schema, the admin, the API, the typed client - follows from it.
Declare a model
One Rust struct. The attributes carry the rules - length, timestamps, who wrote the row - so every write path enforces them, not just the one you remembered.
Migrate
Umbral diffs your models against the last snapshot and writes the migration. Change the struct later and it writes the ALTER - the loop is the same on day one and day four hundred.
$ cargo run -- makemigrations
+ create table post
$ cargo run -- migrate
✓ 0001_create_post applied
Get the rest for free
Plug in what you want. An admin, a REST API, background jobs, realtime - each one is a plugin reading the same models, so none of it is scaffolding you maintain.
App::builder()
.auto_models()
.plugin(AdminPlugin::default())
.plugin(RestPlugin::default())
.build()?
// /admin - CRUD, search, filters
// /api/post/ - REST, paginated
// gen-client - a typed TS client
Every battery is a plugin, on the same contract a third-party crate uses - which is why you can swap any of them. This site runs on it.
One place to find a plugin for that
No Rust framework has a real home for discoverable, reviewable apps & plugins. Umbral does - search, filter, read what developers are saying, and check a plugin's safety before you install.
model-aware CRUD, dashboards, audit trail, relation pickers
cargo add umbral-admin
Unverified
users, groups, login routes, argon2, reset flows
cargo add umbral-auth
Unverified
model resources, filters, search, pagination, safe writes
cargo add umbral-rest
Unverified
Why everything is a plugin
Auth, sessions, admin, tasks and REST implement the exact trait a community plugin does. There is no privileged core path to special-case.
Each plugin carries its own models and migrations. migrate orders them by a dependency graph - cross-plugin foreign keys included.
Swap the default auth for your SSO, drop in a community GraphQL plugin - the admin, the ORM and the rest of your app keep working unchanged.
Wired in one line
Adding a plugin to your app is a single builder call - no registry edits, no glue module to maintain.
App::builder() .plugin(AdminPlugin::new()) .plugin(RestPlugin::new()) .build()?;
Every capability, a plugin
Official plugins maintained by the Umbral team. Each one is swappable, has its own page, and tracks what's shipped vs. planned.
Model declaration, query ergonomics, multi-database direction.
ShippedDashboards, CRUD, filters, sheets, bulk actions, preferences.
ShippedSerializers, viewsets, routers, OpenAPI, pagination, playground.
ShippedSessions, password hashing, permissions and groups.
ShippedValidation, friendly errors, spam resistance, server rendering.
ShippedBlog, pages, FAQ, media, redirects, banners, testimonials.
BetaBackground jobs, scheduling and retries behind a plugin.
ExperimentalSetup notes, compatibility and per-plugin feature trackers.
ExploreWhat developers say
Verified reviews of the framework - tied to real GitHub identities.
The declare → migrate → change → migrate loop is the thing I missed most coming from other Rust web stacks. Autodetection got the common cases right; the couple it flagged were genuinely ambiguous and better surfaced than guessed.
Auth, sessions, admin, REST — they're all plugins with the same shape as anything I'd write. I swapped the default auth for our SSO without touching the core. That's the dependency inversion working as advertised.
Plugins run real code. We take that seriously.
Every plugin page has a one-click way to report a security concern. Confirmed issues get an advisory and a visible warning - triaged by dedicated plugin auditors.
Join the ecosystem
Ship a plugin, leave a review, report an issue, or just follow along. Every channel below is managed from the same Umbral admin.