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

21 of the 22 are published on crates.io alongside the umbral facade — umbral-graphql is newer than the last release and lands with the next one. 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.worker commandOpt-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, 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