This version is in beta. Some features may change before release.

Feature matrix

Every official Umbral plugin and core capability in one table - auth, admin, REST, OpenAPI, realtime, OAuth, background tasks, multitenancy, row-level security, field encryption, and more.

Everything Umbral ships

Umbral is batteries-included: declare your data and you get migrations, CRUD, an admin, and an optional REST API almost for free. This page lists the whole surface in one place - the 21 official plugins and the capabilities that live in the core.

Info

Every official plugin implements the same Plugin trait you would implement yourself. There is no privileged built-in: AuthPlugin and a plugin you write are both Box, registered with the same .plugin(...) call. If a built-in cannot be expressed as a plugin, the plugin contract is wrong. See Plugins are apps.

Official plugins

All 22 are published on crates.io alongside the umbral facade, and version in lockstep. The Scaffolded column marks the ones umbral startproject wires into main.rs for you; the rest are one line in Cargo.toml plus one .plugin(...) call away.

PluginWhat you getMountsScaffolded
umbral-authUser model, argon2 password hashing, login/signup/logout, email verification, password reset. Swappable user model via the UserModel trait./auth/* (opt-in)Yes
umbral-sessionsDB-backed sessions + signed cookies, linked to auth users.middlewareYes
umbral-adminAuto-generated CRUD admin UI, dashboard widgets, inlines, custom views./adminYes
umbral-restAuto-generated JSON REST API: serializers, viewsets, routers, filtering, pagination, throttling, CSV export. Safe-by-default permissions./apiYes
umbral-openapiOpenAPI 3.0 schema + Swagger UI over your REST endpoints./openapiYes
umbral-graphqlA real GraphQL API derived from your models: relations both ways, DataLoader batching, cursor pagination, mutations, subscriptions over WS/SSE. Deny-by-default./graphqlOpt-in
umbral-securityCSRF middleware, security headers (HSTS, CSP, frame options, nosniff, referrer policy).middlewareYes
umbral-logsNon-blocking request logging into a RequestLog model, browsable in the admin. Optional OTel export.layer + adminYes
umbral-permissionsRole-based access control: ContentType, Permission, Group, user↔group and user↔permission M2M, has_perm query layer.—Opt-in
umbral-oauthSocial login + account connection (Google, GitHub). Provider tokens stored encrypted with Masked<T>./oauth/{provider}/callbackOpt-in
umbral-tasksDB-backed background task queue: define, enqueue, run with a worker process.tasks-worker / tasks-beat commandsOpt-in
umbral-realtimeSSE + WebSocket push, user- and room-targeted, over a pluggable broker. Model subscriptions and presence./realtimeOpt-in
umbral-storageOne Storage trait for static-file serving and media uploads. Local FS + optional S3 backend./static, /mediaOpt-in
umbral-cacheOne Cache handle over a swappable backend (memory, SQLite, Redis) plus cache_page middleware.middlewareOpt-in
umbral-emailSMTP + template-driven transactional email.—Opt-in
umbral-signalsIn-process pub/sub: pre/post save and delete. Plugins emit, other plugins subscribe.—Opt-in
umbral-tenantsSchema-per-tenant multitenancy: one Postgres database, one schema per tenant, shared public schema.middlewareOpt-in
umbral-rlsPostgres row-level security. Declare policies at App::build; on_ready applies them.—Opt-in
umbral-playgroundInteractive, browsable API console for your REST endpoints. Refuses to mount in Prod./playgroundOpt-in
umbral-healthLiveness + readiness probes./healthz, /readyOpt-in
umbral-analyticsProduct-analytics event capture (PostHog backend), ambient client, opt-in per-request middleware.middlewareOpt-in
umbral-livereloadDev-only browser live-reload: file watcher pushes reload / CSS-swap over SSE, client script auto-injected. Inert outside Dev.SSE (dev only)Opt-in

Core capabilities

These need no plugin. They live in umbral-core and reach you through the umbral facade.

AreaWhat you get
ORMTyped QuerySet: filter, exclude, order_by, limit/offset, first, get, count, exists, delete, update_values, bulk_create, select_related, aggregates, joins, transactions.
RelationshipsForeignKey<T>, OneToOne<T>, M2M<T>, reverse relations, in_bulk. i64, String and Uuid primary keys.
Managed migrationsAutodetected from your models: create/alter/drop table and column, renames, data migrations, squashing, drift detection.
inspectdbIntrospect an existing database into models, straight into the managed-migration loop.
TemplatesServer-rendered HTML with autoescaping, custom tags, filters, markdown + syntax highlighting.
WebRouting, middleware, forms, pagination, streaming, compression, request limits, error pages.
BackendsPostgres-first, SQLite for tests. Boot-time system checks catch field/backend mismatches before prod.
CLIstartproject, startplugin, migrate, makemigrations, showmigrations, checkmigrations, inspectdb, createsuperuser, tasks-worker, plus per-plugin commands.
TestingTest client + model factories.

Field types and attributes

Declared on the model, enforced by the schema. #[derive(Model)] turns each of these into migrations, admin form widgets, and REST serializers.

FeatureSpellingWhat it does
Field encryptionMasked<String>Encrypts the column at rest with public-key crypto. A write-only key can seal; only a process holding the secret key can reveal. GDPR-style PII protection with no app code.
Case-insensitive columns#[umbral(case_insensitive)]=, UNIQUE and ORDER BY fold case while preserving the original casing (Postgres citext, SQLite COLLATE NOCASE).
Normalized fields#[umbral(trim, lowercase)]Canonicalizes on every write surface - typed, admin form, and REST.
Soft delete#[umbral(soft_delete)]deleted_at column, excluded from queries by default.
File / image fieldsFileField, ImageFieldUploads through the Storage backend, with an admin widget.
Privileged fields#[umbral(noform, noedit)]Keeps a column out of generated forms, or read-only in them.
Constraints#[umbral(unique, index, unique_together, indexes)]Emitted into migrations and autodetected on change.
Choices#[umbral(choices = ...)]Rust enum ↔ DB CHECK constraint ↔ OpenAPI enum ↔ admin <select>.
Timestamps#[umbral(auto_now, auto_now_add)]Set on write without touching your handler.
Warning
Umbral is `0.0.x`. The surface above is real and tested, but APIs still move before 1.0. Not shipped today: gRPC, i18n, and a first-party WASM frontend - Umbral renders HTML server-side and exposes REST and GraphQL APIs, and expects you to bring your own client if you want one.
featurespluginscomparisonbatteries-includedoverview